今天我對包中的幀有個疑問。 我已經包含一個簡單的框架包:Delphi創建包中的幀
unit fraMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TFrame1 = class(TFrame)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
initialization
RegisterClass(TFrame1);
finalization
UnRegisterClass(TFrame1);
end.
我已經創建了包,並使用它的一個新的projexct。該項目有一個簡單的形式,它的代碼是這樣的:
unit main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus,
System.Actions, Vcl.ActnList, Vcl.PlatformDefaultStyleActnCtrls, Vcl.ActnMan,
Vcl.StdCtrls;
type
TfrmMain = class(TForm)
mnuMain: TMainMenu;
mnuFile: TMenuItem;
mnuModuli: TMenuItem;
mFilCloseModules: TMenuItem;
mModModulo1: TMenuItem;
mModModulo2: TMenuItem;
N1: TMenuItem;
mFilExit: TMenuItem;
actManager: TActionManager;
actExit: TAction;
actModulo1: TAction;
actModulo2: TAction;
procedure actExitExecute(Sender: TObject);
procedure actModulo1Execute(Sender: TObject);
private
FPackageHandle: Integer;
public
{ Public declarations }
end;
const
DIRPACK1 = 'C:\Users...';
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ Chiusura applicazione }
procedure TfrmMain.actExitExecute(Sender: TObject);
begin
Application.Terminate;
end;
procedure TfrmMain.actModulo1Execute(Sender: TObject);
var
AClass: TClass;
AFrame: TFrame;
begin
if FPackageHandle = 0 then begin
FPackageHandle := LoadPackage(DIRPACK1 + 'Pack_01.bpl');
AClass := GetClass('TFrame1');
if AClass <> nil then begin
end;
end;
end;
end.
凡DIRPACK1是在BPL是路徑。 在「actModulo1Execute」操作中,我想創建框架。正如你所看到的,我得到了這個類,但在我不知道如何實例化框架之後。 哪個是創建框架的方式?
你爲什麼要這樣加載軟件包?這是你的根本問題。動態加載它並且您無權訪問這些類型。你爲什麼不靜態加載它?然後你所有的問題都消失了。你爲什麼不停止使用軟件包,讓你的生活更輕鬆?請注意'GetClass('TFrame1')'將查找調用的可執行文件,而不是您的包。 –
嗨大衛,我的意圖是實現一個模塊化應用程序,所以一些功能可以爲一組用戶和其他組提供一些用戶和其他人。爲此,我認爲創建每個包含所需功能的sone包。 – Eros
這是一個非常艱鉅的方式來做到這一點。我不會把動態加載的軟件包視爲適合的目的。 –