ScrollAreaGadget in aktivem Fenster
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: ScrollAreaGadget in aktivem Fenster
Mit Canvas habe ich mich noch nicht befasst. Jeder einzelne Spieler muss allerdings in der Liste anklickbar sein.
Es ist für mich erheblich(!) einfacher ein ScrollAreaGadget neu zu erstellen, als darin "rumzuwurschteln", noch komplizierter wird es mit den Spieltischen, wo auch noch unterschiedliche Spieler spielen können. Da ist ein Neuerstellen eines ScrollAreaGadget zumindest für mich sinnvoll.
Mag sein, dass es bessere Programmier-Stile gibt, aber ich bin nun mal kein Programmier-Freak und beginne erst, diese Sprache zu erlernen.
Es ist für mich erheblich(!) einfacher ein ScrollAreaGadget neu zu erstellen, als darin "rumzuwurschteln", noch komplizierter wird es mit den Spieltischen, wo auch noch unterschiedliche Spieler spielen können. Da ist ein Neuerstellen eines ScrollAreaGadget zumindest für mich sinnvoll.
Mag sein, dass es bessere Programmier-Stile gibt, aber ich bin nun mal kein Programmier-Freak und beginne erst, diese Sprache zu erlernen.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- 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
Deswegen überhäufen wir dich ja auch mit Tipps. 
Und drauf los programmieren hat bisher ja noch den wenigsten geschadet. Immerhin lernt man aus Fehlern auch am besten. Viel Spaß!

Und drauf los programmieren hat bisher ja noch den wenigsten geschadet. Immerhin lernt man aus Fehlern auch am besten. Viel Spaß!
Re: ScrollAreaGadget in aktivem Fenster
Denke auch an den Schreibfehler: 'aflag' > 'aflg'stevie1401 hat geschrieben:Code: Alles auswählen
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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- 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: ScrollAreaGadget in aktivem Fenster
Naja, oft genug wurde er ja auch auf enableexplicit hingewiesen und wird diese Hinweise ja nicht ignorieren.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Vera
- Beiträge: 928
- Registriert: 18.03.2009 14:47
- Computerausstattung: Win XP SP2, Suse 11.1
- Wohnort: Essen
Re: ScrollAreaGadget in aktivem Fenster
Ich frag mich ja, ob irgend jemand dieses (hingefletzte) Beispiel ausprobiert hat.stevie1401 hat geschrieben:Code: Alles auswählen
For i=1 To 100 TextGadget(#PB_Any, 10,i+80,100,25,"TextGadget "+Str(i)) Next i
Nie zuvor habe ich so heftige GTK-Warnings gekriegt - aber auch einen Moment gebraucht, bis ich geschnallt habe, dass das Trampeln auf der Stelle auch eine echte Herausforderung ist.
Da das Erstellen von Gadgetlisten on the fly für mich auch völlig neu ist, habe ich mal ein kleine Studie zu ScrollAreaGadget und GadgetList erarbeitet ... und das dann noch in ein 2 Fenstermodel eingebettet. viel Vergnügen

Code: Alles auswählen
;- zweite Version mit 2 Fenstern
If OpenWindow(0, 0, 0, 305, 180, "ScrollAreaGadget - test Gadget-Lists", #PB_Window_SystemMenu | #PB_Window_ScreenCentered); | #PB_Window_Invisible
ScrollAreaGadget(0, 10, 10, 290, 160, 375, 205, 30)
ButtonGadget (1, 150, 0, 120, 30, "1: Button")
ButtonGadget (2, 150, 35, 120, 30, "2: add change list")
ButtonGadget (3, 150, 70, 120, 30, "3: reNew gadget list")
TextGadget (4, 0, 10, 145, 80, " 4: This is the content" + Chr(10) + " of a ScrollAreaGadget!" + Chr(10) + Chr(10) + " at the moment", #PB_Text_Center | #PB_Text_Border)
CloseGadgetList()
HideGadget(0, 1)
If OpenWindow(1, 0, 0, 210, 110, "naggy window :-)", #PB_Window_WindowCentered, WindowID(0))
DisableWindow(0, 1)
SetActiveWindow(1)
ButtonGadget(5, 30, 40, 130, 25, "close dat 2nd window")
EndIf
RandomSeed(333)
n = 1 ; To count Case 3
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If EventWindow() = 0
End
ElseIf EventWindow() = 1
CloseWindow(1)
DisableWindow(0, 0)
HideGadget(0, 0)
SetActiveWindow(0)
EndIf
Case #PB_Event_Gadget
Select EventWindow()
Case 0
Select EventGadget()
Case 1
MessageRequester("Info", "Button 1 was pressed!", #PB_MessageRequester_Ok)
SetGadgetText(1, "1: was pressed")
Case 2
OpenGadgetList(0)
ButtonGadget (1, 150, 0, 120, 30, "old 1 again")
SetGadgetColor(4, #PB_Gadget_BackColor, RGB(Random(189), Random(123), Random(133)))
ButtonGadget (5, 170, 105, 80, 30, "new Gaget 5")
CloseGadgetList()
Case 3
; HideGadget(0,1)
OpenGadgetList(0)
For i = 4 To (Random(99) + 1)*30
h = (i - 4)*30
StringGadget(i, 10, h, 120, 25, Str(n) + " - TextGadget " + Str(i))
; Delay(60)
Next i
n + 1
SetGadgetAttribute(0, #PB_ScrollArea_InnerHeight, h + 30)
SetGadgetText(1, Str(i - 1) + " - new Gadgets")
CloseGadgetList()
; HideGadget(0,0)
EndSelect
Case 1
Select EventGadget()
Case 5
CloseWindow(1)
DisableWindow(0, 0)
HideGadget(0, 0)
SetActiveWindow(0)
EndSelect
EndSelect
EndSelect
ForEver
EndIf
Gruß ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
- 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: ScrollAreaGadget in aktivem Fenster
Listen, Arrays, Maps usw.Vera hat geschrieben:Ich frage mich allerdings nun, inwieweit kann man für solche variablen Gadgets überhaupt Event-Abfragen anlegen. Läßt sich sowas auch zur Laufzeit erstellen, variieren und anpassen?
Code: Alles auswählen
For i=1 To 100
AddElement(MyList())
MyList() = TextGadget(#PB_Any, 10,i+80,100,25,"TextGadget "+Str(i))
Next i
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: ScrollAreaGadget in aktivem Fenster
Keine Sorge, das war nur mal schnell und schmutzig als Beispiel geschrieben. Dass dabei Fehler entstehen können, zeigt das "aflag"<>"aflg".Naja, oft genug wurde er ja auch auf enableexplicit hingewiesen und wird diese Hinweise ja nicht ignorieren.
Ich benutze in meinem Programm EnableExplicit

Selbstverständlich!Ich frage mich allerdings nun, inwieweit kann man für solche variablen Gadgets überhaupt Event-Abfragen anlegen. Läßt sich sowas auch zur Laufzeit erstellen, variieren und anpassen?
global dim Knopp(100)
Kopp(i)=TextGadget(#PB_Any,x,y,x1,y1,"Text")
Nun kann man abfragen.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- Vera
- Beiträge: 928
- Registriert: 18.03.2009 14:47
- Computerausstattung: Win XP SP2, Suse 11.1
- Wohnort: Essen
Re: ScrollAreaGadget in aktivem Fenster
Danke Thomas,
aber sorry, das schaffe ich nicht.
Ich verstehe, dass hier MyList() eine LinkList mit 100 Addressen von 100 Gadgets sein könnte? 'Könnte' aber auch der literale Wert der jeweiligen Zeile sein, die dann indexiert sind?
Selbst wenn ich solch einen Addressindex hätte, wie soll man denn darüber die Events der einzelnen Gadgets ermitteln?
Da müste ich doch auch schon vorher wissen, wieviele Gadgets es geben wird und dürfte die auch nicht mehr 'schauffeln', damit Case und spezifisches Event nicht durcheinanderkommen.
Wie könnte Stevie es schaffen, ständig die Spielerauflistung neu zu generieren, die sich immer in anderen Gadget befinden, aber jeden Spieler dabei trotzdem eindeutig in Zugriff (incl. Abfrage) zu halten, wenn sich ständig deren Position ändert?
aber sorry, das schaffe ich nicht.
Ich verstehe, dass hier MyList() eine LinkList mit 100 Addressen von 100 Gadgets sein könnte? 'Könnte' aber auch der literale Wert der jeweiligen Zeile sein, die dann indexiert sind?
Selbst wenn ich solch einen Addressindex hätte, wie soll man denn darüber die Events der einzelnen Gadgets ermitteln?
Code: Alles auswählen
Select MyList()
Case 1-100
If 1 ... ?
If 2 ... ?
Wie könnte Stevie es schaffen, ständig die Spielerauflistung neu zu generieren, die sich immer in anderen Gadget befinden, aber jeden Spieler dabei trotzdem eindeutig in Zugriff (incl. Abfrage) zu halten, wenn sich ständig deren Position ändert?
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
- Vera
- Beiträge: 928
- Registriert: 18.03.2009 14:47
- Computerausstattung: Win XP SP2, Suse 11.1
- Wohnort: Essen
Re: ScrollAreaGadget in aktivem Fenster
w0w - wenn das so selbstverständlich ist, kann ich dann bitte ein laufendes MiniBeispiel haben, bitte?stevie1401 hat geschrieben:Selbstverständlich!Ich frage mich allerdings nun, inwieweit kann man für solche variablen Gadgets überhaupt Event-Abfragen anlegen. Läßt sich sowas auch zur Laufzeit erstellen, variieren und anpassen?
global dim Knopp(100)
Kopp(i)=TextGadget(#PB_Any,x,y,x1,y1,"Text")
Nun kann man abfragen.
Wenn Hugo am Anfang in Gadget 3 war und nach einem Neuaufbau, dann in 65 , und danach in 24 - wie soll ich denn dafür einen dynamischen EventLoop schreiben?
Code: Alles auswählen
Case Event ggf. 3 oder auch 65 ... vielleicht aber doch 24
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: ScrollAreaGadget in aktivem Fenster
Die Anzahl der Gadgets ergibt sich aus der Anzahl der Spieler. Die Anzahl der Spieler inclusive allen Spielernamen (und dazugehörigen Icons) sendet der Server den Clients, wenn sich etwas geändert hat. Die Variable SpielerNameAnz (oder so) kennt der Client also.
Code: Alles auswählen
;auf einen Button in der Lobby geklickt
For i=1 To SpielerAnz ;(Globale Variable)
If aGadgetID=LobbyButton(i)
LobbyButton_Click(i) ;Button I wurde geklickt
EndIf
Next i
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x