Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

How to store an Object into an integer

Title: How to store an Object into an integer? Question: I needed a place for my objects to be found, even when there is no other connection but a pointer. Answer: Sometimes you want to use your beloved, worldclass component, but it has no room for saving data anywhere. But to build a connection to that data you need is maybe to complex. Here is an easy way to deal with it. I had this project where i made a kind of graphical editor. I had to use Components and Objects that i could not alter. But i had to store my object-data somewhere into the interface, so i knew which object is selected and has to be dealt with. I found a simple solution as i browsed through possible places in the component. It had a property called "Tag", which almost every component has one of. But how to get my object into this property. Well, i did it by deriving and classtyping. Imagine a component like this one: ----------------------------------------- TSomeComponent = class published property Tag : integer read FTag write FTag; end; ----------------------------------------- ...and you have an Object defined like this ----------------------------------------- var MyObject : TMyObjectClass; ----------------------------------------- You can put your object into the tag like this: ----------------------------------------- SomeComponent.Tag := Integer( Pointer(MyObject)); ----------------------------------------- Thats all. If you have to lay hands on it again you have several possibilities. You can simply typecast: ----------------------------------------- TMyObject(Pointer(SomeComponent.Tag).Name := 'Peter'; ----------------------------------------- ...or you could take a temporary variable inside a function for easier access: ----------------------------------------- procedure DoSome(i : integer); var M : TMyObject; begin M := TMyOBject(Pointer(i)); Showmessage(M.Name); end; ----------------------------------------- You could even save different objects into your components. To proof if you have the right object you can help yourself by using the TOBject Class. ----------------------------------------- function IsMyObject(i:integer):boolean; begin result := TObject(Pointer(i)).ClassName='TMyOBject'; end; Thats all i wanted to tell for now. have fun coding. Nostromo