Probleme mit MDI_Programmen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Forsti
Beiträge: 23
Registriert: 21.01.2011 12:46

Probleme mit MDI_Programmen

Beitrag von Forsti »

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
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Probleme mit MDI_Programmen

Beitrag von mk-soft »

Das mit dem MDIGadget und mehrere Form-Dateien ist so nicht einfach zu lösen.

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
Forsti
Beiträge: 23
Registriert: 21.01.2011 12:46

Re: Probleme mit MDI_Programmen

Beitrag von Forsti »

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
Antworten