Seite 1 von 1

XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 9:38
von Jan
Moin,

der :stableBlock ist ja ein Codeblock. Leider hat Alaska die Doku dazu extremst runter gefahren, ich finde da jedenfalls rein überhaupt gar nichts zu. Weiß jemand, was die Parameter sind, die automatisch generiert werden in [|Parameter| .....}?

Jan

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 9:52
von Tom
Im XbpBrowse-Quellcode allerdings für die 1.9SL1 steht das hier für die Auswertung des StableBlocks (in der Methode ForceStable):

Code: Alles auswählen

IF ValType( ::StableBlock ) == "B"
  EVAL ( ::StableBlock, self:&(self:className()) )
ENDIF
Der (einzige) Parameter ist also der Name der Klasse, wenn ich das richtig verstehe.

Edit: Quatsch, da ist ja ein Makrooperator davor. Also das Klassenobjekt.

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 10:35
von Jan
Hallo Tom,

danke für die Bestätigung. Ich hatte mir sowas ähnliches fast gedacht. War aber eher von der sonst üblichen Parameterzahl drei ausgegangen. Wo dann meist der Dritte das self ist. Und die davor dann entweder uNil, oder was reales.

Warum Alaska da nicht mal eine ordentliche Doku zu macht für all die Methoden, die es da gibt. Vor Allem, wenn die auch mal mit der Anzahl der Parameter spielen.

Jan

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 10:51
von Tom
Ja, das stimmt. Ich hänge dann immer eine Anzahl Parameter rein und schaue sie mir einfach an:

Code: Alles auswählen

{|a,b,c,d,e,f|MsgBox(Var2Char(a)+"|"+Var2Char(b) ...)}
Bei StableBlock hatte ich ja den Quellcode, das war einfacher.

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 10:56
von brandelh
Jan hat geschrieben: Mi, 06. Dez 2017 10:35 War aber eher von der sonst üblichen Parameterzahl drei ausgegangen.
Wo dann meist der Dritte das self ist. Und die davor dann entweder uNil, oder was reales.
natürlich wäre eine bessere Doku nützlich, aber die "üblichen 3 Parameter" für alle Methoden / Funktionen / Codeblocks gibt es so nicht !

Wenn in der Hilfe ein "callback" Codeblock beschrieben wird, gilt die 3 Parameter Regel, denn ein codeblock, der von einem Control "angerufen wird" (= "callback"), benötigt die Infos (P1,P2,oWerRuftMichAn) ...
Für normale Funktionen und codeblöcke ist Anzahl und Bedeutung der Parameter beliebig - von Alaska oder dem Autor vorgegeben.

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 11:34
von Jan
Hallo Hubert,

ich stimme Dir in sofern zu, als das prinzipiell selbstverständlich die Anzahl der Parameter egal ist und sehr unterschiedlich sein kann. Aber die Erfahrung zeigt, das zumindest in den XbParts von Alaska es fast durchgängig drei sind. Wenn dann mal einer nicht belegt ist, dann ist der halt uNil. Wie z. B. bei XbpBrowse:keyboard. Da ist das dann halt {|nKeyboard, uNil, self| ...}.

Jan

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 11:35
von Jan
Hallo Tom,

ja, so hatte ich mir auch schon teilweise was zusammengeraten. Es lebe der kriminalistische Spürsinn ..

Jan

Re: XbpBrowse:stableBlock

Verfasst: Mi, 06. Dez 2017 11:42
von brandelh
Jan hat geschrieben: Mi, 06. Dez 2017 11:34 ich stimme Dir in sofern zu, ... Aber die Erfahrung zeigt, das zumindest in den XbParts von Alaska es fast durchgängig drei sind.
Wenn dann mal einer nicht belegt ist, dann ist der halt uNil. Wie z. B. bei XbpBrowse:keyboard. Da ist das dann halt {|nKeyboard, uNil, self| ...}.
Nochmal, aber nur wenn es CALLBACK Codeblöcke sind ;-)

Man könnte z.B. in diesen ein Tone() hinterlegen, damit der Anwender aufwacht sobald die Daten eingelesen und komplett angezeigt werden. Sind ja nicht die schnellsten die XbpBrose() :badgrin:

Re: XbpBrowse:stableBlock

Verfasst: Do, 07. Dez 2017 1:00
von AUGE_OHR
die 3 Parameter lauten unter Xbase++ :

Code: Alles auswählen

mp1,mp2,oXbp 
und sind überall dort vorhanden wo ein Windows Event auf ein Callback Slot geleitet wird.

---

was o:Stableblock angeht : wie auch in einer Event Schleife sollte "wenig" Code, der Zeit braucht, ausgeführt werden.
man darf aber "AUF KEINEN FALL" dann noch den Pointer (= RECNO() ) verändern denn dann ist er eben "nicht stable"

was man aber machen kann ist, per Event, einen anderen Thread damit anzusteuern der z.b. die RELATION anzeigt

Code: Alles auswählen

o:StableBlock := { || PostAppEvent( MyEvent, FIELD->RECNO(),, oThread2 ) }