(...,ImageID...)
(...,ImageID...)
Hi leuts,
ich hab mal so in der PB help gestöbert und bin auf folgenden Befehl gestoßen:
ImageGadget(#Gadget, x, y, Breite, Hoehe, ImageID [, Flags])
Und ich hab mich gefragt, was das ImageID soll.
In der PB help steht schon was darüber aber ich kapier das nicht ganz für was der überhaupt da ist.
Kann mir jemand helfen?
Vielen dank im voraus
ich hab mal so in der PB help gestöbert und bin auf folgenden Befehl gestoßen:
ImageGadget(#Gadget, x, y, Breite, Hoehe, ImageID [, Flags])
Und ich hab mich gefragt, was das ImageID soll.
In der PB help steht schon was darüber aber ich kapier das nicht ganz für was der überhaupt da ist.
Kann mir jemand helfen?
Vielen dank im voraus
PB 3.30
PB 4.30 Demo
PB 4.30 Demo
Jedes Bild hat eine ImageID! Diese brauchst du für Image Operation!
Und so kriegst du sie raus:
Und so kriegst du sie raus:
Code: Alles auswählen
ImageID = ImageID(#Image)
PureBasic 4.30 (x86)
Alles in PureBasic hat eine sogenannte ID und ein Handle.
In Kurzform:
Die ID identifiziert Objekte nur programmweiter, d. h. innerhalb von PureBasic.
Das Handle identifiziert jedes Objekt systemweit.
Vergleichbar mit:
Dein Name identifiziert dich nur innerhalb deiner Familie;
deine Steueridentifikationsnummer aber deutschlandweit.
- Die ID ist das, was du bei OpenFile(), CreateImage(), LoadSprite(), CatchSound(), ButtonGadget() und so weiter einsetzen musst.
Diese Identifikationsnummer hilft PureBasic, die Objekte zu verwalten; PureBasic weiß anhand der Nummern, dass hinter der Nummer 0 ein OpenWindow() und hinter der Nummer 5 ein ListIconGadget() steckt.
Nicht gleichartige Ressourcen können allerdings die gleiche ID haben. Das heißt im Klartext: Du kannst in deinem Programm ein Bild (LoadImage()), eine geöffnete Datei (ReadFile()) und ein Gadget (z. B. ComboboxGadget()) haben, die alle die ID 3 besitzen. Es ist also kein Problem eine ID mehrmals im Programm zu verwenden, ein Bild mit der ID 3 wird also nicht automatisch gelöscht oder etwa überschrieben, bloß weil du später im Programm eine Datei mit der ID 3 öffnest.
Anders verhält es sich, wenn du zwei Gadgets, zwei Bilder, zwei Sprites, zwei Fenster oder zwei Dateien hast, denen du die gleiche ID zuweisen möchtest. Dann wird die erste Ressource automatisch freigegeben (also gelöscht) und die zweite Ressource tritt an seine Stelle. Dieses Verhalten, was mir persönlich schon lange bekannt ist und wovon ich auch Gebrauch mache, ist erst heute einem unserer Kollegen hier im Board aufgefallen: http://www.purebasic.fr/german/viewtopi ... 1_ist_cool - Das Handle identifiziert jedes Objekt systemweit. Das bedeutet: PureBasic's Objekteverwaltung funktioniert anders, als die vom Betriebssystem. Für das Betriebssystem darf eben kein Bild die gleiche ID haben, wie das Gadget.
Das hat mehrere Gründe.
Zum einen funktioniert die interne Objekteverwaltung jeder Programmiersprache anders. In PureBasic ist es nun mal so, dass mehrere nicht gleichartige Objekte gleiche ID haben dürfen, wie oben beschrieben. In einer anderen Programmiersprache ist das vielleicht nicht mehr so. Ein Betriebssystem kann sich aber nicht auf jede Programmiersprache einstellen. Vielmehr muss jede Programmiersprache dem Betriebssystem seine Objekteverwaltung verständlich machen.
Zum anderen ist dein Programm nicht das einzige, was auf dem Computer ausgeführt wird. Stell dir vor, dein PureBasic Programm wird zwei Mal gestartet und es lädt ein Bild mit der ID 5. Was soll das Betriebssystem denn da denken?
Deswegen steckt hinter jeder ID ein Handle, also eine Art ID, die aber im ganzen Betriebsystem eindeutig ist. Dein Bild, was du mit LoadImage() lädst, hat also von dir die ID 5 bekommen, aber vom Betriebssystem bekommt es z. B. das Handle 4153958 zugewiesen. Die Zahl 4153958 gehört also zu genau deinem Bild aus dem einen Programm. Es gibt weder eine Datei, noch ein Gadget oder ein Sprite, welches auch dieses Handle hat.
Dieses Handle wird unter anderem von der API des jeweiligen Betriebssystems gebraucht. Und an das Handle kommst du eben über ImageID(), SpriteID(), ThreadID(), FileID(), und so weiter. Zugegeben — der Name dieser Funktionen ist unglücklich gewählt. Man denkt, diese Funktionen ermitteln die ID, aber die hat man ja bereits. Nein, entgegen dieser ersten Vermutung ermitteln all diese Funktionen das Handle von der jeweiligen ID, die man einsetzt.
Hinweis: Unter dem sogenannten Betriebssystem "Windows" kann man im "Taskmanager" bei der Registerkarte "Leistung" im Abschnitt "System" sehen, wie viele Handles das Betriebssystem gerade verwaltet. Bei mir sind es gerade 24650, das bedeutet also, dass alle Programme zusammen 24650 Bilder, Gadgets, Fenster und Dateien geöffnet haben. Denn wir wissen ja jetzt: Jeder Knopf, jedes Symbol und jedes Fenster hat ein Handle. Interessant!
In Kurzform:
Die ID identifiziert Objekte nur programmweiter, d. h. innerhalb von PureBasic.
Das Handle identifiziert jedes Objekt systemweit.
Vergleichbar mit:
Dein Name identifiziert dich nur innerhalb deiner Familie;
deine Steueridentifikationsnummer aber deutschlandweit.

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@AND
das ist so nicht ganz richtig.
was du oben die ID nennst, ist die Nummer.
die ID wird zurückgeliefert von der Funktion ImageID(Nummer).
sie ist eine eindeutige Objekt-ID, innerhalb von PureBasic.
Also so etwas, wie ein PB-Internes Hanlde, aber nicht das OS-Handle.
zur weiteren Verwirrung, siehe auch hier:
http://www.purebasic.fr/german/viewtopi ... 172#233172
das ist so nicht ganz richtig.
was du oben die ID nennst, ist die Nummer.
die ID wird zurückgeliefert von der Funktion ImageID(Nummer).
sie ist eine eindeutige Objekt-ID, innerhalb von PureBasic.
Also so etwas, wie ein PB-Internes Hanlde, aber nicht das OS-Handle.
zur weiteren Verwirrung, siehe auch hier:
http://www.purebasic.fr/german/viewtopi ... 172#233172
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
jo wenn PB eine Nummer will, dann steht ja #Image, #Gadget, #File
da
und wenn ImageID oder GadgetID, dort verlangt wird, dann muss auch immer die entsprechende Funktion verwendet werden: ImageID(#Image), GadgetID(#Gadget)
da
und wenn ImageID oder GadgetID, dort verlangt wird, dann muss auch immer die entsprechende Funktion verwendet werden: ImageID(#Image), GadgetID(#Gadget)
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Ja das stimmt. Da muss ich euch Recht geben. Das von mir beschriebene System stimmt zwar, aber die Bezeichnung ist nicht 100%ig korrekt. Sorry, diese Bezeichnungen habe ich mir so verinnerlicht und gebrandmarkt.
Dann dürfte aber dieser Abschnitt nicht ganz richtig sein:
Auf diesen Artikel in der Hilfe möchte ich im Zuge dieser Fragestellung übrigens zum besseren Verständnis hinweisen.
Dann dürfte aber dieser Abschnitt nicht ganz richtig sein:
Diese Funktionen geben demnach also nicht die ID, sondern die #Nummer des entsprechenden Objektes zurück.Handles und Nummern hat geschrieben:Handles und Nummern
Nummern
[...]
Zum Beispiel geben folgende Event-Funktionen diese ID's zurück:
EventGadget()
EventMenu()
EventWindow()
[...]
Auf diesen Artikel in der Hilfe möchte ich im Zuge dieser Fragestellung übrigens zum besseren Verständnis hinweisen.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Ah stimmt, den Threads gibts ja auch noch.
Wirt glaich erledikt und dann ap in di Heia!
Wirt glaich erledikt und dann ap in di Heia!
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Hä? ImageID() gibt das OS-Handle zurück ... genau so wie GadgetID(),
WindowID() usw. du bist glaub grad etwas verwirrt, Kaeru o_O
ID = (Identifikations)Nummer, AND51 hat doch recht.
Das Problem bei
der ganzen sache ist nur, dass die Hilfe bzw. die PureBasic-Befehle nicht
"Handle" sondern immer ID schreiben, obwohl die PB-Nummer auch eine ID
ist.
MFG PMV
WindowID() usw. du bist glaub grad etwas verwirrt, Kaeru o_O
ID = (Identifikations)Nummer, AND51 hat doch recht.

der ganzen sache ist nur, dass die Hilfe bzw. die PureBasic-Befehle nicht
"Handle" sondern immer ID schreiben, obwohl die PB-Nummer auch eine ID
ist.
MFG PMV