meines wissens ist die "Nummer" für mit #PB_Any erstellte sprites die ID bzw. das Handle.
Stimmt nicht, wobei ich das auch mal dachte, aber meine Erfahrung hat mich anderes gelehrt.
Ich arbeite an meinem Projekt zur Zeit viel mit ImageGadget's, wenn man nun im Gadget das Bild ändern möchte, kann man ja bekanntlich dieses mit SetGadgetState() ändern. Da ich dabei auch die Images mit #PB_Any reinlade, mußte ich feststellen, daß die dabei ermittelte Nummer nicht das gewünschte Ergebnis erziehlte. Erst wenn ich diese ermittelte Nummer mit ImageID() verwende, erhalte ich die ID = Handle und dann funktioniert es auch. #PB_Any ist nichts anderes, als eine von PB erstellte Konstante, ich meine, mich auch noch dunkel daran erinnern zu können, daß es bei der Einführung von #PB_Any so gedacht war.
Jetzt fällt mir leider spontan kein Grund ein, eine SpriteID zu nutzen, sonst hätte ich das in einem kleinem Beispiel dargestellt. Allerdings kann ich dazu sagen, daß DisplaySprite() ja die Spritenummer benötigt und keine ID, würde man in Verbindung mit #PB_Any das Handle ermitteln, würde DisplaySprite() das Sprite nicht darstellen.
Da fällt mir gerade ein, wenn ich ein Sprite mit einer Nummer bzw. Konstante reinlade, dann ermittle ich die ID, sowas kann natürlich zu Verwechlungen führen und das war wohl auch der Grund, warum ich selbst Deiner Meinung war, bevor ich meine Erfahrungen mit den Images machte.
Edit:
Ich hab hier noch ein simples Beispiel, welches es zumindest mit den Images beweißt.
Code: Alles auswählen
Nr = CreateImage(#PB_Any, 100, 100)
Debug Nr
ID = ImageID(Nr)
Debug ID
Test = ImageID(1)
Debug Test
Wenn man die vorletzte Zeile nicht rauskommentiert, kommt dementsprechend der Fehler, daß dieses Image nicht initialisiert ist, anders aber das Image, was mit #PB_Any erstellt wurde.
Edit2:
Ohje, das ist 3 Jahre her, als es eingeführt wurde....
12. April 2004 : Version 3.90
- Hinzugefügt: #PB_Any Support (dynamische Numerierung) für DataBase, File, Font, FileSystem, Gadget, Image, Library,
Module, Movie, Palette, Sprite, Sprite3D, SysTray, ToolBar, StatusBar und Window
Edit3:
Sorry, es lies mir einfach keine Ruhe, hier nun der entgültige beweiss..
Handles und Nummern
Nummern
Alle erstellten Objekte werden durch eine beliebige Nummer (welche nicht das "Handle" des Objekts ist, siehe hierzu weiter unten) angesprochen. In dieser Anleitung werden diese Bezeichner (Nummern) durch die Notation #Nummer gekennzeichnet. (So hat zum Beispiel jedes erstellte Gadget eine #Gadget Nummer.)
Die Zahlen, die man Objekten zuweist, müssen keine Konstanten sein, sie müssen aber für jedes Objekt einmalig sein. (Ein Bild kann z.B. aber die gleiche Zahl wie ein Gadget haben, weil dies ja unterschiedliche Dinge sind.) Diese Nummern werden benötigt, um die Objekte später im Programm anzusprechen.
Zum Beispiel geben folgende Event-Funktionen diese ID's zurück:
EventGadget()
EventMenu()
EventWindow()
Handles
Alle Objekte bekommen auch vom System eine einmalige Nummer zugewiesen. Diese Nummern nennt man Handles.
Einige PureBasic Funktionen benötigen eben dieses Handle, und nicht die Nummer von PureBasic. In dieser Anleitung wird dies als eine ID bezeichnet.
Beispiel:
ImageGadget(#Gadget, x, y, Breite, Höhe, ImageID [, Flags])
; #Gadget ist hier die Nummer, die Sie dem Gadget zuweisen möchten.
; ImageID muss hier der Handle zu einem Bild sein.
Um das Handle von einem Objekt zu ermitteln, gibt es spezielle Funktionen wie z.B.:
FontID()
GadgetID()
ImageID()
MemoryID()
ThreadID()
WindowID()
Meistens geben die Funktionen, die solche Objekte erstellen, auch dieses Handle als Ergebnis zurück, wenn das Objekt erfolgreich erstellt wurde. Dies ist nur dann der Fall, wenn #PB_Any beim Erstellen des Objekts nicht verwendet wurde. Wenn #PB_Any verwendet wird, dann geben diese Befehle die von PB zugewiesenen Objekt-Nummern zurück, und nicht das Handle.