How to store an Object into an integer?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值