Seite 1 von 1

Probleme mit MDI_Programmen

Verfasst: 08.01.2020 16:15
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

Re: Probleme mit MDI_Programmen

Verfasst: 08.01.2020 16:46
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()

Re: Probleme mit MDI_Programmen

Verfasst: 10.01.2020 12:14
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