动态加载窗体的问题 100分(100分)

  • 主题发起人 主题发起人 笑雨
  • 开始时间 开始时间

笑雨

Unregistered / Unconfirmed
GUEST, unregistred user!
创建动态窗体,根据程序中不同的选项加载不同的label、edit、button等,窗体中的控件不确定加载,窗体的大小也不确定。也就是说窗体中的控件是根据从数据库中不同的表里查找出来的不同结果显示在上面的
 
难道没人知道吗?真不厚道,各位大侠帮忙啊
 
unit U_FormMian;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls,StdCtrls, ImgList;

type
TForm_Main = class(TForm)
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure btClick(Sender: TObject);
procedure baClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form_Main: TForm_Main;
pa:TPanel;
pb:TPanel;
// pc:TPanel;
bt:Tbutton;
ba:Tbutton;
memo:TMemo;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm_Main.FormCreate(Sender: TObject);

begin
pa:=TPanel.Create(self);
//pa.Caption:='mubiaota';
pa.Left:=0;
pa.Top:=50;
pa.Width:=150;
pa.Height:=250;
pa.Align:=alLeft;
pa.Parent:=Self;

pb:=TPanel.Create(self);
pb.Left:=150;
pb.Width:=538;
pb.Align:=alTop;
pb.Parent:=self;

bt:=TButton.Create(self);
bt.Caption :='读取文件';
bt.Left:=23;
bt.Top:=20;
// bt.Width := 100;
//bt.Height := 50;
bt.Align := alNone;
bt.Parent :=pa;
bt.OnClick:= btClick;
// Memo1.Lines.Clear;

ba :=TButton.Create(self);
ba.Left:=23;
ba.Top:= 60;
ba.OnClick:= baClick;
ba.Caption:= '退出';
ba.Parent:=pa;

memo:=TMemo.Create(self);
memo.Align:=alTop;
memo.Parent:=pb;
//pb.Visible:=false;

//ComboBox1.Text:='请选择';


end;

procedure TForm_Main.btClick(Sender: TObject);
var
op:TOpenDialog;
str:string;
str1:TStringList;
i:integer;

//pb:TPanel;
begin
memo.Clear;

str1:=TStringList.Create;
op:=TOpenDialog.Create(self);


//op :=TOpenDialog.Create(self);
if op.Execute then
begin
str1.LoadFromFile(op.FileName);
for i:= 0 to str1.Count-1 do
begin

memo.Lines.Add(str1.Strings);

end;
end;

end;

procedure TForm_Main.baClick(Sender: TObject);
var
pForm:TForm2;
begin
pForm:=TForm2.Create(self);
//pForm.Parent:=TForm2;
pForm.Show;

end;

end.
 
To: dxiaoliang,:
哪个控件 是动态创建的阿??你的程序里面已经用代码创建了控件,而且具体创建什么已经写明了。我的意思是写一个函数或者过程,根据传过来的变量,创建相应的控件,而且窗体的大小也随着创建的控件多少相应改变。
 
那应该把你需要的参数放到数据库里,例如控件,窗体大小等等,不然就没办法了
 
不可能把参数(控件、窗体大小)放到数据库里。
 
公共過程:
Procedure openform(formclass: Tformclass; Var fm; Aowner: Tcomponent);
Var
I: integer;
Child: TForm;
Begin
Child := Nil;
For I := 0 To Screen.FormCount - 1 Do
If Screen.Forms.Classtype = formclass Then
Begin
Child := Screen.Forms;
If Child.WindowState = wsMinimized Then
ShowWindow(Child.handle, SW_SHOWNORMAL)
Else
ShowWindow(Child.handle, SW_SHOWNA);
If (Not Child.Visible) Then Child.Visible := True;
Child.BringToFront;
Child.SetFocus;
TForm(fm) := Child;
Child := TForm(formclass.NewInstance);
Exit;
End;
If Child = Nil Then
Begin
TForm(fm) := Child;
Child := formclass.Create(Application);
End;
End;

調用方法:
openform(TForm2, Form2, self);

技術交流QQ:136293586
 
后退
顶部