Hallo, danke für die ganzen Tipps.
ThreadSave ist gesetzt.
Ich habe im TreeEx Module mal die Zeile mit CreateThread auskommentiert und seit dem läuft es. Warum weiß ich aber immer noch nicht so genau.
CreateThread ruft diese Funktion auf.
Code: Alles auswählen
Procedure _TimerThread(Frequency.i)
Define.i ElapsedTime
Repeat
If ElapsedTime >= Frequency
PostEvent(#Event_Timer)
ElapsedTime = 0
EndIf
Delay(100)
ElapsedTime + 100
Until TimerThread\Exit
EndProcedure
Hier wird nur ein Event alle 100ms ausgelöst.
Die Event Funktion:
Code: Alles auswählen
Procedure _AutoScroll()
Define.i X, Y
ForEach TreeEx()
ForEach TreeEx()\ScrollBar\Item()
If TreeEx()\ScrollBar\Item()\Timer
If TreeEx()\ScrollBar\Item()\TimerDelay
TreeEx()\ScrollBar\Item()\TimerDelay - 1
Continue
EndIf
Select TreeEx()\ScrollBar\Item()\Timer
Case #ScrollBar_Up, #ScrollBar_Left
TreeEx()\ScrollBar\Item()\Pos - 1
If TreeEx()\ScrollBar\Item()\Pos < TreeEx()\ScrollBar\Item()\minPos : TreeEx()\ScrollBar\Item()\Pos = TreeEx()\ScrollBar\Item()\minPos : EndIf
Case #ScrollBar_Down, #ScrollBar_Right
TreeEx()\ScrollBar\Item()\Pos + 1
If TreeEx()\ScrollBar\Item()\Pos > TreeEx()\ScrollBar\Item()\maxPos : TreeEx()\ScrollBar\Item()\Pos = TreeEx()\ScrollBar\Item()\maxPos : EndIf
EndSelect
EndIf
Next
Redraw_()
Next
EndProcedure
Hier wird jedes Map Element durchgegangen. Am Ende der Prozedur dürfte TreeEx() auf keine Map mehr zeigen, was aber kein Problem sein dürfte weil die Prozedur ja im Hauptprogramm läuft und nicht im Thread.
Alle öffentlichen Prozeduren fangen mit
an. Damit ist ja wieder ein Map Element gesetzt.
Ich versuche mal am We ein Beispiel zu schreiben. Vielleicht geht mir dabei schon ein Licht auf.

Im ersten Post habe ich den Link vergessen. Es handelt sich um dieses
Modul .