当前位置:主页>仓库管理软件> 列表

窗体名放在数据库中,取出来动态创建的问题 找服装鞋帽销售软件

销售管理软件版1楼: with TForm(''TFrmDzzz'').create(nil) do
begin
show;
end;
运行出错,TFrmDzzz存放在数据库中取出来,转换出错,
TFrmDzzz是要动态创建的窗体

2楼: unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
v_FormClass: TFormClass;
v_Form: TForm;
begin
v_FormClass := TFormClass(FindClass(Edit1.Text));
v_Form := v_FormClass.Create(Application);
try
v_Form.ShowModal;
except
v_Form.Free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := ''TForm2'';
end;

initialization
RegisterClass(TForm2);
RegisterClass(TForm3);
finalization
UnRegisterClass(TForm2);
UnRegisterClass(TForm3);
end. 如服装鞋帽销售软件

3楼: 我数据库的表的窗体名称字段大约有很多的窗体名
''TFrmDzzz'' 是一个字符串变量
难道我都要注册。

原来是
var frm:string;
begin
//打开子窗体
frm:=cxDBTreeList1.DataController.DataSet.FieldByName(''Frmname'').AsString;
with TForm(TComponentClass(FindClass(frm))).Create(nil) do
begin
show;
end;

下面的让我给注释了。为的是上面的动态一下,更加简练一些。
{
if cxDBTreeList1.SelectionCount<1 then Exit;

case cxDBTreeList1.DataController.DataSet.FieldByName(''pkserial'').AsInteger of
1009:begin
FrmDzzz:=TFrmDzzz.Create(nil);
FrmDzzz.Show;
end;
1010: begin


FrmBgdz:=TFrmBgdz.Create(nil);
FrmBgdz.Show;
end;
1011: begin
FrmCywl:=TFrmCywl.Create(nil);
FrmCywl.Show;
end;
1012: begin
FrmXyz:=TFrmXyz.Create(nil);
FrmXyz.Show;
end;
1013: begin
FrmHxts:=TFrmHxts.Create(nil);
FrmHxts.Show;
end;
1014: ;
1015: begin
FrmJhsd:=TFrmJhsd.Create(nil);
FrmJhsd.Show;
end;
1016: ;
1017: begin
FrmDzbj:=TFrmDzbj.Create(nil);
FrmDzbj.Show;
end;
2222: begin
FrmYpzl:=TFrmYpzl.Create(nil);
FrmYpzl.Show;
end;
3333: begin
FrmSpzl:=TFrmSpzl.Create(nil);
FrmSpzl.Show;
end;
98 : begin
FrmSpzl:=TFrmSpzl.Create(nil);
FrmSpzl.Show;
end;
//99: FrmWxks.ShowModal;
100 : ;

101 : ;
102 : ;
103 : ;
104 : ;
105 : ;
106 : ;
107 : begin
FrmDzzz:=TFrmDzzz.Create(nil);
FrmDzzz.Show;
end;
108 : begin
FrmBgdz:=TFrmBgdz.Create(nil);
FrmBgdz.Show;
end;
109 : begin
FrmCywl:=TFrmCywl.Create(nil);
FrmCywl.Show;
end;
110 : begin
FrmXyz:=TFrmXyz.Create(nil);
FrmXyz.Show;
end;
111 : begin
FrmHxts:=TFrmHxts.Create(nil);
FrmHxts.Show;
end;
//112 : FrmCwgl.ShowModal;
113 : begin
FrmDzbj:=TFrmDzbj.Create(nil);
FrmDzbj.Show;
end;
114 : begin
FrmYxxg:=TFrmYxxg.Create(nil);
FrmYxxg.Show;
end; //营销相关
115 : begin
FrmWlxg:=TFrmWlxg.Create(nil);
FrmWlxg.Show;
end; //物流相关
116 :;

117 : begin
FrmGsxx:=TFrmGsxx.Create(nil);
FrmGsxx.Show;
end; //公司信息
//118 : FrmYhqx.ShowModal; //用户权限
119 : begin
FrmYxcs:=TFrmYxcs.Create(nil);
FrmYxcs.Show;
end; //运行参数
120 : begin
FrmDzmb:=TFrmDzmb.Create(nil);
FrmDzmb.Show;
end; //单证模版
136 : begin
FrmJhsd:=TFrmJhsd.Create(nil);
FrmJhsd.Show;
end;
else ;
end;
}

4楼: 没办法 都注册吧

5楼: 不需要这么麻烦吧,只要动态创建一个窗体,直接把窗体的NAME赋值成你数据库保存的数据就可以了。

6楼: 类似的功能我是用TAction控件完成的,不过也是很麻烦的,需要把所有的Taction都初始化一遍,不过好处是Taction可以和所有的菜单、按钮、工具栏相关联。
=====================================================
中国原创软件园 www.dhss.cn 程序员共同的家园
技术群: delphi+SQL Server 14799474