Seite 1 von 1

MDI Gadget

Verfasst: 20.11.2012 22:07
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 :)

Re: MDI Gadget

Verfasst: 20.11.2012 22:19
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

Re: MDI Gadget

Verfasst: 21.11.2012 13:32
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)

Re: MDI Gadget

Verfasst: 21.11.2012 16:03
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.

Re: MDI Gadget

Verfasst: 22.11.2012 13:16
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

Re: MDI Gadget

Verfasst: 22.11.2012 15:00
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)

Re: MDI Gadget

Verfasst: 22.11.2012 17:01
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