Seite 1 von 2

Gadgetliste vollführt unlogische Sachen

Verfasst: 04.03.2013 18:23
von Chimorin
Hallo,

gleich mal Entschuldigung für den Titel, ein passenderer ist mir nicht eingefallen. Mein Problem besteht darin, dass ich einem Containergadget später im Programm ein Panelgadget hinzufügen möchte. Ohne OpenGadgetlist() geht es, mit nicht Oo

Code: Alles auswählen

;OpenGadgetList(#Container_0)
                PanelGadget(#Panel_0, Breite - 190, Hoehe - 500 + 20, 180, 420)
                AddGadgetItem(#Panel_0, -1, "Punktuell")
                AddGadgetItem(#Panel_0, -1, "Delta")
                AddGadgetItem(#Panel_0, -1, "Limit")
                AddGadgetItem(#Panel_0, -1, "Smooth")
                CloseGadgetList()
                CloseGadgetList()
Wenn ich nun OpenGadgetlist() reinmache, erstellt es kein Panelgadget. Ohne schon.

Code: Alles auswählen

ContainerGadget(#Container_0, Breite - 190, Hoehe - 500 + 20, 180, 420, #PB_Container_Single) 
   CloseGadgetList()
Sonst gibt es nur noch ein Treegadget und ein Menü in meinem Programm. Das Panel ist genauso groß wie der Container.
Ich kenne mich mit der Gadgetliste nicht aus, kann mich jemand darüber aufklären, ob ich etwas Spezielles beachten muss?


Gruß,
Banane

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 04.03.2013 18:29
von NicTheQuick
Wie immer gilt die Bitte ein lauffähiges Beispiel zu posten, damit man nicht selbst den Rest drum herum programmieren muss, nur um den Fehler zu reproduzieren.

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 04.03.2013 19:54
von Andesdaf
folgender Code funktioniert:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 230, 400, "Panel hinzufügen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 10, 200, 20, "Klick mich")
   
   ContainerGadget(2, 10, 40, 210, 350, #PB_Container_Single)
   CloseGadgetList()
 
   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
             OpenGadgetList(2)
             PanelGadget(3, 0, 0, 180, 200)
             AddGadgetItem(3, -1, "Punktuell")
             AddGadgetItem(3, -1, "Delta")
             AddGadgetItem(3, -1, "Limit")
             AddGadgetItem(3, -1, "Smooth")
             CloseGadgetList()
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
wo kommt übrigens das zweite CloseGadgetList in deinem Codefragment her?

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 04.03.2013 22:17
von STARGÅTE
ach das zweite CloseGadgetList() ist meiner Meinung nach wichtig.
Denn nach AddGadgetItem() in einem PanelGadget wird ja auch eine Gadgetliste geöffnet, welche geschlossen werden muss.

Wenn es also in deinem Code nicht geht, muss ja schon weiter "vorne" was schief gelaufen sein.
Bei PB muss halt halt aufpassen, dass man nach ContainerGadget(), PanelGadget() und ScrollAreaGadget() immer ein dazugehöriges CloseGadgetList() einfügen.

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 04.03.2013 23:06
von Andesdaf
ach stimmt.

ich hab vorhin beim schnellen Testen einen Fehler bei dem
zweiten CloseGadgetList bekommen, da war wohl aber was
anderes dran schuld.

vielleicht sind hier irgendwelche Gadgetlisten durcheinander
gebracht worden, aber um das festzustellen, bräuchte man
einen ordentlichen Beispielcode.

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 05.03.2013 21:11
von Chimorin
Ihr habt natürlich recht, aber es hätte ja sein können, dass das ein bisschen verbuggt ist (Wie gesagt, mir ist das neu... Sind die Befehle neu?).

Code: Alles auswählen

EnableExplicit

Global.i Breite = 1920, Hoehe = 1080, Event, pruefOffen, arbeitsModus
#Window_Screen = 0
#Menu_0 = 0

Enumeration
  #Tree_0
  #Container_0
  #Panel_0
EndEnumeration


Enumeration
  #Item_0
  #Item_1
  #Item_2
EndEnumeration


Procedure Fehlerbehandlung(Ergebnis.i, Text.s)
  If Ergebnis = 0
    MessageRequester("Fehler", Text)
    End
  EndIf
EndProcedure


Procedure Open_Window_Screen()
  Fehlerbehandlung(OpenWindow(#Window_Screen, 0, 0, Breite, Hoehe, "Bsp", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget), "Fenster konnte nicht geöffnet werden.")
  Fehlerbehandlung(CreateMenu(#Menu_0, WindowID(#Window_Screen)), "Menü konnte nicht erstellt werden.")      ;Menü für die allgemeinen Sachen mit Dateien
  MenuTitle("Datei")
  MenuItem(#Item_0, "Neu")
  MenuItem(#Item_1, "Speichern")
  DisableMenuItem(#Menu_0, #Item_1, 1)        ;Speichern ist zu Anfang disabled
  MenuItem(#Item_2, "Laden")
  
  
  Fehlerbehandlung(TreeGadget(#Tree_0, Breite - 190, 10, 180, Hoehe - 500, #PB_Tree_AlwaysShowSelection), "TreeGadget konnte nicht erstellt werden.")
  AddGadgetItem(#Tree_0, -1, "Nichts")
  AddGadgetItem(#Tree_0, -1, "Gelände erhöhen/absenken")
  
  ;DisableGadget(#Tree_0, 1)
  
  
  Fehlerbehandlung(OpenWindowedScreen(WindowID(#Window_Screen), 10, 10, Breite, Hoehe, #True, 200, 10, #PB_Screen_SmartSynchronization), "Screen konnte nicht erstellt werden.")
  
  
  Fehlerbehandlung(ContainerGadget(#Container_0, Breite - 190, Hoehe - 500 + 20, 180, 420, #PB_Container_Single), "Containergadget konnte nicht erstellt werden.")
  CloseGadgetList()
EndProcedure


;Fehlerbehandlung(InitEngine3D(), "Die OGRE-Engine konnte nicht initialisiert werden!")
Fehlerbehandlung(InitSprite(), "DirectX konnte nicht initialisiert werden!")
;Fehlerbehandlung(InitKeyboard(), "Es wurde keine Tastatur gefunden!")
Open_Window_Screen()


Repeat
    Event = WindowEvent()
    
    Select Event
        
        
      Case 0      ;-später weg
        Delay(5)
        
        
      Case #PB_Event_CloseWindow
        Select GetActiveWindow()
            
          Case #Window_Screen
            If pruefOffen
              Debug "tralala"
            Else
              End
            EndIf
            
        EndSelect
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case #Tree_0
            arbeitsModus = GetGadgetState(#Tree_0)
            
            Select arbeitsmodus
              Case 1
                ;FreeGadget(#Container_0)
                ;Fehlerbehandlung(ContainerGadget(#Container_0, Breite - 190, Hoehe - 500 + 20, 180, 420, #PB_Container_Single), "Containergadget konnte nicht erstellt werden.")
                Debug "2"
                OpenGadgetList(#Container_0)
                Fehlerbehandlung(PanelGadget(#Panel_0, Breite - 190, Hoehe - 500 + 20, 180, 420), "Konnte PanelGadget nicht erstellen.")
                AddGadgetItem(#Panel_0, -1, "Punktuell")
                AddGadgetItem(#Panel_0, -1, "Delta")
                AddGadgetItem(#Panel_0, -1, "Limit")
                AddGadgetItem(#Panel_0, -1, "Smooth")
                CloseGadgetList()
                CloseGadgetList()
                
            EndSelect
            
        EndSelect
        
        
    EndSelect
ForEver
Der Code ist extrem gekürzt. Hier tritt aber der selbe Fehler auf. Macht man OpenGadgetlist() weg, wird es gezeichnet, klar. Ganz normal... (Gibt es sowas wie Repaint()?).

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 05.03.2013 21:31
von Kiffi
Dein PanelGadget() hat die falschen X- und Y-Koordinaten.

so sieht man das PanelGadget zumindest:

Code: Alles auswählen

Fehlerbehandlung(PanelGadget(#Panel_0, 0, 0, 180, 420), "Konnte PanelGadget nicht erstellen.")
Grüße ... Kiffi

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 05.03.2013 21:37
von ts-soft
Was wird gezeichnet? Sehe keinen Code für irgendwelches Zeichnen.
Bei mir funktioniert es, wie es sein sollte. Panel wird im Container erstellt.

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 05.03.2013 21:43
von Kiffi
ts-soft hat geschrieben:Bei mir funktioniert es, wie es sein sollte. Panel wird im Container erstellt.
ja, aber außerhalb des sichtbaren Bereiches, weswegen
Bananenfreak davon ausgeht, dass es nicht erstellt wird. :-)

Grüße ... Kiffi

Re: Gadgetliste vollführt unlogische Sachen

Verfasst: 05.03.2013 22:02
von ts-soft
Achso, der ist von den Fensterkoordinaten ausgegangen, statt von den Koordinaten im Container <)