Ich versuche ein Programm zu schreiben, was Bilddateien, Bitmaps, einlädt. Die Besonderheit: das Laden soll als Thread ablaufen - jedes Bild ein einzelner Thread - damit das Programm sich entfalten kann, bevor die Bilder in dem MDIGadget angezeigt werden (jedes Bild ein MDIWindow).
Warum funktioniert mein Code nicht?
Code: Alles auswählen
Structure IMAGE
ID.i
EndStructure
Structure MDIWINDOW
ID.i
ImageGadget.i
EndStructure
Global NewList Images.IMAGE()
Global NewList MDIWindows_Main.MDIWINDOW()
Global NewList ProgramParams$()
Global NewList LoadingThreads()
Global NewList ThreadEntriesToDelete()
NewList ProgramParams$()
Procedure LoadingThread(*FileName$)
AddElement(Images())
Images()\ID = LoadImage(#PB_Any, *FileName$)
EndProcedure
While ProgramParameter(x)
AddElement(ProgramParams$())
ProgramParams$() = ProgramParameter(x)
x + 1
Wend
Window_Main_Title$ = "just a little test program..."
Window_Main = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 400, Window_Main_Title$, #PB_Window_Invisible|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
MDIGadget_Main = MDIGadget(#PB_Any, 0, 0, 0, 0, 0, 0)
HideWindow(Window_Main, #False)
ForEach ProgramParams$()
AddElement(LoadingThreads())
LoadingThreads() = CreateThread(@LoadingThread(), @ProgramParams$())
Next
Repeat
MenuHeight_Main = 0
ToolBarHeight_Main = 0
ForEach LoadingThreads()
If Not IsThread(LoadingThreads())
SelectElement(Images(), ListIndex(LoadingThreads()))
AddElement(MDIWindows_Main())
MDIWindows_Main()\ID = AddGadgetItem(MDIGadget_Main, #PB_Any, "", ImageID(Images()\ID))
MDIWindows_Main()\ImageGadget = ImageGadget(#PB_Any, 0, 0, WindowWidth(MDIWindows_Main()), WindowHeight(MDIWindows_Main()), Images()\ID)
AddElement(ThreadEntriesToDelete())
ThreadEntriesToDelete() = LoadingThreads()
EndIf
Next
WindowEvent = WindowEvent()
Select WindowEvent
Case #PB_Event_SizeWindow
ResizeGadget(MDIGadget_Main, 0, 0, WindowWidth(Window_Main), WindowHeight(Window_Main))
Case #PB_Event_CloseWindow
End
EndSelect
ForEach ThreadEntriesToDelete()
ForEach LoadingThreads()
If LoadingThreads() = ThreadEntriesToDelete()
DeleteElement(LoadingThreads())
Break
EndIf
Next
Next
ForEver
Schönen Abend und Danke im Vorraus,
es_91.