读书人

请高手关于DLL的manualdock有关问题

发布时间: 2012-09-07 10:38:15 作者: rapoo

请高手求救,关于DLL的manualdock问题?谢了
DLL中的FORM DOCK不到主程序的tabsheet中,以下是DLL代码,不知道是什么原因?
function ShowForm(pnl1:TTabSheet) :Boolean ; export;
var
frm : TForm1;
begin
frm := TForm1.Create(Application);
frm.ManualDock(pnl1,nil,alClient);
frm.Show;
frm.WindowState := wsMaximized;
Result := True;
end;

exports
ShowForm name 'ShowForm';

[解决办法]
library Project1;

uses
ComCtrls, Forms,Controls,
SysUtils,
Classes;

{$R *.res}
function ShowForm(pnl1:TTabSheet) :Boolean ; export;
var
frm : TForm;
begin
frm := TForm.Create(Application);
frm.ManualDock(pnl1,nil,alClient);
frm.Show;
frm.WindowState := wsMaximized;
Result := True;
end;
exports
ShowForm name 'ShowForm';

begin
end.
[解决办法]
你的主程序与DLL的逻辑地址空间是不同的。主程序的TabSheet的指针是主程序中的逻辑地址,在DLL中访问此地址,只会是在DLL中查找定位。
若用接口的方式(主程序提供接口,DLL调用接口方法,参数用句柄),可解决此问题。

你的目的无非是想嵌入窗口,如果是想做成随意拖动设置窗口布局的话,最好是用BPL来封包各个窗口模块

读书人网 >.NET

热点推荐