Hallo,
Ich beschäftige mich gerade mit Callback-Funktionen.
Dabei ist mir eine Idee für XProfan gekommen.
Gerade bei den XProfan-Funktionen, die Listen bearbeiten,
wäre es doch hilfreich, so einen Callback unterzuschieben.
Ich denke da vor allem an die MOVE - Funktionen. Die
arbeiten ja rekursiv, um halt die Listenelemente hin- und
her zu schieben.
Wenn man jetzt eine PROC schreiben könnte, die bei der
Move-Funktion VOR jedem einzelnen Schieben eines Elementes
aufgerufen wird, den zu schiebenden Eintrag noch bearbeitet
oder überprüft etc. und dann halt -1 oder 1 zurück gibt.
Bei -1 überspringt die Move-Funktion diesen Eintrag und bei
1 wird wie üblich verfahren. Natürlich müßte Roland dann
auch einen Listboxliste - Index (&ListboxItem) als Systemvariable
bereitstellen. Dieser Index kann man dann nutzen, um z.B. in
einem Array, Gridbox, Listbox usw. den entsprechenden Eintrag
heraus zu ziehen. Dieser ist ja identisch mit der aktuellen Position
in der Listboxliste. Roland müßte den dann nach jedem Schieben
und auch Überspringen (Rückgabe -1) um 1 erhöhen.
Sowas ginge ja dann auch in beiden Richtungen :
Move("ListToHandle",..) und Move("HandleToList",...)
Das könnte dann vielleicht so aussehen :
SET("CallBack", "Movefunktion", "CALLBACK-PROC")
oder evtl auch :
SET("Callback", "Container", "Containerfunktion", "CALLBACK-PROC")
Die PROC dazu :
PROC CALLBACK-PROC
Parameters Long index
....
RETURN -1 | 1
ENDPROC
Alles anzeigen
Da bräuchte die CALLBACK-PROC noch nicht einmal Parameter oder nur einen
einzigen, der den index des gerade abzuarbeitenden Eintrag angibt (s.o.).
Dann bräuchte man auch keine extra Systemvariable.
Anwendungsmöglichkeiten sehe ich da viele. Man kann z.B. unrelevante Einträge einer
Liste im vorraus ausfiltern, etwa noch ein Datum dem Listeneintrag voranstellen, vlt.
mit Spalten einer Gridbox (spalte1 * spalte2) mit val() umwandeln und rechnen usw.
Oder man wirft Einträge der Gridbox, die in der ersten Spalten mit einem "*" als gelöscht
markiert sind, in der CallbackProc heraus und hat dann nur noch die relevanten Daten.
Auf jeden Fall würde man sich eine Schleife und noch eine extra Liste sparen. Wenn ich
alles in allem rechne, dürfte auch die Geschwindigkeit unkritisch sein. Es dürfte sogar
etwas schneller gehen, da man sich eine WhileLoop - Schleife erspart.
Eure Meinungen dazu würden mich mal interessieren.