tzw formatka interaktywna
bardzo fajna rzecz ale delikatnie rzecz ujmujac "upierdliwa"
czlowiek u nas niezle sie nameczyl zanim to roszyfrowal
w helpie fk mamy opis i przyklad
OnCommand - podprogram
Podprogram standardowo nazwany OnCommand (istotna jest składnia, a nie nazwa, ale najczęściej zachowana jest również nazwa) jest używana w raportach do kontroli działania okna dialogowego, po jego wyświetleniu poleceniem ExecForm. Podprogram powinien zostać zdefiniowany zgodnie z potrzebami okna dialogowego, a następnie podany jako parametr polecenia ExecForm. Sposób wykonania został zaprezentowany w przykładzie do tego opisu.
Przykład
Kod:
Int ch1, ch2, id2, id3, id4, id5
//Zdefiniowanie podprogramu OnCommand z obsługą poleceń Save i Load
Int Sub OnCommand(int id, int msg)
//Zapisanie do zmiennych stanu widocznego w dialogu
If id == id4 Then Save
//Ustawienie stanu elementów dialogu zgodnie ze stanem zmiennych
If id == id5 Then Load
EndSub
//Wyświetlenie dialogu z prezentacją działania poleceń
Form "Zastosowanie poleceń Save i Load", 448, 288
//Pola wyboru do pokazu stanu zmiennych
id2 = ChkBox "Pole wyboru nr 1", ch1, 50, 30, 250, 24
id3 = ChkBox "Pole wyboru nr 2", ch2, 50, 60, 250, 24
//Pole wyboru uruchamiające zapisanie do zmiennych stanu widocznego w dialogu
id4 = Button "&Zapamiętaj stan elementów", 132, 112, 200, 24, 1
//Przycisk uruchamiające ustawienie stanu elementów na podstawie zmiennych
id5 = Button "&Ładuj dane ze zmiennych", 132, 152, 200, 24, 1
Button "&Anuluj", 296, 204, 100, 24, -1
Button "O&K", 72, 204, 100, 24, 2
Int wyjdz = ExecForm OnCommand
//Zakończenie raportu bez prezentowania wyników
If wyjdz != 2 Then Error ""
//Prezentacja wyników do wydruku
If ch1 == 1 then
Print "Pole wyboru nr 1 zostało zaznaczone",LF
Else
Print "Pole wyboru nr 1 nie zostało zaznaczone",LF
EndIf
If ch2 == 1 then
Print "Pole wyboru nr 2 zostało zaznaczone",LF
Else
Print "Pole wyboru nr 2 nie zostało zaznaczone",LF
EndIf
a to jest u nas z mozliwoscia zapisania ( kod jest oczywiscie czesciowy ;P)
Kod:
ExecForm(OnCommandS)
int sub OnCommandS(int id, int msg)
select case id
case 0
id = idnrzlec
case idnrzlec, idokrzn, idnrzlec, idmodel, idsernr, idnapr
// case idreczn
case else
goto kon_sub
endselect
Save //zatwierdzam wartości
if id == idnrzlec then
if i_numerzlec then
Enable(idnrzlece,1)
SetVal(idmodel, 0)
Enable(idmodel,0)
SetVal(idsernr, 0)
Enable(idsernr,0)
SetVal(idnapr, 0)
Enable(idnapr,0)
SetVal(idokrzn, 0)
Enable(idokrzn,0)
else
Enable(idnrzlece,-1)
Enable(idmodel,1)
Enable(idsernr,1)
Enable(idnapr,1)
Enable(idokrzn,1)
endif
Save
endif
// if !i_numerzlec then
// Enable(idnrzlece,-1)
// else
// Enable(idnrzlece,1)
// endif
if !i_model then
Enable(idmodele,-1)
else
Enable(idmodele,1)
endif
if !i_serialno then
Enable(idsernre,-1)
else
Enable(idsernre,1)
endif
if !i_naprawiajacy then
Enable(idnapre,-1)
else
Enable(idnapre,1)
endif
if !i_okrzn then
Enable(idlpdat,-1)
Enable(idodozn,-1)
Enable(idddozn,-1)
Enable(idodoznt,-1)
Enable(idddoznt,-1)
else
Enable(idlpdat,1)
Enable(idodozn,1)
Enable(idddozn,1)
Enable(idodoznt,1)
Enable(idddoznt,1)
endif
Load //odświeżam wartości na formatce
kon_sub:
endsub
mam nadzieje ze to cos pomoze...