Hallo Community,
nach längerer Zeit melde ich mich mal wieder. Ich tue mich schwer, ein MDI-Programm zu erstellen, daß z.Zt. 9 Formulare enthält, diese sind alle mit dem internen Formdesigner erzeugt. Es liegen also die zugehörigen pbf Dateien vor.
Ich habe ein Hauptfenster mit einer Menüleiste erstellt und dann die Anweisungen
MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
und AddGadgetItem(0, #Formular i, "Formular i") geschrieben
Ein Problem sehe ich, wie kriege ich die Gadgets und die Ereignisse in den Formular.pbf Dateien, also den Fensteraufbau hier rein.
Man kann zwar mit Hammer und Meisel die Anweisungen aus den pbf Dateien stückweise nach der AddGadget Anweisung einfügen, aber Hilfe. Weis jemand, wie man das elegant machen kann. Ich wäre dafür dankbar.
Grüße und noch alles Gute im neuen Jahr von Forsti
Probleme mit MDI_Programmen
Re: Probleme mit MDI_Programmen
Das mit dem MDIGadget und mehrere Form-Dateien ist so nicht einfach zu lösen.
Gibt aber eine alternative...
Window API SetParent_(...)
Beispiel:
Gibt aber eine alternative...
Window API SetParent_(...)
Beispiel:
Code: Alles auswählen
;-TOP
Global FormStyle = #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget
Procedure Form1(ParendID)
If OpenWindow(1, 0, 0, 300, 200, "Form 1", FormStyle | #PB_Window_Invisible)
ButtonGadget(1, 10, 10, 120, 25, "Ok")
If ParendID
SetParent_(WindowID(1), ParendID)
EndIf
HideWindow(1, 0)
EndIf
EndProcedure
Procedure Form2(ParendID)
If OpenWindow(2, 0, 00, 300, 200, "Form 2", FormStyle | #PB_Window_Invisible)
StringGadget(2, 10, 10, 280, 25, "Ok")
If ParendID
SetParent_(WindowID(2), ParendID)
EndIf
HideWindow(2, 0)
EndIf
EndProcedure
Procedure UpdateWindow()
EndProcedure
Procedure Main()
If OpenWindow(0, 100, 100, 400, 300, "Window", FormStyle)
CreateMenu(0, WindowID(0))
MenuTitle("Ablage")
MenuItem(1, "Form 1")
MenuItem(2, "Form 2")
Form1(WindowID(0))
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu()
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_Quit
Break
CompilerEndIf
Case 1
If Not IsWindow(1)
Form1(WindowID(0))
Else
SetActiveWindow(1)
EndIf
Case 2
If Not IsWindow(2)
Form2(WindowID(0))
Else
SetActiveWindow(2)
EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case 0
Break
Case 1
CloseWindow(1)
Case 2
CloseWindow(2)
EndSelect
EndSelect
ForEver
EndIf
EndProcedure : Main()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Probleme mit MDI_Programmen
Danke für die Antwort, die Lösung macht einen guten Eindruck. Ich werde mein Programm danach entsprechend umbauen und danach wieder melden. Mir ist bei den Beispielen mit MDI aufgefallen, daß das Einfügen von Gadgets in neu erzeugte Fenster nur allgemein als ...hier Gadgets einfügen... angeführt ist.
Viele Grüße von Forsti
Viele Grüße von Forsti