How to store an Object into an integer?
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
本文介绍了一种将对象存储到组件整型属性中的简单方法,通过使用组件的Tag属性,可以有效地存储和检索对象数据,这对于图形编辑器等应用程序特别有用。
1172

被折叠的 条评论
为什么被折叠?



