急!一些关于动态界面的问题(100分)

  • 主题发起人 主题发起人 xy123
  • 开始时间 开始时间
X

xy123

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]我在做动态界面时遇到了一些问题,比如当我要动态生成几个按钮或别的控件后,但是在下次程序
运行时,上次生成的控件不见了,怎样才能保存上次的修改?请高手指点。谢谢!
 
当然了,因为他们是动态创建的嘛!
我有点看不懂你的问题,你可以将他们再创建一次阿
 
你可以在窗口释放时把起控件的Top,Left, Width, Height,
还有其它保存起来(数据库、INI、注册表都可以)
 
在 From 的 OnCreate 中处理:
var
e:array of TEdit;
procedure TForm1.FormCreate(Sender: TObject);
var
i,n:integer ;
begin
n:=10;
setlength(e,n);
for i:=0 to n-1do
begin
e:=TEdit.create(self);
e.parent:=self;
e.visible:=true;
e.left:=10;
e.top:=10+30*i;
e.width:=50;
e.height:=20;
end;

end;
 
procedure TForm1.FormDestroy(Sender: TObject);
var i:integer;
begin
for i:=0 to ComponentCount-1do
if 是动态控件(component) then
保存控件信息(component);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,cnt:integer;
begin
cnt:=读取动态控件数量;
for i:=0 to cnt-1do
begin
读取动态控件信息;
生成控件动态控件;
end;
end;

文字信息多了一点,这些内容必须与你的控件类型决定。
 
function ComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
if Component.ClassType =TMemo then
TMemo(Component).Text :='';
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFrombegin
ning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFrombegin
ning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function StringToComponent(AComponent:TComponent;Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFrombegin
ning);
Result := BinStream.ReadComponent(AComponent);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

用这两个函数把整个窗体或单个的控件保存为string,然后想办法Load进来就可以了
帮助里有例子
 
十分感谢!!!
 
添加记录文本添加空间是同时添加关键文字岛文本下次调用时度文本度文本动代添加
 
后退
顶部