ScrollAreaGadget in aktivem Fenster

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

ScrollAreaGadget in aktivem Fenster

Beitrag von stevie1401 »

ScrollAreaGadgets werden in aktiven Fenstern erstellt.

Wenn ich ein ScrollAreaGadget in win1 erstellen möchte, win2 aber aktiv ist, würde das Gadget in win2 erstellt werden.

Um sicherzugehen, dass mein ScrollAreaGadget in win1 erstellt wird, habe ich mir folgenden Code geschrieben:

Code: Alles auswählen


win1=OpenWindow(#PB_Any, 0,0,800,600, "window1", #PB_Window_ScreenCentered|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget| #PB_Window_TitleBar)
win2=OpenWindow(#PB_Any, 0,0,400,300, "window2", #PB_Window_ScreenCentered|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget| #PB_Window_TitleBar)



;- Ereignis-Schleife
  Repeat
    Event = WaitWindowEvent(100)
    EventWindow = EventWindow()
    EventGadget = EventGadget()
    EventType = EventType()
    
    
    
    
    
    
    Select Event
        
        
      
        
        
      Case #PB_Event_Gadget
        
       
        
        
       
       
        
     Case #PB_Event_CloseWindow
       
        
        If EventWindow = win2
          CloseWindow(win2)
        EndIf
       
        If EventWindow = win1
          raus=1
          CloseWindow(win1)
          Break
        EndIf
        
        
        
    EndSelect
    
   
    If aflag=0 And GetActiveWindow()=win1
      ScrollAreaGadget(4, 10,10,300,300,300,300)
      For i=1 To 100
        TextGadget(#PB_Any, 10,i+80,100,25,"TextGadget "+Str(i))
      Next i      
     CloseGadgetList()  
     aflg=1 
      
    EndIf
    
    
      
  Until raus=1


Wenn ich nun win2 schliesse, dann sollte win1 aktiv sein und das ScrollAreaGadget erstellt werden.

Es kommt aber unter Windows die Fehlermeldung, dass es keine Gadget-Liste geben würde.
Was mache ich falsch?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von Danilo »

Nimm doch einfach den Befehl UseGadgetList( WindowID(win1) ).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von stevie1401 »

Den Befehl verstehe ich nicht so ganz.
Ich muss leider zwingen öfter eine NEUE ScrollAreaGadget erstellen, weil sich Spieleranzahl oder Anzahl der Tische geändert haben.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:45, insgesamt 1-mal geändert.
~ DELETE ~
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von stevie1401 »

Aus einer GadgetList kann man keine Elemente entfernen. Ändert sich nun z.B. die Spieleranzahl, muss die Gadgetlist neu erstellt werden.
Und was genau ist an meiner Vorgehensweise eine Katastophe? Bitte erkläre es genauer.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von Danilo »

Nachdem Du das Gadget gelöscht hast, einfach:

Code: Alles auswählen

          UseGadgetList( WindowID(win1) )
          ScrollAreaGadget(4, 10,10,300,300,300,300)
              For i=1 To 100
                TextGadget(#PB_Any, 10,i+80,100,25,"TextGadget "+Str(i))
              Next i      
         CloseGadgetList()
Dann wird das ScrollAreaGadget immer in win1 erstellt.

Sonst verstehe ich Deinen Code auch nicht. In einem ScrollAreaGadget stehen keine Spieler oder Spieleranzahlen,
da es nur ein Container ist.
Die Gadgets, die Namen oder Anzahl der Spieler enthalten (ListView, ListIcon, usw.), kann man ändern - ohne sie neu erstellen zu müssen.
Auch die innere Größe einer ScrollArea kann man ändern, siehe SetGadgetAttribute mit #PB_ScrollArea_InnerWidth/Height.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von stevie1401 »

Das ist ja auch nur ein Beispielcode und sollte meine Problematik mit dem ScrollAreaGadget erläutern.
In diesem ScrollAreaGadget werden dann Icons und Spielernamen stehen.
Geht ein Spieler off, muss das ScrollAreaGadget neu geschrieben werden, da ich diesen Spieler ja nicht in der GadgetList entfernen kann.

Wenn ich dich richtig verstehe, wird in deinem Beispiel also die Liste gelöscht und ich kann das ScrollAreaGadget vollkommen neu schreiben?

Ach übrigens habe ich in win2 ZWEI ScrollAreaGadgets, wie kann ich die denn jeweils ansprechen mit UseGadgetList( WindowID(win1))?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von Danilo »

Gadgets werden automatisch auf dem zuletzt geöffnetem Fenster oder Container erstellt.
Mit UseGadgetList() ändert man das. Dann werden folgende Gadgets auf dem Fenster erstellt,
welches man bei UseGadgetList() angegeben hat.
Warum nimmst Du nicht einfach ein ListIcon- oder ListViewGadget für die Namen der Chat-Teilnehmer,
statt einer ScrollArea und vielen TextGadgets?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ScrollAreaGadget in aktivem Fenster

Beitrag von stevie1401 »

ListIcon- oder ListViewGadgets haben unter Windows nur eine Icongröße von 16 Pixeln uns sehen ziemlich blöd aus.
Zudem kann ich mit ScrollAreaGadgets und ImageGadgets schicke Tischanzeigen erstellen. Soll ja auch was fürs Auge sein.
Wenn es denn jetzt so klappen sollte, wäre es doch alles prima, kann ich leider erst später testen.
Vielen Dank für eure Hilfe. :allright:

Dennoch würde es mich interessieren, warum mein obiges Beispiel nicht geht.
Die Bedingung ist ein aktives Fenster und da soll ein ScrollAreaGadget erstellt werden. Wieso funktioniert es so nicht?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: ScrollAreaGadget in aktivem Fenster

Beitrag von NicTheQuick »

Und ich verstehe das Problem mit dem Löschen nicht. Mit 'FreeGadget()' kann man doch jedes Gadget jederzeit löschen. Und wenn ein Spieler zwischen zwei anderen gelöscht werden muss, hilft doch schon ein 'ResizeGadget()' um die restlichen Gadgets nachzurücken. Man muss doch bei einer Änderung nicht ständig alles neu erstellen.
Abgesehen davon, könnte dir vielleicht aber auch ein CanvasGadget gefallen. Da kannst du reinzeichnen, was du willst. Und Klicks abfangen ist damit ebenfalls leicht.
Antworten