我在panel 上dock form1窗体.
panel docksite属性true;
Tform1= class(TForm),form1 的dragkind =dkdock,dragmode =dmautomatic;我在panel上dock了n个form1对象;想保存fom1在panel上的dock位置。在下次打开时读取位置显示。我保存了form1的top,left,right,bottom。
读取时
form1.DockOrientation := doVertical;
form1.HostDockSite := pnl_left; //pnl_left 为 panel对象
form1.Dock(pnl_left,Arect); //Arect为保存的位置
form1.Show;显示出来不是我保存之前的位置,不知道怎么处理,请求大侠给于帮助!
panel docksite属性true;
Tform1= class(TForm),form1 的dragkind =dkdock,dragmode =dmautomatic;我在panel上dock了n个form1对象;想保存fom1在panel上的dock位置。在下次打开时读取位置显示。我保存了form1的top,left,right,bottom。
读取时
form1.DockOrientation := doVertical;
form1.HostDockSite := pnl_left; //pnl_left 为 panel对象
form1.Dock(pnl_left,Arect); //Arect为保存的位置
form1.Show;显示出来不是我保存之前的位置,不知道怎么处理,请求大侠给于帮助!
解决方案 »
- delphi里有extern "C"的吗?
- 在新窗口的创建事件中写入的程度为何不执行(写在FormShow事件中也不执行)
- 我是菜鸟,请问怎么样可以让一个程序最小化到系统栏(屏幕右下角),在线等……
- COM技术的应用方面与存在形式?
- DBIMagine 是否可显示jpg文件
- 这是什么问题啊?
- 在线等待,高分!如何扑获F1----F12键!给出部分代码
- 诚求高手指教:如何封装一个类(非VCL类)到dll或ocx中被.net调用
- 在成都,上海,北京,南京,广州的 李维和Borland_Delphi
- Tclientdataset.packetrecord:=10 但取回来的数据纪录个数还是多于10个????
- ADOConnection.ConnectionString的问题
- 怎样统计edit中的输入数字的个数???
procedure TForm1.Button1Click(Sender: TObject);
var
i :integer;
ms: TMemoryStream;
begin
try
ms:=TMemoryStream.Create;
for i := 0 to Panel_lf.ComponentCount-1 do
begin
//
ms.WriteComponent(Panel_lf.Components[i]);
end;
ms.SaveToFile('d:\a.txt');
finally
ms.Free;
end;end;//read method 怎么写啊?
var
I: Integer;
begin
for I := Panel2.ControlCount - 1 downto 0 do
Panel2.Controls[I].Free;
end;procedure TForm1.btnLoadClick(Sender: TObject);
begin
if FileExists('Budded.txt') then
with TFileStream.Create('Budded.txt', fmOpenRead) do
try
ReadComponent(Panel2);
finally
Free;
end;
end;procedure TForm1.btnNewClick(Sender: TObject);
begin
Panel2.DockSite := True;
with TFrame2.Create(Panel2) do
begin
Name := 'Budded'+IntToStr(GetTickCount);
ManualDock(Panel2);
end;
end;procedure TForm1.btnSaveClick(Sender: TObject);
begin
with TFileStream.Create('Budded.txt', fmCreate) do
try
WriteComponent(Panel2);
finally
Free;
end;
end;initialization
RegisterClass(TFrame2); // 一定得先注册end.
你保存的时候,还得保存,该元件的大小,位置等必要信息.然后在语句入坞的时候,把这些信息在恢复到要入坞的元件上.格式如 一行为一个入坞的FORM
如果不入坞的FORM也要打开,但不入坞的也要知道,那么再加上
DockName=FORM1;Left=X,Y;Right=X,Y;IsDock=true;
DockName=FORM2;Left=1,1;Right=16,30;IsDock=false;
至此就完成了.
具体可参考《delphi7从入门到精通》第六章
procedure TForm1.btnLoadClick(Sender: TObject);
begin
if FileExists('Budded.txt') then
with TFileStream.Create('Budded.txt', fmOpenRead) do
try
ReadComponent(Panel2);
finally
Free;
end;
end;
我在调这个的时候,没有显示出panel2 上的Tfram控件啊。
var
aa :TComponent;
vv :TFrame3;
i :integer;
begin
if FileExists('c:/Budded.txt') then
with TFileStream.Create('c:/Budded.txt', fmOpenRead) do
try
aa :=ReadComponent(Panel2);
for i:=0 to aa.ComponentCount-1 do
begin
if aa.Components[i] is TFrame3 then
TFrame3(aa.Components[i]).ManualDock(Panel2);
end;
finally
Free;
end;end;我用这段代码可以显示多个Tframe3 ;但我保存前的上下停靠的。读取后就变成了左右停靠了。