F
fwd
Unregistered / Unconfirmed
GUEST, unregistred user!
一般窗体融合非常简单: 如 Form2融合到 MainForm中的 Panel中,只须设置MainForm.panel1.DockSite:=True;Form2.DragMode:=dmAutomatic;Form2.DragKind:=dkDock;运行时,Form2.show后,将其拖到Panel中,即实现融合.没有问题, 很正常!以下是我融合DLL中窗体部分代码:unit Main; ... private { Private declarations } ITree:IDBTree; Form:TForm; end; function CreateDBTree(H:THandle; {有其它参数...} ):IDBTree; stdcall;external 'DBTree.DLL';implementationprocedure TForm1.FormShow(Sender: TObject);begin IF ITree=Nil then begin ITree:=CreateDBTreeForm(Application.Handle,{其它参数...} ); Form:=ITree.GetForm; //获得窗体变量 end;end;procedure TForm1.DockedClick(Sender: TObject); //停靠begin //此处是 Form 到 Panel 融合代码 Form.DragMode:=dmAutomatic; Form.DragKind:=dkDock; Form.ManualDock(Panel1); Form.Visible:=True; //此句无用 Form.Show; end;procedure TForm1.UnDockedClick(Sender: TObject); //取消var Rect:TRect; //此过程可正常执行。begin Rect.Top:=500; Rect.Left:=500; Rect.Right:=800; Rect.Bottom:=1000; Form.ManualFloat(Rect);end; 出现问题: 1.Form.show后用鼠标怎样拖动都不能融合到Panel中.2.DockedClick执行后,是融合,有双线但看不到Form中内容.3.停靠、取消各执行一次后,再执行停靠,或关闭程序时出现 "DLL中存储地址违例!"不知为何呀,请大家帮我解决!