Seite 1 von 3

ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 09:14
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?

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 09:21
von Danilo
Nimm doch einfach den Befehl UseGadgetList( WindowID(win1) ).

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 09:30
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.

Verfasst: 10.11.2014 10:15
von CodeCommander
~ DELETE ~

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 10:24
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.

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 10:44
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.

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 11:17
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))?

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 12:37
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?

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 15:51
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?

Re: ScrollAreaGadget in aktivem Fenster

Verfasst: 10.11.2014 16:52
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.