Subject:
不可视组件的Top和Left
[Print This Page]
Author:
sonicer
Time:
2010-4-16 18:03
Subject:
不可视组件的Top和Left
系统带的非可视组件放到窗体上后然后保存,下次再打开这个窗体,非可视组件就出现在上次放置的位置(废话了,这功能当然谁都知道)
这实际上意味着非可视组件也有位置属性保存起来了,实际上打开dfm文件,所有的组件都有left=xxx top=xxx的字样
非可视组件使用了一种特殊方式来保存这两个值,
我想问一下,如何在程序中读到这两个值?
谢谢
Author:
zjy
Time:
2010-4-16 21:23
Subject:
从 Classes.pas 中可以找到:
procedure TComponent.ReadLeft(Reader: TReader);
begin
LongRec(FDesignInfo).Lo := Reader.ReadInteger;
end;
procedure TComponent.ReadTop(Reader: TReader);
begin
LongRec(FDesignInfo).Hi := Reader.ReadInteger;
end;
procedure TComponent.DefineProperties(Filer: TFiler);
var
Ancestor: TComponent;
Info: Longint;
begin
Info := 0;
Ancestor := TComponent(Filer.Ancestor);
if Ancestor <> nil then Info := Ancestor.FDesignInfo;
Filer.DefineProperty('Left', ReadLeft, WriteLeft,
LongRec(FDesignInfo).Lo <> LongRec(Info).Lo);
Filer.DefineProperty('Top', ReadTop, WriteTop,
LongRec(FDesignInfo).Hi <> LongRec(Info).Hi);
end;
显然,DesignInfo 里面保存的就是你要的东西。
Author:
sonicer
Time:
2010-4-17 17:29
这段代码当时走马观花,人懒,总以为有类似于object.left之类的方法来读取,没想到用这种办法
多谢领导
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0