把用到的form放在一个dll里面,在dll中写一个showform的方法,在你的应用程序中调用这个dll
解决方案 »
- 有关指针的概念问题
- 求教关于文本文件读入速度的问题
- 怎样利用内部网上INTERNET网?
- 各位大侠,本人寻求一支持Delphi7的可对格式进行限制的文本框控件!!!在线给分!!
- 请问如何将多张图片压缩成一个avi文件?100分奉上
- 紧急求购报表控件!!!!!!!
- 怎么放都是快进?
- 请问如何用ADO实现数据库的多线程编程
- delphi6.0该出补丁,许多外部的activeX控件从delphi5.0移植到delphi6.0后出了一大堆问题?
- 前阵听各位说,电子工业出版社的<<DELPHI5从入门到精通>>有某些错误,今天我买了这本书,所以想请哥哥姐姐们帮我
- 请教一个简单问题
- Delphi6 中使用dbexpress连接MySql数据库的问题!
Procedure showForm(i,FormArr);
begin
formArr[i].show;
end;
不妨试一下!
s:='form1'
&s.show;
DEPHI 不清楚。
showform的参数是字符型的form的类名?如果把所有的form放在一个数组中,那么如何对这个数组初始化呢?
手工一个一个赋值吗?那么编程过程中,随着功能的增加,合并等,
我要手工维护这样一个数组,使其与数据库中的一致,那还不如不用动态
菜单,直接用菜单编辑呢。还有更好的办法吗?
再动态调用!
最体实现如下;
procedure TMainForm.mymenuexcute(sender:Tobject);
//所有菜单按钮执行的事件
var
tmpmenuname:string;
begin
tmpmenuname:=Tmenuitem(sender).name;
lockwindowupdate(handle);
try
execute(tmpmenuname);
finally
lockwindowupdate(0);
end;
end;
//执行具体功能;
procedure TMainForm.execute(const agnbh:string);
var
exename: array[0..79] of char;
fldname:string;
begin
with qsel_runexe do
begin
if active then close;
parambyname('name').asstring:=agnbh;
open; //根据菜单名字提取FORM名字
if (recordcount=1) and (fieldbyname('frmname').asstring<>'') then
begin
fldname:=trim(fieldbyname('frmname').asstring);
if fldname='frmabc' then
begin
if not checkMDIChildform('frmabc') then
//查找此子窗体是否存生的函数!
begin
application.createform(Tfrmabc,frmabc);
end else frmabc.show;
end;
end;
end;
不知可否解释得再详细些?
var
exename: array[0..79] of char;
fldname:string; classname:string; //add by cxz
begin
with qsel_runexe do
begin
if active then close;
parambyname('name').asstring:=agnbh;
open; //根据菜单名字提取FORM名字
if (recordcount=1) and (fieldbyname('frmname').asstring<>'') then
begin
fldname:=trim(fieldbyname('frmname').asstring);
classname:='T'+fldname;//add by cxz if not checkMDIChildform(fldname) then
//查找此子窗体是否存生的函数!
begin
application.createform(classname,fldname);//by cxz
end else Tform(fldname).Show; //by cxz end;
end;
end;
RegisterClass(Class) 注册一个类。
下面举一个例子:再FormUnit里有一个TmyForm窗体类,可以这么处理。
1. 在FormUnit的最后加上
Initialization
//注册TmyForm
RegisterClass(TmyForm) ;
end ;2. 在需要的地方(比如在函数CreateFormByClassname(sClassName: String))
function CreateFormByClassname(sClassName: String): TForm ;
var
rClass: TClass ;
begin
rClass := GetClass(sClassName) ;
if rClass <> nil then
//我不知道原因,但是TComponentClass(rClass).Create(nil)
//好象会返回已经存在的对象,而application.CreateForm则不会
application.CreateForm(TComponentClass(rClass),Result) ;
end ;