社区
Delphi
帖子详情
动态显示窗体
gulf1234
2007-01-22 11:28:55
在我的工程中,有很多的窗体,但是我都没有用“Atuo Create”,我希望在用户点击菜单后,动态加载并显示。由于我的菜单都是通过数据库中的记录来生成的,所以在用户点击菜单时,我只能获取到窗体的名称。
我在发贴前也,看了一些以前的帖子,但是都没有能解决。看看哪位大侠能帮帮我!!!
...全文
484
30
打赏
收藏
动态显示窗体
在我的工程中,有很多的窗体,但是我都没有用“Atuo Create”,我希望在用户点击菜单后,动态加载并显示。由于我的菜单都是通过数据库中的记录来生成的,所以在用户点击菜单时,我只能获取到窗体的名称。 我在发贴前也,看了一些以前的帖子,但是都没有能解决。看看哪位大侠能帮帮我!!!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gulf1234
2007-04-10
打赏
举报
回复
问题尚未解决,还没有按照netfly(支点) 说的去试试呢。
试后如果还不可以,另开贴请教,答谢各位,先把该贴结了,谢谢大家的帮助。
netfly
2007-03-27
打赏
举报
回复
在D中, 系统一般使用CLASSLIST(D7是RegGroups)这个全局变量来保存所有注册的类的类(class of class)
例如在D5中, RegisterClass这个函数,实际就是把你的类ADD到CLASSLIST这个变量(D5里是一个TThreadList). 然后FindClass从这个全局变量中找出你的那个类的类,然后再创建.你的那个问题应该是注册的和读取的应该不是同一个地方,可以调试跟踪一下.如果不想的话,也可以根据这个原理,我们可以自己做一个自己的LIST来自己控制,自己读取(无非就是抄一次VCL的代码),呵呵.
rcyboom
2007-03-26
打赏
举报
回复
把窗体放到dll中,每个dll都实现几个通用函数:
createandshow;
getformname;
getmenuiten;
主程序扫描指定文件夹的所有dll文件,遍历并动态生成菜单。
每个菜单都调用这几个通用函数即可
gulf1234
2007-03-26
打赏
举报
回复
TO netfly(支点) :我好像不是很理解啊?你能说详细点,或者给我一个简单的例子啊?谢谢。
wwwcampus
2007-03-22
打赏
举报
回复
在 Unit2 中加
initialization
RegisterClass(TForm2);
在 Unit1 中
procedure TForm1.Button1Click(Sender: TObject);
var
pc: TPersistentClass;
fc: TFormClass;
f: TForm;
begin
pc := FindClass('TForm2');
fc := TFormClass(pc);
f := fc.Create(Self);
f.Show;
end;
win2003 + d7 调试通过
gulf1234
2007-03-22
打赏
举报
回复
TO starsky2006(星空无限),
谢谢写的回帖,但是按照你的方法,那如果我有很多的窗体的话,是不是要一一列举呢?我现在就是不想一一列举,不想一有新的窗体,就要来更改这个过程。
starsky2006
2007-03-22
打赏
举报
回复
var
LForm: TLForm;
implementation
{$R *.dfm}
function TShowFormClass.CreateAClass(const AClassName: string): TForm;
begin
if AClassName='LForm' then
Result := LForm;
else
Result := nil;
end;
gulf1234
2007-03-22
打赏
举报
回复
自己顶一个
netfly
2007-03-22
打赏
举报
回复
如果你是用模板编程,很可能是你的系统前后有两个放CLASS的CLASSLIST(D5,D7,D6在这个地方都略有不同), 这样最好的方法是一自己定义一个全局的LIST然后自己往这个LIST里进行注册,并从这里来FIND就可以了.
gulf1234
2007-03-22
打赏
举报
回复
各位啊,我测试了一下,wwwcampus(稻草) 、netfly(支点)和hongqi162(失踪的月亮) 说的方法,如果我新建一个工程的话,都是可行的。
但是在我的程序中就是不行,老是报什么类不存在(我已经使用RegisterClass了)。
我用的是模板编程的,所以我想知道这啊会有什么影响啊?
netfly
2007-03-20
打赏
举报
回复
你的类名和你代入的字符串是一样的吗?
gulf1234
2007-03-20
打赏
举报
回复
不是在DLL中的。
TO zaza_bbface(我试着成熟一点~) ,
我在frmMain中已经引用了单元UnitSite(就是frmSite所对应的单元)了啊,不会这两个名字一定要一样的吧。
zaza_bbface
2007-03-20
打赏
举报
回复
但是每次运行的时候都报错,说“Class TfrmSite not found”.
即使我在frmSite模块的最后(.end前面)使用方法
initialization
RegisterClasses(TfrmSite);依然是这样的错误提示啊。
------------
用了RegisterClasses(TfrmSite);肯定可以找到类的,除非你的工程根本没use frmSite单元
netfly
2007-03-20
打赏
举报
回复
你的窗体单元是放在DLL里?
gulf1234
2007-03-20
打赏
举报
回复
同样的错误提示啊!救命啊!!!!!!!!!!!
netfly
2007-03-20
打赏
举报
回复
var
LFormClass : TFormClass;
LForm: TForm;
begin
//LFormClass := TFormClass(FindClass(AClassName)); <---------------已经进行了转换了
//LForm := LFormClass.Create(Application);
LForm := TFormClass(FindClass(AClassName)).Create(Self);
gulf1234
2007-03-20
打赏
举报
回复
谁能帮帮我啊,解决后,我另开贴酬谢啊。
我先设置了一个函数CreateAClass
function TfrmMain.CreateAClass(const AClassName: string): TForm;
var
LFormClass : TFormClass;
LForm: TForm;
begin
LFormClass := TFormClass(FindClass(AClassName));
LForm := LFormClass.Create(Application);
Result := LForm;
end;
然后在BUTTON的事件中调用,
procedure TfrmMain.Button1Click(Sender: TObject);
var
LForm: TForm;
begin
LForm := CreateAClass('TfrmSite');
try
LForm.ShowModal;
finally
LForm.Free;
end;
end;
但是每次运行的时候都报错,说“Class TfrmSite not found”.
即使我在frmSite模块的最后(.end前面)使用方法
initialization
RegisterClasses(TfrmSite);依然是这样的错误提示啊。
各位大哥,快来帮帮忙啊!!!!!!!!!!!!
gulf1234
2007-01-23
打赏
举报
回复
顶
zhu_jiang
2007-01-23
打赏
举报
回复
我看你要实现一个通用灵活的form才行,在配置里面保存好所有界面要素,根据界面名称动态创建才好
creativecn
2007-01-23
打赏
举报
回复
你应该把窗体建好 然后点击按钮利用语句让其显示 否则你建立一个空白的窗体干什么
加载更多回复(10)
win10+ubuntu16.04双系统为ubuntu扩容
win10+ubuntu16.04双系统为ubuntu扩容 第一步:在win10上开辟空间 第二步:制作启动U盘 第三步:在ubuntu系统中安装gparted 第四步:通过启动盘进入ubuntu并进行扩容 第一步:在win10上开辟空间 右键点击此电脑-管理-磁盘管理 在下方选择要从哪里切割下来一段空间,此处以f盘为例。右键点击下方f盘,选择压缩卷: 选择要压缩的大小,此处以30G为例,输入30*1024=30720后确定,等待压缩完成。 由于博客是在扩容完之后写的,所以没有截图,等待空间开辟完成之
双系统ubuntu无法进入_Win10+ubuntu 双系统安装顺顺利利!
首先谢谢知乎上各个相关回答的大佬们你们踩过的坑我们可以躲过去了我们可以踩新版本的坑了哈哈哈哈哈哈第一次安装双系统,也是第一次安装ubuntu居然顺顺利利!真是难以置信!记录一下给后面的朋友指条明路。——分割线——1.我的电脑配置主板:技嘉B365M AORUS ELITEcpu:i5 9600k 显卡:安装的时候独显还没寄到,用的是cpu里的集成显卡。SSD :WD Blue SN550 (500...
Ubuntu20.04根目录扩容(双系统)
情况:电脑安装了两块硬盘,各自500g,一开始只安装了win10系统,后来在第二个硬盘上安装了ubuntu20.04,分配了一开始分配了200G,后来感觉小,打算在根目录下扩容,最后成功了记录如下; 过程: 1、在win10系统下,对第二块盘(即安装ubuntu的那个盘)压缩卷(只设置压缩大小就行,其他参数不用改); 2、在Ubuntu系统下,Ctrl+Alt+T打开终端输入: sudo apt update sudo apt install gparted 安装完成后输入: sudo g
【ubuntu+win】Win10+Ubuntu22.04双系统给ubuntu系统中的某个分区进行扩容(从400G->800G)数据无损坏
刚开始买下电脑的时候,只装了一个 1T 的固态硬盘,由于科研需要,就装了双系统win10+ubuntu22.04系统,毋庸置疑,肯定不够用,之后就又安排了1T 的固态硬盘,考虑不周,给win10分了600G ,给ubuntu分了400G,在没炮制代码的时候一直用的win10系统,600G 怎么用怎么爽,炮制代码的时候发现这个坑挖的有点大,根本不够用。由于我使用的数据集是500G+ ,所以只能进行重新分区,在网上学的三角猫功夫,希望能帮助到遇到同样问题的你。7. 通过gparted 打开。
Virtualbox分配DVI存储空间瘦身及扩容
原因概述:主系统Ubuntu,在Linux环境下安装了Virtualbox用以安装Win10虚拟机,在安装虚拟机过程分配磁盘固定大小(分了300G),导致Linux环境下存储空间不够用了(只剩下10G左右),为了避免重装虚拟机,需要给win10.vdi瘦身。
Delphi
5,944
社区成员
262,941
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章