How to store an Object into an integer?

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.