Seite 2 von 5

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 03:25
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...

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 03:34
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.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 03:42
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:

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 03:44
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.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 03:51
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:

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 04:01
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...

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 04:06
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.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 04:15
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

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 04:19
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.")

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 04:27
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: