大批量组件调用的提速方法 (详见内部贴)(50分)

N

nzfsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我们大家都会有这样的体会:程序中放置了太多的组件。
程序启动很慢很慢。。。
怎么解决呢?

我曾经看到过这样的解决方案:
例有:FrmMain主窗体(内有Panel,Panel2,Panel3)
Form1(Panel,Panel中是好多组件,程序中把它们规类在Form1.Panel1中)
Form2(Pane2,Panel中是好多组件,程序中把它们规类在Form2.Panel1中)
Form3(Pane3,Panel中是好多组件,程序中把它们规类在Form3.Panel1中)
在初始化时,FrmMain被自动初始化。Form1-Form3则不是自动初始化。

程序中分步,
把Form1.Panel1创建,Form1.Panel1.parant设为FrmMain.Panel.
把Form2.Panel.........
就这样,把另外三个Form中的Panel中的组件放到了主窗体中了。

但可惜,我现在无法回忆起以前这段代码了。没试成功。
路过的同仁,可以伸手帮助一下吗?
 

Form1放上几个Panel
Form2或Form3创建后,
Form2.parent := form1.paneln
Form3.parent := form1.panelm
 
影子,我就是这么做的。不成功。讲有问题。
我的Form2不是自动创建的。要手工创建。
我是这样做的:
在ForMain中
Uses Unints1,Unints2; .....

Form2:=Tform2.creat(Application);
Form2.Panel1.parent:=FormMain.Panel1
但编译通不过。好像是Form2讲没定义。
(ForMain是MDIForm,Form2...是MdiChild)
 
Form2.parent:=FormMain.Panel1
 
影子,我试试。。。
 
影子,你的代码,你可以真实的试验一下吗?
如果把Form设成MDI,就不能正常运行。
 
Form2:=Tform2.create(Application);
Form2.Panel1.parent:=FormMain;
 
Stlont:
不是我的原意呀。我愿意是
Form2.Panel1.parent:=FormMain.Panel1。
Form3.Panel1.parent:=FormMain.panel2;
Form4.........................panel3;
.....
如果按你的,不是无法区别开了吗。而且我要求动态生成的显示区域可以控制。
如果父窗体是FrmMain后,无法形成一种类似于MDI这种效果了。

 
走题,再看。
 
to nzfsoft:
Form2.Panel2.parent:=FormMain.Panel1。
Form3.Panel3.parent:=Form2.panel2;
Form4.Panel4.parent:=Form2.panel3;
.........
>>>>但编译通不过。好像是Form2讲没定义。
其实报的是Panel没有定义,虽然Panel的Parent变了,但定义的时候就其它Form
 
Form2.Panel1.parent:=FormMain.Panel1。
Form3.Panel1.parent:=FormMain.panel2;
可以通过.
把子窗体类型设置为fsNormal,visible设为false就行了.
 
Qiawnt:你的话好像没讲完呀。。。继续讲。
 
zhanggeye:注意一下。Form2,Form3它们不是自动创建的。是在程序中手工创建。
 
没什么问题呀,mainform中uses form2,form3,
建立form2时:
tform2.Create(application).Panel1.Parent:=self.Panel1 ;
建立form3时:
tform3.Create(application).Panel1.Parent:=self.Panel2 ;
 
UP有其他意见吗?
 
我今天看到人家是这样写的。。。。与大家分享:

procedure TMainForm.DemoButtonClick(Sender: TObject);

// This method is a kind of scheduler. Here we switch between the demo forms.

var
NewDemoClass: TFormClass;
NewDemo: TForm;

begin
case (Sender as TSpeedButton).Tag of
0:
NewDemoClass := TSpeedForm;
1:
NewDemoClass := TGeneralForm;
2:
NewDemoClass := TPropertiesForm;
3:
NewDemoClass := TVisibilityForm;
5:
NewDemoClass := TGridForm;
6:
NewDemoClass := TDrawTreeForm;
7:
NewDemoClass := TAlignForm;
8:
NewDemoClass := TWindowsXPForm;
else
NewDemoClass := nil;
end;

if (ContainerPanel.ControlCount = 0) or not (ContainerPanel.Controls[0] is NewDemoClass) then
begin
if ContainerPanel.ControlCount > 0 then
ContainerPanel.Controls[0].Free;

if Assigned(NewDemoClass) then
begin
NewDemo := NewDemoClass.Create(Self);
NewDemo.Hide;
NewDemo.BorderStyle := bsNone;
NewDemo.Parent := ContainerPanel;
NewDemo.Align := alClient;
NewDemo.Show;
end;
end;
end;
 
备注:主窗体中放一个Panel。它是其它窗体的载体
 
发分了。还是自己搞定的。唉不好给自己发分了。
 

Similar threads

S
回复
0
查看
979
SUNSTONE的Delphi笔记
S
S
回复
0
查看
799
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部