over 10000

Für allgemeine Fragen zur Programmierung mit PureBasic.
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

over 10000

Beitrag von Broncbuster »

Hallo möchte dynamische Gadgets erstellen. Ab 10000 kommt aber eine Fehlermeldung. Kann mir jemand sagen wie ich diese elegant umschiffen kann?
Hier ein kleiner Beispielcode:

Code: Alles auswählen

Enumeration
#Save
EndEnumeration
Global Kan1Gadget 
Global Kan2Gadget 
Kan1Gadget = 1000
Kan2Gadget = 10000
Procedure OpenSave()
ExamineDesktops()
If IsWindow(#Save) = 0
  OpenWindow(#Save, 50, 5, 400, 230, "Info",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  TextGadget(Kan1Gadget,5,5,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center ) 
  Kan1Gadget = Kan1Gadget + 1
  TextGadget(Kan1Gadget,5,35,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center ) 
  TextGadget(Kan2Gadget,5,65,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center ) 
  Kan2Gadget = Kan2Gadget + 1
  TextGadget(Kan2Gadget,5,95,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center ) 
EndIf

EndProcedure
OpenSave()
Repeat
EventID = WaitWindowEvent()
Select EventID 
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End  
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Jo nutze die Dynamische Konstante #PB_Any

Dann gibt dir TextGadget, usw. eine GadgetNummer aus, diese kannst du dann zB in einer LinkedList alle Abspeichern ... um sie später weiter zu nutzen ...
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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ich bezweifle auch stark das du 10k Gadgets verwendest...
Man darf nie vergessen das PB immer Speicher für soviele Gadgets reserviert wie die Nummer des höchsten Gadgets is...
(\/) (°,,,°) (\/)
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

mal ehrlich wer braucht 10000 gadgets?
Aber sonst, bitte wie von Stargate vorgeschlagen, #PB_any nutzen.
Win11 x64 | PB 6.20
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag von Broncbuster »

Es geht mir nicht unbedingt um 10000 Gadgets die ich verbraten möchte, sondern nur darum wie ich die Sache ohne Fehlermeldung durchbringe. Das gleiche passiert ja auch bei einem Array, das irgendwann per ReDim Anweisung die 10000 Zahl erreicht.
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

Beitrag von ts-soft »

Wo ist das Problem?

Code: Alles auswählen


Enumeration
#Save
EndEnumeration
Global Kan1Gadget
Global Kan2Gadget
Kan1Gadget = 1000
Kan2Gadget = 10000
Global Dim Kan2Gadget(20000)
Procedure OpenSave()
ExamineDesktops()
If IsWindow(#Save) = 0
  OpenWindow(#Save, 50, 5, 400, 230, "Info",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  TextGadget(Kan1Gadget,5,5,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center )
  Kan1Gadget = Kan1Gadget + 1
  TextGadget(Kan1Gadget,5,35,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center )
  Kan2Gadget(Kan2Gadget) = TextGadget(#PB_Any,5,65,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center )
  Kan2Gadget = Kan2Gadget + 1
  Kan2Gadget(Kan2Gadget) = TextGadget(#PB_Any,5,95,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center )
EndIf

EndProcedure
OpenSave()
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End 
Die Größe des Arrays könnte man noch optimieren oder auch dynamisch anpassen :mrgreen:

Gruß
Thomas
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
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag von Broncbuster »

Danke Thomas,

Code: Alles auswählen

 Global Dim Kan2Gadget(20000)
War genau die Zeile die ich gesucht habe. [/code]
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

mit PB_Any geht's... 8)
Win11 x64 | PB 6.20
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag von Broncbuster »

War wohl nicht mit dem Global Dim Kan2Gadget(20000).
Habe im vorhergehenden Beispielcode ein Fehler gemacht und mit Kan2Gadget ja gar kein Gadget erstellt.
Wie gehabt, over 10000 gibt es eine Fehlermeldung.

Code: Alles auswählen

Enumeration
#Save
EndEnumeration
Global Kan1Gadget
Global Kan2Gadget
Kan1Gadget = 1000
Global Dim Kan2Gadget(20000)
Kan2Gadget = 12000
Procedure OpenSave()
ExamineDesktops()
If IsWindow(#Save) = 0
  OpenWindow(#Save, 50, 5, 400, 230, "Info",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  TextGadget(Kan1Gadget,5,5,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center )
  Kan1Gadget = Kan1Gadget + 1
  TextGadget(Kan1Gadget,5,35,390,30,"Ich bin " + Str(Kan1Gadget), #PB_Text_Center )
  TextGadget(Kan2Gadget,5,35,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center )
  Kan2Gadget = Kan2Gadget + 1
  TextGadget(Kan2Gadget,5,35,390,30,"Ich bin " + Str(Kan2Gadget), #PB_Text_Center )
  EndIf

EndProcedure
OpenSave()
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End 
Wie könnte ich einem StringGadget das per #PB_Any erstellt wird, gleich noch eine Schriftart, Font usw. mitgeben? Per GadgetID muß ich ja erstmal active setzen um die GadgetID rauszubekommen oder?

Vielleicht stehe ich auch wieder mal auf dem...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yap, tust du.

das erzeugen per #PB_Any gibt das Handle zurück, das IST die GadgetID, das kannst du überall in andere funktionen einsetzen.
Antworten