Gadgetliste vollführt unlogische Sachen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Gadgetliste vollführt unlogische Sachen

Beitrag 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
Bild

- formerly known as Bananenfreak -
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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?
Win11 x64 | PB 6.20
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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.
Win11 x64 | PB 6.20
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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()?).
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Gadgetliste vollführt unlogische Sachen

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Gadgetliste vollführt unlogische Sachen

Beitrag von ts-soft »

Achso, der ist von den Fensterkoordinaten ausgegangen, statt von den Koordinaten im Container <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten