我开发了8个基类Form窗体,其它界面设计都是继承这8个基类Form窗体,现想把这8个基类Package,但Package后加入工程中,无法继承,请问要如何才能继承。
解决方案 »
- 当用热键来执行button1click的时候,如果禁止焦点改变?
- 散分一下~顺便问下有没有使用VGScene的同学们!
- DLL呼出的界面不能焦点 请解决办法
- 一个不错的Delphi和网络技术QQ群:12497264
- 如何更改Clientsocket源码单元,各位下来看一下
- 干了一个通宵,终于完成了“实用小词典1.10”,大家可要捧场啊!
- 在使用websnap技术时如何通过后端的数据库使用websnap提供的3个控件进行身份验证呢?
- 窗体在游戏里弹出,不失真!如何做!快快快!
- 关于用客户端clientdataset提交数据的几个难点问题, 高手请进,分不够可以再加
- 如何使用多个线程同时读取文本文件?我给100分!
- 管他什么工具,能骗钱就是好工具。现在一直用Delphi
- 我想为FindDialog的OnFind找文本,怎么写?
1.打开基类包文件,编译并安装。
2.在包文件中选择打开基类文件,然后在其窗体上右键单击,在弹出的对话框中选择Add to Repository,打开其窗体;
3.Title和Page中写好,注意不要写反;
4.点击“确定”,关闭Add to Repository 窗体后即可file-new-other里选择inherited,我这里没问题
然后继承form;好像无法像delphi IDE那样可视化继承form
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TfrmMain = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
function CreateFormByClassName(const ClassName: string): TCustomForm;
function CreateDataModuleByClassName(const ClassName: string): TDataModule;
procedure UnloadAddInPackage(ModuleInstance: HMODULE);
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementationvar
ModuleInstance1: HMODULE;
{$R *.dfm}
//---------------------------------------------------------------
//动态加载 Package
//---------------------------------------------------------------
procedure TfrmMain.btn1Click(Sender: TObject);
begin
ModuleInstance1 := LoadPackage('Package1.bpl');
end;//---------------------------------------------------------------
//将 Package 中的 Form1 带出
//---------------------------------------------------------------
procedure TfrmMain.btn2Click(Sender: TObject);
var
frm : TcustomForm;
begin
frm := CreateFormByClassName('TForm1');
try
frm.ShowModal;
finally
frm.Release;
end;
end;//---------------------------------------------------------------
//释放 Package
//---------------------------------------------------------------
procedure TfrmMain.btn3Click(Sender: TObject);
begin
UnloadAddInPackage(ModuleInstance1);
end;//---------------------------------------------------------------
//自订函式 - CreateFormByClassName() , 建立 Form
//---------------------------------------------------------------
function TfrmMain.CreateFormByClassName(const ClassName: string): TCustomForm;
var
AClass: TPersistentClass;
begin
AClass := GetClass(ClassName);
if AClass=nil then exit;
Result := TComponentClass(AClass).Create(Application) as TCustomForm;
//或 Result := TCustomForm(TComponentClass(AClass).Create(Application));
end;//---------------------------------------------------------------
//自订函式 - CreateDataModuleByClassName() , 建立数据模块
//---------------------------------------------------------------
function TfrmMain.CreateDataModuleByClassName(const ClassName:string): TDataModule;
var
AClass: TPersistentClass;
begin
Result := nil;
AClass := GetClass(ClassName);
if AClass=nil then exit;
Result := TComponentClass(AClass).Create(Application) as TDataModule;
end;//---------------------------------------------------------------
//自订函式 - UnloadAddInPackage() , 释放 Package
//---------------------------------------------------------------
procedure TfrmMain.UnloadAddInPackage(ModuleInstance: HMODULE);
var
i: Integer;
M: TMemoryBasicInformation;
begin
for i := Application.ComponentCount - 1 downto 0 do
begin
VirtualQuery(GetClass(Application.Components[i].ClassName), M, SizeOf(M));
if (ModuleInstance = 0) or (HMODULE(M.AllocationBase) = ModuleInstance) then
Application.Components[i].Free;
end;
//下面这两个函式应该是只要取其中一个呼叫即可
UnRegisterModuleClasses(ModuleInstance); //直接注销 Package
UnloadPackage(ModuleInstance); //间接注销 , 呼叫 Package 中 的 finalization
end;
end.
Project CHQCost.exe raised exception class EFilerError with message 'Aclass named TdxTreeListColumn already exists'在工程的Packages->Build with runtime packages加入了pkgFormReg(注册包)
主界面中加载包如下:
m_hDemoPak := LoadPackage('pkgBaseForm.bpl');跳出上面的错误,如何解决呀
pkgBaseForm.bpl,pkgFormReg.bpl编译没出错;并确认pkgFormReg.bpl没问题