How to store an Object into an integer?

本文介绍了一种将对象存储到组件整型属性中的简单方法,通过使用组件的Tag属性,可以有效地存储和检索对象数据,这对于图形编辑器等应用程序特别有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值