delphi 主程序调用bpl非模式MDI窗口问题。
delphi 主程序调用bpl非模式MDI窗口,也就是Show
主程序 和 窗口 是mdi的关系
打开窗口 嵌入在主程序的框框中
现在要实现的是 点击了这个窗口后 如果再点击 就不能重复show出来
如果在同一个窗口中 那好实现 有现成的方法可以找到 如果存在 就show出来即可
可是通过bpl窗口 就找不到了 我用了 findwindow函数 也不行
还请大家直接
主程序调用bpl窗口代码如下:
procedure TfrmMain.miDD_DDClick(Sender: TObject);
type
TLoadBpl = procedure(App: TApplication; RConnectDB: TRConnectDB; TeacherID: string; Right: TStringList); stdcall;
var
BplHandle: THandle;
LoadBpl: TLoadBpl;
FarProc: TFarProc;
begin
if MDIExist('frmDD') then Exit;
BplHandle := LoadPackage('DD.bpl');
if BplHandle <> 0 then
try
FarProc := GetProcAddress(BplHandle, PAnsiChar('ShowForm'));
if FarProc <> nil then
begin
LoadBpl := TLoadBpl(FarProc);
LoadBpl(Application, RConnectDB, TeacherID, Right);
end
else
ShowMessage('过程ShowForm没有找到');
except
UnloadPackage(BplHandle);
end
else
ShowMessage('DD.bpl' + '文件不存在');
end;
bpl对外函数如下:
procedure ShowForm(App: TApplication; RConnectDB: TRConnectDB; TeacherID: string; Right: TStringList);
begin
Application := App;
with TfrmDD.Create(Application.MainForm, RConnectDB, TeacherID, Right) do
begin
try
Show;
except
Free;
end;
end;
end;
这里RConnectDB就是个记录类型,存储数据库的连接信息
还请大家帮忙 谢谢。。
[解决办法]
with TfrmDD.Create(Application.MainForm, RConnectDB, TeacherID, Right) do
--------------------------------------
如果是嵌入到MainForm或MainForm作为拥有者, 都是可以获得的TfrmDD的实例化对象的