Gadgetnummer über 9999 möglich ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Delle »

Hat sich da mittlerweile eigentlich irgendwas geändert?

#PB_Any liefert bei mir z.B. 7-stellige Objekt# zurück... sobald man aber z.B. ein Gadget mit FreeGadget() löscht und mit der gleichen "#PB_Any Objekt#" wieder woanders plazieren will, dann meckert er wieder rum über die hohe Objekt# über 10.000 ...

Sehr komisch...
PB 6.21 | Win 11
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 »

Was genau soll sich ändern?

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.

Wenn du eine Konstante angibst, wird das jeweilige Feld in einem Array für die Elemente des Objekts belegt.

Und es wurde schon oft genug gesagt, das es nicht nur sinnfrei ist ein Gadget mit der Nummer 1'000'000 anzulegen, sonden auch Platzverschwendung, da dadurch ein Array mit 1'000'000 Feldern angelegt wird mit (im günstigstes Fall) Integers, was zusammen 4MB macht.

Fazit: Für die normale Deklaration für Objekte (zB mit Enumeration) reichen 10'000 Einträge locker aus.
Wenn jemand wirklich mehr als 10'000 Objekte brauch, nutzt er eh #PB_Any, da es sich höstwahrscheinlich eh um eine dynalische Deklaration handelt.
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 »

Ist doch ganz einfach.
Wenn Du #PB_Any nutzt, ist die zurückgebene ID eine Speicheradresse!
Nutzt Du einen fixen Wert, ist es der Index in der Gadgetliste!
Diese dürfen sich natürlich nicht überschneiden und IDs über 10000 sollten
IMHO nicht nötig sein.

Es wird sich also auch niemals ändern, es sei denn, das Prinzip der fixen
ID wird abgeschafft, aber das würde Dein Problem letztendlich auch nicht
lösen, da die Speicheradressen als solche immer noch nicht verwendbar
wären und es dann ja auch keine fixen IDs mehr gäbe.

Man müßte also #PB_Any abschaffen um höhere IDs zu nutzen, ich denke
das möchte keiner.
Außerdem wird für jede ID ein Speicher von der Größe des GadgetObjects (GadgetStructure siehe SDK)
reserviert. Bei so hohen IDs würde Du also sehr viel Speicher sinnlos verschwenden.

Es ist also nicht möglich das zu ändern und auch nicht nötig, Du solltest lediglich
in der Hilfe nochmal hier nachlesen!

Gruß
Thomas

/edit
sehe gerade STARGÅTE ist schneller, aber vielleicht ergänzen sich unsere Infos ja :wink:
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
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Delle »

STARGÅTE hat geschrieben:Was genau soll sich ändern?
Die Position eines Gadgets... lässt sich in dem Fall leider auch anders nicht lösen außer FreeGadget() und neu plazieren.
STARGÅTE hat geschrieben: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.
Verstehe ich nicht ganz... wie sonst soll ich denn dann z.B. einen dynamischen Button abfragen bzw. bearbeiten können?

Wenn nicht so, wie denn dann???

Code: Alles auswählen

Ergebnis = ButtonGadget(#PB_Any, x, y, Breite, Hoehe, Text$)
SetGadgetText(Ergebnis,"Änderung")
Mit GadgetID(Ergebnis)?
Ergebnis = ButtonGadget(#PB_Any, x, y, Breite, Hoehe, Text$)

Wenn #PB_Any als '#Gadget' Parameter verwendet wird, dann wird die Nummer des neuen Gadgets als 'Ergebnis' zurückgegeben. #Gadget ist die Nummer, die (später) von der EventGadget() Funktion zurückgegeben wird.
PB 6.21 | Win 11
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 »

Delle hat geschrieben:Die Position eines Gadgets... lässt sich in dem Fall leider auch anders nicht lösen außer FreeGadget() und neu plazieren.
Da hast Du recht, man kann Obejctadresse nicht einfach mit einem anderem Gadget austauschen, das geht nur mit
fixen IDs. Aber erzähl mir bitte nicht, Du hast mehr als 10000 Gadgets gleichzeitig auf dem Bildschirm und die müssen alle mit
fixer ID austauschbar sein.

In anderen Sprachen erhälst Du vom OS ein handle, dem kannst du auch kein anderes Control zuordnen :mrgreen:
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
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Delle »

ts-soft hat geschrieben:Da hast Du recht, man kann Obejctadresse nicht einfach mit einem anderem Gadget austauschen, das geht nur mit
fixen IDs. Aber erzähl mir bitte nicht, Du hast mehr als 10000 Gadgets gleichzeitig auf dem Bildschirm und die müssen alle mit
fixer ID austauschbar sein.
Nee... aber ich generiere die Gadgets dynamisch... manche werden gelöscht, neue kommend dazu usw.

Ich kann natürlich nicht einfach counter+1 machen und die dann mit ButtonGadget(counter,0,0...) plazieren. Dann schmiert er ja spätestens bei 9999 auch ab...
PB 6.21 | Win 11
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 »

Code: Alles auswählen

a = ButtonGadget(#PB_Any, ....
FreeGadget(a)
a = ButtonGadget(#PB_Any, ...
oder:

Code: Alles auswählen

Dim MyGadgetArray(20000)
MyGadgetArray(0) = ButtonGadget(#PB_Any, ....
MyGadgetArray(10000) = ButtonGadget(#PB_Any, ...
Jetzt hast Du index von 0 - 20000 :mrgreen: , aber immer freigeben, bevor Du einen der indexes neu belegst.
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
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:Was genau soll sich ändern?
Die Position eines Gadgets... lässt sich in dem Fall leider auch anders nicht lösen außer FreeGadget() und neu plazieren.
Kann ich nicht nachvollziehen.
Wenn ich mit PB_Any ein Objekt erzeugt, so kann ich die Nummer normal verwenden wie eine "Nummer" halt.

Code: Alles auswählen

OpenWindow(#PB_Any, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
	Gadget = ButtonGadget(#PB_Any, 10, 10, 300, 30, "Drücken um meine Position zu ändern.")

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End
			
		Case #PB_Event_Gadget
			Select EventGadget()
				Case Gadget
					ResizeGadget(Gadget, Random(500), Random(570), #PB_Ignore, #PB_Ignore)
			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
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Gadgetnummer über 9999 möglich ?

Beitrag von Delle »

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.
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.")
PB 6.21 | Win 11
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 »

Delle hat geschrieben: Hier benutzt Du ja einen festen Namen "gadget", dynamisch ist das natürlich nicht:
Warum ist eine Variable nicht dynamisch, man kann Ihren Wert jederzeit ändern, im
Gegensatz zu einer Konstante, deren Wert nicht änderbar ist.

Du willst die Logik im moment nicht erfassen, vielleicht schläfste erst mal eine Nacht drüber
und morgen kommt es vielleicht von alleine :wink:
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
Gesperrt