俺动态在一个窗体中创建很金多按钮,怎么才能把这么创建的控件及它们的位置保存下来,又怎么能下次再打开呢?提提意见。
解决方案 »
- 如何获取其他程序的窗体位置和大小
- 请问在网络断开的情况下,有没有好一点的方法让Adoconnection的Connect快速返回异常!
- AutoCad 显示问题!
- 请教
- ado 能否使用batchmove?
- 谁知道Formula one控件如何连接数据库。
- Indy8异常"Cannot allocate socket"是怎么回事??加急!!!
- 急盼回复:我在delphi6编程中,将A数据表用BATCHMOVE复制到B数据表中后,为什么小数部份丢失了
- 请问哪能下Delphi2005啊?
- 当用这个"显示PDF文件的控件"时,怎样在加载有密码的PDF时自动输入密码(假设密码已知) ???(分在别处,答对一定给)
- 新手救教一个关于TDBImage的问题
- Oracle中没指定大小的Number字段要如何访问
var
i : integer;
btn : TButton;
begin
for i := 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TButton then
begin
btn := self.Components[i] as TButton;
//在这里保存
end;
end;
end;
不明白呀……
//Component转换成Str
function CompToStr(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
//Str转换成Component
function StrToComp(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
第一个函数好用!第二个用来还原的那个会出错呀 -_-#
确定Value是转换正确的串?
喂喂,我想我还不会犯那么低级的错误吧??
贴段调用的代码来看看^_^
比如转换TButton,在工程开始注册一下:RegisterClass(TButton);
调用:btn1 := StrToComp(ss) as TButton;
...
看来得加强一下VCL的知识了