根据窗体名称动态创建窗体

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls, DB, ADODB;

type
  TForm1
= class(TForm)
    TreeView1: TTreeView;
    BitBtn1: TBitBtn;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
   
procedure FormCreate(Sender: TObject);
   
procedure FormClose(Sender: TObject; var Action: TCloseAction);
   
procedure TreeView1DblClick(Sender: TObject);
  private
   
{ Private declarations }
  public
   
{ Public declarations }
 
end;
 
{---留意此处-------}
  TFrmName
= ^MFrmName;
  MFrmName
= record
  FType: string;
 
end;

var
  Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}
{---留意这里----}
const  //也就是说要预存了下面这两个数组才可以很好的实现该功能
  ArrFormClass :
array[0..1] of TFormClass=(TFrmHumanResource,TFrmFinance);
  ArrClassName :
array[0..1] of String=('FrmHumanResource','FrmFinance');


function CreateForm(const AnyForm:TFormClass):TForm;
begin
  Result :
= AnyForm.Create(Application);
  Result.Showmodal;
{模式显示}
end;


function GetIndex(sStr : String) : integer;
var
  i :integer;
begin
  result :
= -1 ;

 
for i := low(ArrClassName) to high(ArrClassName) do
   
if sStr = ArrClassName[i] then
   
begin
      result :
= i ;
      exit;
   
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
p:TFrmName;
Nodea,Nodeb:TTreeNode;
begin
{------------------------------建树----------------------}
with adoquery1 do begin
   Nodea:
=TreeView1.Items.AddChild(nil,adoquery1.FieldValues['FrmCaption']);
  
while not eof do begin
    new(p);
    Nodeb:
=TreeView1.Items.AddChild(Nodea,adoquery1.FieldValues['FrmCaption']);
    p^.FType:
=adoquery1.FieldValues['FrmName'];
    Nodeb.Data:
=p;
    next;
  
end;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var  
I:Integer;
begin
{--释放TreeView的data}
for   I := 0   to TreeView1.Items.Count -1   do
 
if  Assigned(TreeView1.Items[I].Data) then begin
     Dispose(TFrmName(TreeView1.Items[I].Data));
     TreeView1.Items[I].Data   :
=   nil;
 
end;
end;

procedure TForm1.TreeView1DblClick(Sender: TObject);
var
  iIndex : integer;

begin
  
if   Assigned(TreeView1.Selected.Data)   then
  
begin
     iIndex :
= GetIndex(TFrmName(TreeView1.Selected.Data).FType);
    
if iIndex = -1 then exit;
     CreateForm(ArrFormClass[iIndex]);
  
end;
end;
end.
{注:示例的窗体是动态创建的,请安实制需要修改,另本例是经过测试才发代码的}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值