sdidemo

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

sdidemo

Beitrag von Manfred »

Hi,

könnte mir jemand kurz erklären, oder bestätigen was ich hier von mir gebe?

sdidemo Programmteil sdicust.prg Zeile 47

Code: Alles auswählen

oXbp:validate := {|o| IsIndexUnique( 1, Padl(Trim(o:editBuffer()),6) ) } 
Dieses "o" zwischen den Trennzeichen ist ein übergebenes Objekt. Ist es das oXbp ? Wird dann einfach nur ein "o" eingetippt und das Programm weiß Bescheid, oder wie ist das zu verstehen?

Ich versuche immer noch die Codeblöcke zu verstehen....

Danke im voraus
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: sdidemo

Beitrag von brandelh »

Manfred hat geschrieben:könnte mir jemand kurz erklären ...

Code: Alles auswählen

oXbp:validate := {|o| IsIndexUnique( 1, Padl(Trim(o:editBuffer()),6) ) } 
Dieses "o" zwischen den Trennzeichen ist ein übergebenes Objekt. Ist es das oXbp ?
Hallo Manfred,

ich versuche mich kurz zu halten ... also immer zuerst in der Doku nachsehen, was für Parameter von der METHODE zurückgegeben werden. Diese Parameter müssen dann zwischen | parameterliste | eingeschlossen werden:

Du fütterst hier die Instanzvariabel :validate ..., der hier angegebene Codeblock wird von der METHODE :validate() aufgerufen, um die Validierung vorzunehmen. In der Doku steht:
Die Methode :validate() dient der Validierung der aktuellen Daten im Editierpuffer eines Xbase-Parts. Dazu muß in der Instanzvariable :validate ein Validierungscodeblock eingetragen sein. Diesem wird self übergeben.
Es wird also als Parameter das Xbp übergeben (in einer lokalen Variablen -> hier O ), welches die Aktion ausgeführt hat. Die Dokumentation nennt es SELF, das ist aber unglücklich ! Denn in dem Moment wo die Instanzvariable gefüttert wird (INIT etc.) bezeichnet SELF oder :: ja die komplette Fensterklasse !
Zur Laufzeit wird aber dem Codeblock das SELF des XbaseParts also oXbp in deinem Beispiel übergeben.
Würde man so schreiben:
{|self| self:... } wären beide self NICHT das FENSTER-SELF, sondern die lokale Variable, welche den ersten Parameter übernimmt.

Die Anzahl der Parameter ist nicht festgelegt, so wird häufig

{|nNil, nNil, oXbp| ... } verwendet, wobei der 3. Parameter das Objekt ist, welches diesen Codeblock aufgerufen hat, und die beiden ersten Parameter unterschiedlich z.B. Keyboard-Wert belegt sind.

Immer in der Doku nachsehen um die übergebenen Parameter zu erkennen.

Leider ist die nicht immer gut zu verstehen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Gut dokumentiert wäre es wenn dort stünde:
:validate(oXbp)

Die Methode :validate() dient der Validierung der aktuellen Daten im Editierpuffer eines Xbase-Parts. Dazu muß in der Instanzvariable :validate ein Validierungscodeblock eingetragen sein. Diesem wird self übergeben.
dann wüßte jeder, aha es wird das ausführende Xbp übergeben ... so muß man im Text suchen oder sogar im Debugger ...
Gruß
Hubert
Antworten