Gadgetnummer über 9999 möglich ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Gadgetnummer über 9999 möglich ?

Beitrag von STARGÅTE »

Delle hat geschrieben:
STARGÅTE hat geschrieben:Wenn ich mit PB_Any ein Objekt erzeugt, so kann ich die Nummer normal verwenden wie eine "Nummer" halt.
Ja was denn nun? Weiter oben schreibst Du noch das es NICHT geht:
Mit #PB_Any wird ein "verbindunsloses" Element für das Objekt erstellt und du bekommst in dem Fall eine Art Adresse (Objektnummer) zurück. Diese Nummer selbst zu verwenden geht nicht.
Richtig, du kannst nicht selbst die von PB_Any erzeuge Nummer nutzen, um ein neues Gadget mit dieser Nummer zu erzeugen!
Was du aber vorhin vorhattest!
Du kannst die Nummer aber sehrwohl für alle andere Befehle verwenden.
Delle hat geschrieben:Hier benutzt Du ja einen festen Namen "gadget", dynamisch ist das natürlich nicht:
gadget = ButtonGadget(#PB_Any, 10, 10, 300, 30, "Drücken um meine Position zu ändern.")
Das Gadget wird aber dynamisch erzeugt, weil ich jederzeit weitere erzeugen kann, ohne deren Nummer zu kennen und ohne andere (ausversehen) zu überschreiben.
Da du ja so scharf auf Dynamik bist, hier ein Code, wo 5 Buttons/Sekunde erzeugt werden, die in einer eigenen Liste verwaltet werden und auch wieder gelöscht werden können.

Code: Alles auswählen

Enumeration
	#Window
	#Timer
	#Gadget_Clear
EndEnumeration


OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(#Gadget_Clear, 0, 0, 150, 20, "Alle Button freigeben")
AddWindowTimer(#Window, #Timer, 200)

Global NewList MyButton.i()

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End
			
		Case #PB_Event_Timer
			Select EventTimer()
				Case #Timer
					AddElement(MyButton())
					MyButton() = ButtonGadget(#PB_Any, Random(700), Random(550)+20, 100, 30, "Zufalls Button "+Str(Random(9999)))
			EndSelect
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Gadget_Clear
					ForEach MyButton()
						FreeGadget(MyButton())
						DeleteElement(MyButton())
					Next
				Default
					Debug GetGadgetText(EventGadget())+"  ,  interne Nummer: "+Str(EventGadget())
			EndSelect
			
	EndSelect
	
ForEver
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
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: Gadgetnummer über 9999 möglich ?

Beitrag von ts-soft »

Als "Krümmelpupser" möchte ich zu STARGÅTEs Code noch hinzufügen, das man für jeden Objekttype eine separate Enumeration
nehmen sollte, die bei 0 anfängt. Bei den 3 Objekten ist das natürlich Wurscht :mrgreen:
Wollte nur sagen, das die in verschiedenen Listen verwaltet werden, also Fenster, Gadgets, Timer, sowie natürlich auch
Dateien, Bilder, XML usw.
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
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Danilo »

Diese "Grenze" von 9.999 Gadgets ist auch nur als Überprüfung im Debugger eingebaut,
weil das ein häufiger Anfängerfehler ist und die PB-Entwickler spezielle Hilfen einbauen,
um es Anfängern zu erleichtern.

Die Profis unter Euch, die Programme mit hunderttausenden Fenstern und Gadgets
schreiben, können diese Meldung durch DisableDebugger bei der Erstellung der
Objekte umgehen. Oder natürlich Debugger ganz ausschalten, aber das weiß ein
solcher Profi natürlich selbst.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    DisableDebugger
    ButtonGadget(1000000, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1000001, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(1000002, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(1000003, 10,100, 200, 60, "Multiline Button  (longer text gets automatically wrapped)", #PB_Button_MultiLine)
    ButtonGadget(1000004, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    EnableDebugger
    
    SetGadgetText(1000004,"tOOgle Btn")
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Es ist also kein Problem auch 1 Million Gadgets zu erstellen, falls Jemand solche Projekte mit PureBasic schreibt.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Gadgetnummer über 9999 möglich ?

Beitrag von rolaf »

Danilo hat geschrieben:Es ist also kein Problem auch 1 Million Gadgets zu erstellen, falls Jemand solche Projekte mit PureBasic schreibt.
Dank dir und deiner Profiinfo (die nun keine mehr ist) können jetzt also auch JENSe Ihren Unfug treiben. >:)
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Danilo »

rolaf hat geschrieben:Dank dir und deiner Profiinfo (die nun keine mehr ist) können jetzt also auch JENSe Ihren Unfug treiben. >:)
Hast Du etwas dagegen? Es gibt immer wieder Menschen die Informationen jeglicher Art
für "Unfug" oder Schlimmeres nutzen. Aufklärung und ein Appell an die Vernunft ist da,
meiner Meinung nach, besser als Zensur. Freiheit, dazu gehört auch Informationsfreiheit.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Gadgetnummer über 9999 möglich ?

Beitrag von 7x7 »

Danilo hat geschrieben:Die Profis unter Euch, die Programme mit hunderttausenden Fenstern und Gadgets
schreiben,......
:mrgreen:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
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: Gadgetnummer über 9999 möglich ?

Beitrag von ts-soft »

Oh, ein Tipp wie ich sinnlos Speicherplatz verschwende, danke schön, von Profi zu Profi :bounce:
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
NicTheQuick
Ein Admin
Beiträge: 8807
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: Gadgetnummer über 9999 möglich ?

Beitrag von NicTheQuick »

Ich bitte euch. Schaut euch an, was andere .NET Miniprogrämmchen an Speicherplatz fressen und vergleicht das dann mal mit 4 MB für 1 Mio. Gadgetnummern. Das stört nun wirklich keinen.
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: Gadgetnummer über 9999 möglich ?

Beitrag von ts-soft »

Sind 32 MByte im Falle von Gadgets, bei anderen Objekten können es auch mehr oder weniger sein.
Ausserdem sind es nicht 32 MByte für 1000000 Gadgets, sondern sind es schon bei einem Gadget
mit der Nummer 1000000.
Ausserdem sollte man dann auch kein #PB_Any mehr nutzen. Also sehr viel Sinn in einem solchem
Vorgehen kann ich nicht entdecken, weil ja auch kein Vorteil bzw. Nutzen entsteht.

Code: Alles auswählen

Structure PB_Gadget
  Gadget.l
  *VT.PB_GadgetVT
  UserData.l
  OldCallback.l
  Daten.l[4]
EndStructure

Dim gadgets.PB_Gadget(1000000)
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
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Thorium »

Es gibt kein Projekt was 10.000 statische Gadgets verwendet.
Die Konstanten sind halt etwas einfacher zu handhaben als Handles von #PB_Any. Machen aber auch halt nur Sinn wenn man eben nicht dynamisch arbeitet.

Natürlich kannst du ein Gadget erstellt mit #PB_Any löschen und neuerstellen, garkein Problem. Die zurückgegebene Handlenummer wird in eine Variable gespeichert und diese Variable wird dann überall als Gadgetnummer eingesetzt. Löscht du das Gadget und erstellst es neu, gibts ne neue Handlenummer, diese steckst du einfach in die gleiche Variable. Und somit bleiben alle Befehle, welche diese Variable als Gadgetnummer nutzen gültig.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Gesperrt