xbpSLE:vaild?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

xbpSLE:vaild?

Beitrag von Wolfgang_B »

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 :-( )
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: xbpSLE:vaild?

Beitrag von georg »

Hallo, Wolfgang -


meinst Du eventuell die iVar validate?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: xbpSLE:vaild?

Beitrag von Wolfgang_B »

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: xbpSLE:vaild?

Beitrag von georg »

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: xbpSLE:vaild?

Beitrag von Werner_Bayern »

Ein Codeblock ist nichts anderes als Code in einer Funktion. Nur kannst keine Befehle verwenden. Aufgerufen wird ein Codeblock mittels eval().

Beispiel:

Code: Alles auswählen

local bTuwas := {||dbGotop(), rec_lock(), adresse->name := “Hanswurscht”, dbunlock()}	// bayrische Schreibweise
Ausführung:

Code: Alles auswählen

eval(bTuwas)
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.

Code: Alles auswählen

oSLE:validate := bTuwas
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 |:

Code: Alles auswählen

local bTuwas := {|oMeinSLE|dbGotop(), rec_lock(), adresse->name := oMeinSLE:editBuffer(), dbunlock()}
oder auch:

Code: Alles auswählen

local bTuwas := {|self|dbGotop(), rec_lock(), adresse->name := self:editBuffer(), dbunlock()}
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:

Code: Alles auswählen

oXbp:validate := {||plz(.T., aEditControls[9], aEditControls[8])}
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:

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()
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
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: xbpSLE:vaild?

Beitrag von Tom »

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.
Herzlich,
Tom
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: xbpSLE:vaild?

Beitrag von Wolfgang_B »

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
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xbpSLE:vaild?

Beitrag von ramses »

Schau dir doch mal das Beispiel von Alaska an:

c:\alaska2\source\samples\solution\xbpget
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpSLE:vaild?

Beitrag von AUGE_OHR »

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

Code: Alles auswählen

   oXbp:Validate := { | o | ValidDate( o ) }
die Function könnte so aussehen

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
t
gruss by OHR
Jimmy
Antworten