xbpSLE:vaild?
Moderator: Moderatoren
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
xbpSLE:vaild?
Hi,
irgendwo habe ich mal gelesen, daß man ein oXbpSLE mittels Codeblock validieren kann. Finde das aber nicht mehr.
Ich möchte direkt bei der Eingabe prüfen, ob die Eingabe ein gültiges Datum ist. Kann mir jemand mal ein Beispiel eines entsprechenden Codeblocks zeigen. (Wobei ich Codeblocks nach jetzt nach doch schon einigen Jahren immer noch nicht verstanden habe )
irgendwo habe ich mal gelesen, daß man ein oXbpSLE mittels Codeblock validieren kann. Finde das aber nicht mehr.
Ich möchte direkt bei der Eingabe prüfen, ob die Eingabe ein gültiges Datum ist. Kann mir jemand mal ein Beispiel eines entsprechenden Codeblocks zeigen. (Wobei ich Codeblocks nach jetzt nach doch schon einigen Jahren immer noch nicht verstanden habe )
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: xbpSLE:vaild?
Hallo, Wolfgang -
meinst Du eventuell die iVar validate?
meinst Du eventuell die iVar validate?
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: xbpSLE:vaild?
hm. mir ist der Unterschied zwischen iVar validate und validate() method nicht klar. Ich vermute aber mal, daß ich validate() method brauche?!
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: xbpSLE:vaild?
Hallo, Wolfgang -
beides, iVar wie Methode, leiten sich von DataRaf her. Ich vermute mal, dass Du die iVar mit einem Codeblock zur Prüfung beschicken musst, und dann mittels der Methode den Codeblock ausführen lassen kannst.
beides, iVar wie Methode, leiten sich von DataRaf her. Ich vermute mal, dass Du die iVar mit einem Codeblock zur Prüfung beschicken musst, und dann mittels der Methode den Codeblock ausführen lassen kannst.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2126
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: xbpSLE:vaild?
Ein Codeblock ist nichts anderes als Code in einer Funktion. Nur kannst keine Befehle verwenden. Aufgerufen wird ein Codeblock mittels eval().
Beispiel:
Ausführung:
ist die einfachste Form. In Xbase++ gibt’s viele Slots für Codeblöcke, also z. B. den Validate-Slot bei SLEs. Dort kannst einen Codeblock hinterlegen.
Besonderheit: Hier wird ein Parameter an einen Codeblock übergeben. Ist nichts anderes, als ein Parameter an eine Funktion. Willst Du den Parameter im Codeblock nutzen, musst Du ihn – wie in einer Funktion – mit einer Variable belegen. Das macht man zwischen den zwei |:
oder auch:
dann kannst innerhalb (!) des Codeblocks mit der Variable auch arbeiten.
Ok?
Beim Validate wird intern die Rückgabe Deines Codeblocks geprüft, diese muss logisch sein. Ist sie .t., darf das Eingabefeld verlassen werden, ist sie .f., hat der Benutzer Pech gehabt.
Bei mir sieht z. B. einer so aus:
In der Funktion plz wird dann geprüft, ob Ort und oder PLZ bekannt sind und entsprechend automatisch ersetzt. PLZ() gibt bei mir dann immer .t. zurück.
2. Beispiel:
Vorsicht: Der Validate-Slot wird nicht automatisch aufgerufen, das musst Du selbst übernehmen! Z. B. im killInputFocus-Slot oder beim Speichern Deiner SLEs.
Siehe dazu auch https://www.xbaseforum.de/viewtopic.php?p=57683#p57683
Beispiel:
Code: Alles auswählen
local bTuwas := {||dbGotop(), rec_lock(), adresse->name := “Hanswurscht”, dbunlock()} // bayrische Schreibweise
Code: Alles auswählen
eval(bTuwas)
Code: Alles auswählen
oSLE:validate := bTuwas
Code: Alles auswählen
local bTuwas := {|oMeinSLE|dbGotop(), rec_lock(), adresse->name := oMeinSLE:editBuffer(), dbunlock()}
Code: Alles auswählen
local bTuwas := {|self|dbGotop(), rec_lock(), adresse->name := self:editBuffer(), dbunlock()}
Ok?
Beim Validate wird intern die Rückgabe Deines Codeblocks geprüft, diese muss logisch sein. Ist sie .t., darf das Eingabefeld verlassen werden, ist sie .f., hat der Benutzer Pech gehabt.
Bei mir sieht z. B. einer so aus:
Code: Alles auswählen
oXbp:validate := {||plz(.T., aEditControls[9], aEditControls[8])}
2. Beispiel:
Code: Alles auswählen
oXbp := xbpSLE():new( drawingArea, , {LINKS4, nY}, {80, SLE[2]})
oXbp:bufferLength := 6
oXbp:tabStop := .f.
oXbp:dataLink := {|x| if(x == NIL, str(adresse->KUNDEN_NR), adresse->KUNDEN_NR := val(x))}
oXbp:validate := {|self|.not. empty(self:editBuffer())}
oXbp:create():setData()
Siehe dazu auch https://www.xbaseforum.de/viewtopic.php?p=57683#p57683
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: xbpSLE:vaild?
Der Validate-Slot ist vor allem dann hilfreich, wenn man Klassen von XbpSLE ableitet, etwa für Datumseingaben, numerische Eingaben usw., und dort dann schon beim Initialisieren der Klasse den richtigen Code etwa für eine Prüfung der Datumseingaben hinterlegt (oder in einer anderen Ableitung den für numerische Eingaben, oder in einer Sammelklasse abhängig davon, wie etwa eine iVar "SLEtyp" belegt wird). Und dort füllt man auch KillInputFocus vor, wenn man möchte. Dann muss man im konkreten Code nur noch wenig tun. Wenn man diese Slots dann allerdings ergänzend oder abweichend bestücken will, muss man aufpassen. Oder Codeblöcke mergen.
Muss man nicht so machen, kommt mir aber eleganter vor.
Muss man nicht so machen, kommt mir aber eleganter vor.
Herzlich,
Tom
Tom
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: xbpSLE:vaild?
Herzlichen Dank an alle für die ausführlichen Antworten. Hat jetzt mehr Sinn sich damit zu beschäftigen ...
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbpSLE:vaild?
hi,
XbpGet arbeitet mit dem GET System was ein VALID hat
gefragt ist aber XbpSLE = WC_EDIT also das Windows Control und nicht das "überladene GET"
validate() ist die Method die man ausführt was dann als Ergebnis in validate dann steht
die Function könnte so aussehen
t
XbpGet arbeitet mit dem GET System was ein VALID hat
gefragt ist aber XbpSLE = WC_EDIT also das Windows Control und nicht das "überladene GET"
validate() ist die Method die man ausführt was dann als Ergebnis in validate dann steht
Code: Alles auswählen
oXbp:Validate := { | o | ValidDate( o ) }
Code: Alles auswählen
FUNCTION ValidDate( oObj )
LOCAL dDate := oObj:getdata()
LOCAL cDate, lRet := .T.
cDate := DTOC(dDate)
dDate := CTOD(cDate)
IF EMPTY(dDate)
lRet := .F.
oObj:SetFocus() // zurück auf das Object
ENDIF
RETURN lRe
gruss by OHR
Jimmy
Jimmy