我用动态生成菜单,所有子窗体都是一个输出函数,
动态调用DLL的方法产生子窗体的实例:procedure TMAINF.Myclick(Sender: Tobject);
var
TmpQuery: Tquery;
Pstr: Pchar;
xhStr,DllNamestr: string; //菜单的名字是从CBBDIR的[XH]+'N'得到的
DllHandle: THandle;
ProcAddr: FarProc;
DllFormShow: T_DllFormShow;
i: integer;
begin
LockControl(MainF, True);
try
TmpQuery := Tquery.Create(nil);
TmpQuery.DatabaseName := dm.Name;
xhstr := (sender as TmenuItem).name;
xhstr := copy(xhstr, 2, length(xhstr));
TmpQuery.SQL.Text := 'SELECT DLLNAME,SHOWING FROM CBBDIR WHERE XH= ' + xhstr;
TmpQuery.Open;
if TmpQuery.Fields[1].AsString = '1' then
abort
else
begin
Pstr := Pchar(TmpQuery.Fields[0].AsString);
DllHandle := LoadLibrary(Pstr);
ProcAddr := GetProcAddress(DllHandle, 'DllFormShow');
if ProcAddr <> nil then
begin
DllFormShow := ProcAddr;
DllFormShow(Application, MainF);
end;
end;
finally
DllNamestr := TmpQuery.Fields[0].AsString;
LockControl(MainF, False);
end;
end;
子窗体不显示标题栏:procedure Tgsf.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style and (not WS_CAPTION) ;
end;
当我打开多个子窗体时,主窗体的标题栏能正确显示最后一次打开的子窗体的标题,
但关闭最上面一个子窗体时,主窗体不能正确显示下一个子窗体的标题。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货