MDI Gadget

Anfängerfragen zum Programmieren mit PureBasic.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

MDI Gadget

Beitrag von IronEagle »

Hallo Leute,

ist es möglich, dass man ein MDI-Gadget unsichtbar erstellt und dann erst sichtbar macht ?

Vielen Dank schon mal im Voraus :)
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: MDI Gadget

Beitrag von RSBasic »

Du kannst es ja so machen, dass dein Fenster unsichtbar gestartet wird (#PB_Window_Invisible), dann nach der Erstellung deines MDIGadgets das MDIGadget mit HideGadget(#Gadget, 1) versteckst und anschließend dein verstecktes Fenster wieder sichtbar machst. (HideWindow(#Window, 0))
Und wenn du dein MDIGadget später wieder sichtbar machen möchtest, dann einfach: HideGadget(#Gadget, 0)

Also so:

Code: Alles auswählen

#Main = 0
#MDIChild = 1
If OpenWindow(#Main, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
  AddGadgetItem(0, #MDIChild, "child window")
  HideGadget(0, 1)
  HideWindow(#Main, 0)
  MessageRequester("", "MDIGadget wird jetzt angezeigt.", 0)
  HideGadget(0,0)
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: MDI Gadget

Beitrag von IronEagle »

Erst mal danke für deine schnelle Antwort.

Aber ich habe mich mal wieder total falsch ausgedrückt...
Ich habe eigentlich folgendes Problem:

Wenn ich AddGadgetItem(#MDI_0, #MDIChild_Window, "") ausführe um ein Fenster auf dem MDI-Gadget zu zeichnen, wird dieses wohl mit einer Standardgröße erstellt.
Danach möchte ich es auf eine feste Größe skalieren.

Jetzt flackert das Fenster kurz auf weil es ja erst mit der Standardgröße erstellt wird und dann erst Resized wird.

Habt ihr da eine Idee, wie ich das lösen könnte?

Code: Alles auswählen

AddGadgetItem(#MDI_0, #MDIChild_Window, "")
    
ResizeWindow(#MDIChild_Window, 50, 50, 325, 180)
WindowBounds(#MDIChild_Window, 325, 180, 325, 180)
PureBasic 5.71 | Windows 10 Home (x64)
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: MDI Gadget

Beitrag von Andesdaf »

So in der Art? (von RSBasic übernommen):

Code: Alles auswählen

#Main = 0
#MDIChild = 1
If OpenWindow(#Main, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
  AddGadgetItem(0, #MDIChild, "child window",0,#PB_Window_Invisible)
  ResizeWindow(#MDIChild, 50, 50, 325, 180)
  HideWindow(#MDIChild, 0)
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Hier wird das invisible-Flag einfach auf das Child-Window angewendet, dann kommt das Resizen
und anschließend wirds wieder angezeigt.
Win11 x64 | PB 6.20
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: MDI Gadget

Beitrag von IronEagle »

Bei dem Codebeispiel ist zu sehen welchen Effekt ich meine.
Durch das "ResizeWindow" wird ja das MDI Child Window auch an eine bestimmte Position verschoben. Dadurch entsteht dieses Flackern!

Zu sehen ist es, wenn man den "New" - Button schnell hintereinander betätigt.

Code: Alles auswählen

#Main = 0
#MDIChild = 1
If OpenWindow(#Main, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CreateToolBar(3, WindowID(#Main))
  ToolBarStandardButton(4, #PB_ToolBarIcon_New)
  MDIGadget(0, 0, 0, 0, 300, 1, 2, #PB_MDI_AutoSize)
  AddGadgetItem(0, #MDIChild, "child window",0,#PB_Window_Invisible)
  ResizeWindow(#MDIChild, 50, 50, 325, 180)
  HideWindow(#MDIChild, 0)
  
EndIf

Repeat 
  
  If EventGadget() = 4
    
    AddGadgetItem(0, #MDIChild, "child window",0,#PB_Window_Invisible)
    ResizeWindow(#MDIChild, 50, 50, 325, 180)
    HideWindow(#MDIChild, 0)
    
  EndIf   
  
Until WaitWindowEvent()=#PB_Event_CloseWindow
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: MDI Gadget

Beitrag von bobobo »

in der schleife wird nicht nur verschoben sondern neu erstellt und dann verschoben.
Wo ist das Problem wenn es bei der MDIerstellung etwas flackert.
Das macht man ja sowieso nicht andauernd.
außerdem kann man das Fenster während der Erstellung ja verstecken
Flackert da was im etwas übertriebenen Beispiel ?
Also erst unsichtbare MDIs nach Bedarf erstellen und bei Bedarf dann holen

Code: Alles auswählen

#Main = 0
#MDIChild = 1
NewList c.l()
If OpenWindow(#Main, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  CreateToolBar(3, WindowID(#Main))
  ToolBarStandardButton(4, #PB_ToolBarIcon_New)
  MDIGadget(0, 0, 0, 0, 300, 1, 2, #PB_MDI_AutoSize|#PB_MDI_NoScrollBars) ;Scrollbars weglassen
  For l=1 To 100                                                         ;wenn sich das Programm
    AddElement (c())                                                      ;um die Positionierung kümmert
    c()=AddGadgetItem(0, #PB_Any, "child window"+Str(l),0,#PB_Window_Invisible) ;es wird dann ruhiger im MDIBereich
    ResizeWindow(c(), 1+l*2, 1+l*2, 325, 180)
  Next l
  HideWindow(#main,0)
  ;MdiFenster sind erstellt
  ;Knopfdrücken verückt die und de-invisibilisiert die auch noch :)
EndIf
Repeat ;die folgende EventSchleife suckz 
  If EventGadget() = 4
    
    ForEach c()
      ResizeWindow(c(), Random(50), Random(50), Random(50)+200, Random(50)+130)
      HideWindow(c(),0)
    Next
  EndIf   
Until WaitWindowEvent()=#PB_Event_CloseWindow
(wenn Du die Eventschleife immer so baust dann bekommst Du Probleme)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: MDI Gadget

Beitrag von IronEagle »

@ bobobo

Deine Idee ist wirklich gut, ich glaube ich versuche es mal mit dem einmaligen erstellen und gebe dann eine Rückinformation.

Vielen Danke schon mal :D
PureBasic 5.71 | Windows 10 Home (x64)
Antworten