wie wird ein 2. Fenster geöffnet

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

wie wird ein 2. Fenster geöffnet

Beitrag von bin_neu_hier »

Hi,

habe folgendes Problem mit einem Childwindow:

Ich möchte, dass man im Programm ein weiteres Fenster öffnen kann, in dem ein Listicongadget eine Liste bestehend aus 2 Spaltern anzeigt. Dieses Fenster wäre idealerweise auch größenveränderbar und frei beweglich. Es sollte geschlossen werden, wenn das Hauptprogramm beendet wird oder mittels

Code: Alles auswählen

Case #PB_Event_CloseWindow
   Select EventWindow()
      Case parentwindow
      End
   Case childwindow
      CloseWindow(childwindow)
    EndSelect
  ...

Aber: wenn ich mein childwindow öffne, wird das parentwindow inaktiv. Was macht der Anfänger da falsch?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: wie wird ein 2. Fenster geöffnet

Beitrag von mk-soft »

Du braucht unterschiedliche Window ID's

Code: Alles auswählen

;-TOP

Enumeration Windows
  #Main
  #Dialog
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  
EndEnumeration

Enumeration Gadgets
  #MainEdit
  #MainButtonOk
  #MainButtonCancel
  #MainButtonDialog
  #DialogList
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
  ; Resize gadgets
  ResizeGadget(#MainEdit, 5, 5, dx -10, dy - 45)
  ResizeGadget(#MainButtonok, 10, dy - 35, 120, 30)
  ResizeGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30)
  ResizeGadget(#MainButtonDialog, dx / 2 - 60, dy - 35, 120, 30)
EndProcedure

Procedure DialogWin(parent)
  If OpenWindow(#Dialog, #PB_Ignore, #PB_Ignore, 600, 400, "Dialog", #PB_Window_SystemMenu, WindowID(parent))
    ListViewGadget(#DialogList, 5, 5, 590, 390)
    ;
  EndIf
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    ; Menu
    CreateMenu(#MainMenu, WindowID(#Main))
    
    ; StatusBar
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
    EditorGadget(#MainEdit, 5, 5, dx -10, dy - 45)
    ButtonGadget(#MainButtonok, 10, dy - 35, 120, 30, "Ok")
    ButtonGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30, "Abbruch")
    ButtonGadget(#MainButtonDialog, dx / 2 - 60, dy - 35, 120, 30, "Dialog")
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ;-- Main event loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Main
              Break
              
            Case #Dialog
              ; TODO before close window
              ;
              CloseWindow(#Dialog)
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
              
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #MainEdit
              Select EventType()
                Case #PB_EventType_Change
                  ;
              EndSelect
              
            Case #MainButtonOk
              Select EventType()
                Case #PB_EventType_LeftClick
                  ;
              EndSelect
              
            Case #MainButtonCancel
              Select EventType()
                Case #PB_EventType_LeftClick
                  ;
              EndSelect
              
            Case #MainButtonDialog
              Select EventType()
                Case #PB_EventType_LeftClick
                  If Not IsWindow(#Dialog)
                    DialogWin(#main)
                  EndIf
                  
              EndSelect
            
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

; TODO before close programm
;

End
Zuletzt geändert von mk-soft am 26.06.2022 12:33, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: wie wird ein 2. Fenster geöffnet

Beitrag von bin_neu_hier »

Hallo MK-Soft,

das ist der Hammer! Allerbesten Dank dafür! Du hast schneller (und umfassend) geantwortet, als ich fragen konnte!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten