Das soll jetzt kein "Anschiss" sein, also nicht falsch verstehen
Grundsätzlich sollte JEDER der mit Xbase++ (oder anderen Sprachen anfängt) mit dem Studium des Handbuches (bei Xbase++ die Hilfedatei) anfangen.
Dort mit den Grundlagenkapiteln. Auch wenn dies lästig erscheint, ist es der schnellste Weg um einen Einstieg zu erhalten.
Gerade weil die Xbase++ IDE / Formdesigner nicht so leistungsfähig ist, muss man etwas mehr wissen.
Dennoch auch bei Delphi etc. muss man verstanden haben wie die Teile zusammen gehören.
Ich rate also zunächst zu
"Grundlagen der Programmierung" (im Prinzip alles, für die aktuelle Frage aber ...)
- Benutzeroberflächen und Dialogkonzepte
"Klassenreferenz und Application Parts" (im Prinzip auch alles, für die aktuelle Frage aber ...)
- Xbase-Parts
Wenn man nun z.B. den Button näher untersuchen möchte (was kann der, wie kann ich den ändern/einstellen etc.),
ruft man in der Hilfe entweder über den Baum oder über den "Index" (da genügen Teilbegriffe wie "XbpPu") die Klassenbeschreibung auf: XbpPushButton()
Die Hauptseite "XbpPushButton() - Klassenfunktion der XbpPushButton-Klasse " zeigt die übergeordneten und abgeleiteten Klassen, die Variablen und Methoden auf.
Viel Text und die Methoden / Eigenschaften der Superklassen fehlen, aber wenn man nun die Schaltfläche "Klassenbaum" drückt, dann ...
erhält man eine Ansicht mit 3 Tabs:
* "iVar" = Eigenschaften/Variablen,
* "Methoden" = entspricht etwa Funktionen des Objektes,
* "Callbacks" die Bezeichnung und die Bedeutung von diesem werden einem nur klar,
wenn man verstanden hat wie eine Windowsanwendung arbeitet:
Der User klickt auf den Button, Windows bemerkt den Klick und ermittelt welches Control/Anwendung gemeint sein könnte.
Offensichtlich deine Xbase++ Gui Anwendung, also erzeugt Windows einen Event (Maus Klick) und gibt den an die Anwendung/Control ...
Xbase++ Anwendungen erhalten jede Menge Events und geben genau die weiter, die in den "Callbacks" aufgezählt sind.
Bei einem Pushbutton der angeklickt wird, wandelt das Xbase++ Runtimesystem (es könnte auch schon windows selbst sein ...)
dies in einen Activate Event für den gedrückten Pushbutton um, deine Eventloop erhält den und ruft handleevent auf,
das Control-Objekt => dein Pushbutton erhält also den activate event und sieht nach, ob DU vorher im Code
den CALLBACK Codeblock :activate mit einem Codeblock gefüttert hast.
- Wenn nicht (= NIL) passiert nix.
- Wenn ja wird der Code ausgeführt.
Eine ganz große FALLE lauert in den Beispielen:
Code: Alles auswählen
Klasse
XbpPushButton()
Slot: :activate := {| uNIL1, uNIL2, self | ... }
wer das so nutzt, kann im Codeblock selbst nicht mehr auf das Fenster zugreifen, da SELF jetzt als Variable das aufrufende Control und nicht mehr das Fenster meint !
:: ist eine Abkürzung für SELF und daher wird das schief gehen:
Code: Alles auswählen
...
::oSLE:setData("Test")
::oPushButton:activate := {| uNIL1, uNIL2, self | msgbox(::oSLE:editBuffer()) } // => Fehlermeldung "Methode für das Objekt unbekannt" oder so.
ich verwende immer oXbp für den 3. Parameter !
Code: Alles auswählen
...
::oSLE:setData("Test")
::oPushButton:activate := {| uNIL1, uNIL2, oXbp | msgbox(::oSLE:editBuffer()) } // => msgbox("Test")
::oPushButton:activate := {| uNIL1, uNIL2, oXbp | msgbox("gedrückt wurde: "+oXbp:caption) } // Beschriftung anzeigen
Sollte dann etwas unklar sein, nix wie her mit den Fragen, so lernt man es am Besten
![Wink ;-)](./images/smilies/wink.gif)