Variablen Wert

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Flymoon
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 23
Registriert: Fr, 02. Mär 2012 8:29

Variablen Wert

Beitrag von Flymoon »

Hallo,

hoffe ihr könnt mir mal wieder weiter helfen :D

Wenn ich mit dem Formdesigner Pushbuttons erzeuge und diese dann später im Programm aktiviere bzw. betätige, wo erkenn ich, welchen Wert der Button der Variablen übergibt, bzw. auch welcher Variablen??

Danke
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Variablen Wert

Beitrag von brandelh »

Die Aktion die ausgelöst wird, muss man per Codeblock hinterlegen:

:activate := {| uNIL1, uNIL2, oXbp | Aktion( oXbp ) }
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Variablen Wert

Beitrag von AUGE_OHR »

Flymoon hat geschrieben:Wenn ich mit dem Formdesigner Pushbuttons erzeuge und diese dann später im Programm aktiviere bzw. betätige, wo erkenn ich, welchen Wert der Button der Variablen übergibt, bzw. auch welcher Variablen??
ich denke du meinst mit "variablen" wohl das was bei einem "click" auf einen Button passiert bzw. was er "auslöst".
- Code ausführen, der mit einem Pushbutton assoziiert ist
:activate := {| uNIL1, uNIL2, oSelf | ... }
das könnte also so aussehen

Code: Alles auswählen

      oXbp:activate:= {|| QOut( "Pushbutton A" ) } 
oder

Code: Alles auswählen

      oXbp:activate:= {|| Machmal() }
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Variablen Wert

Beitrag von Herbert »

Wie die Vorschreibenden Experten festhielten: ein Pushbutton hat vor allem einen Zweck, mnämlich gedrückt zu werden und dabei eine Aktion auszuführen.
Aus der Online-Hilfe siehst du, dass der Pushbutton "normale" Eigenschaften besitzt, zum Beispiel einen Text, welcher mit ::caption gesetzt, resp. mit ::setcaption neu gesetzt werden kann.
Die Superklasse, also die übergeordnete Klasse, welche dem Pushbutton verebrt wird, ist das XbpWindow:. Dort siehst du, dass man den Pushbutton z.B. mit ::hide verstecken oder mit ::disable ausser Kraft setzen kann.

Heisst also, dass per se mit dem xbpPushButton nicht eine Variable bedient wird, sondern eine Aktion. Einer Variablen gerecht wird das objekt XbpSLE, ein normales Eingabefeld.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Variablen Wert

Beitrag von brandelh »

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 ;-)
Gruß
Hubert
Flymoon
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 23
Registriert: Fr, 02. Mär 2012 8:29

Re: Variablen Wert

Beitrag von Flymoon »

Hi, erstmal danke für die Hilfe

muss gestehen da ich Java,VB, PHP im Studium hatte habe ich das Handbuch mehr oder weniger nur überflogen :wink:
Und Problem ist auch das ich als Student gerade an nem Projekt arbeite das unter Zeitdruck steht und Handbuch lesen daher eher aus Zeit gründen eher flach fällt, learning by doing ist grad eher angesagt :)

Ich habe mich glaub auch etwas unklar ausgedrückt bezüglich meiner Fragestellung:

Ich habe eine Variable m_edit die den Wert False hat, d.h jedesmal wenn ich den Button editiere drücke wird diese Variable True und ich kann meine Datenbankfelder edititieren, nur kann ich wenn ich fertig bin diese nicht speichern, bzw. die GUI behält die Editierten Werte nicht und da dachte ich das es etwas mit der Variablen zu tun hat. Sry aber bei Java mach ich alles mit Event und Action Listener.

Aber wie schon erwähnt danke für eure Hilfe, ist echt n klasse Forum :)
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Variablen Wert

Beitrag von brandelh »

bei den SLE gibt es einen codeblock im DATALINK der häufig genutzt wird um direkt die Eingaben in den Feldern zu speichern,
aber dazu muss man dann für jedes davon :getData() aufrufen (:setData() holt die Daten aus der Datenbank in die SLE)
Aus diesem grunde gibt es auch meist ein Array mit ::aEditcontrols (im Quellcode nachsehen) und man ruft einfach
aeval( ::aEditcontrols, {|oC| oC:getData() } ) auf.

Ich persönlich mache das nicht so.
Ich habe 2 Methoden, DatenLaden() und DatenSpeichern() diese rufe ich auch über Pushbuttons bzw. beim fensteraufbau das Laden auf.
So habe ich die Kontrolle und alles an einem Platz. Das ist Geschmackssache, bei mir ist also der DATALINK immer NIL.

Die Controls selbst kann man entweder mit disable() oder :setEditable( .f. ) ausschalten.
Ich bevorzuge :setEditable( .f. ) bei READONLY Feldern (man kann rein clicken und markieren), disable() nur wenn etwas nicht erlaubt ist.
Gruß
Hubert
Flymoon
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 23
Registriert: Fr, 02. Mär 2012 8:29

Re: Variablen Wert

Beitrag von Flymoon »

Hi,

ach klar ich kann es ja eigl über 2 Methoden machen wie du es machst, denk so werde ich es mal probieren. :D

Gruß
Antworten