ich brauche einen Block mit Pushbutton. Insgesamt sind es 22 PB. Dieser Block ist imer gleich aufgebaut, aber die Beschriftung, Action Block, Hide usw. sind verschieden. Also dachte ich mir, ich baue diesen Block in einer For Next Schleife auf fülle die Pushbutton mit Standardwerten um sie dann später im Menue mit aktuell gewünschten Werten zu aktualisieren.
Code: Alles auswählen
METHOD vt_dialog:init(nWindowWidth,nWindowHeight,cVersion,oParent,cArt,nPbReihen,getlist)
.....
FOR nI := 1 TO 22 // jetzt wird das grundarray für die Pushbuttonleiste gefüllt
::doPbLeiste:stelle := nI
::doPbLeiste:text := ""
::doPbLeiste:aktion := {|| NIL}
::doPbLeiste:inaktiv := {|| .T.}
AAdd(::aPbLeiste,::doPbLeiste:copy())
NEXT
::aPbLeiste[16]:text := "~Anfang"
::aPbLeiste[16]:aktion := ""
::aPbLeiste[16]:inaktiv := {|| .F.}
::aPbLeiste[17]:text := "~nächster"
::aPbLeiste[17]:aktion := ""
::aPbLeiste[17]:inaktiv := {|| .F.}
::aPbLeiste[18]:text := "~Ende"
::aPbLeiste[18]:aktion := ""
::aPbLeiste[18]:inaktiv := {|| .F.}
::aPbLeiste[19]:text := "~Info"
::aPbLeiste[19]:aktion := ""
::aPbLeiste[19]:inaktiv := {|| .F.}
::aPbLeiste[19]:text := "~TG"
::aPbLeiste[19]:aktion := ""
::aPbLeiste[19]:inaktiv := {|| .F.}
::aPbLeiste[21]:text := "~Jahr"
::aPbLeiste[21]:aktion := "{|| oDialogZusatz:wechseljahr()}" <-- hier z.B. oDialogZusatz ist ja hier nicht bekannt und würde dann angemeckert werden wenn ich es nicht in Anführungszeichen setzen würde. Dann klappt es aber nicht im Action Block des PB
::aPbLeiste[21]:inaktiv := {|| .F.}
::aPbLeiste[22]:text := "verlassen"
::aPbLeiste[22]:aktion := {|| DC_ReadGuiEvent(DCGUI_EXIT_ABORT,GetList)}
::aPbLeiste[22]:inaktiv := {|| .F.}
RETURN self
Code: Alles auswählen
METHOD vt_dialog:standardPbLeiste(getlist)
LOCAL nDurch := 0
LOCAL nI
LOCAL nLinks := 5
LOCAL nOben := 15
LOCAL nZusatz := 60
MEMVAR cNi
MEMVAR oVtPara
FOR nI := 1 TO 22
cNi := Alltrim(STr(nI))
@ nOben,nLinks DCPUSHBUTTON;
ACTION IF(Valtype(::aPbLeiste[nI]:aktion) == "B",::aPbLeiste[nI]:aktion,{|| ::aPbLeiste[nI]:aktion});
ALIGNCAPTION BS_LEFT;
CAPTION ::aPbLeiste[nI]:text;
HIDE ::aPbLeiste[nI]:inaktiv;
OBJECT ::oPbLeiste&cNi;
PARENT ::oRahmenPbLeiste;
SIZE ::nPblaenge + nZusatz,::nPbHoehe;
TABSTOP
nDurch++
nOben += ::nPbHoehe
IF nDurch = 3
nDurch := 0
nLinks += ::nPbLaenge + nZusatz
nOben := 15
ENDIF
NEXT
RETURN self
Code: Alles auswählen
METHOD DialogArchivMenue:initvaria()
MEMVAR oVtPara
::aArchivDaten := {}
::doArchivDaten := DataObject():new()
::oArchiv := archive():new()
::x_jjjj := StrZero(Year(Date()),4,0)
::oArchiv:cDbank += ::x_jjjj
// ob das die beste Lösung ist? (30.12.2018)
::aPbLeiste[1]:text := "~Fehlerprotokoll"
::aPbLeiste[1]:aktion := ""
::aPbLeiste[1]:inaktiv := {|| .F.}
RETURN self
Meine Frage ist nun, wie wird der Action Codeblock vernünftig aus dem Array an den Pushbutton übergeben? Trage ich den Codeblock im Array ein, oder trage ich dort nur einen Text ein, der dann in einen Codeblock eingefügt wird? Es kommt vor, das dort Variablen stehen, die in der INIT Datei noch nicht bekannt sind. Und alle übergeben, oder Public/Private machen ist auch nicht die Lösung.
Weiterhin habe ich noch das Problem, wenn ich denn die Pushbutton ordentlich versorgt habe und sie klappen, dann kommt eine Fehlermeldung, die besagt, ich wäre außerhalb des Arrays. Es wird angeblich versucht Element 23 anzusprechen, was aber nicht vorhanden ist.
Für den Anfang wäre erstmal ein Tipp bzgl. der Codeblocks gut, der mir weiterhelfen würde.