问题关键字 动态编译;静态编译问题时这样产生的:
主程序调用了一个动态库,在动态库中创建了一些控件(一个TPanel,一个TSplitter),控件的Parent被指向了主程序的MainForm,当主程序和动态库都是动态编译的时候一切都很正常Splitter可以正常拖动,一切都很好; 然而,主程序和动态库都静态编译的时候,问题出现了,Splitter的拖动图标可以显示,但是拖动的时候出现“Control '' has no parent window ”(说Splitter没有ParentWindow)而弹出Bug,郁闷好久了,谁能解释这是什么原因?
主程序调用了一个动态库,在动态库中创建了一些控件(一个TPanel,一个TSplitter),控件的Parent被指向了主程序的MainForm,当主程序和动态库都是动态编译的时候一切都很正常Splitter可以正常拖动,一切都很好; 然而,主程序和动态库都静态编译的时候,问题出现了,Splitter的拖动图标可以显示,但是拖动的时候出现“Control '' has no parent window ”(说Splitter没有ParentWindow)而弹出Bug,郁闷好久了,谁能解释这是什么原因?
自己创建的对象都必须加这句。
Begin
With TPanel.Create(AppMain.MainForm) do
Begin
parentFont := False;
Parent := Application.MainForm;
Width := 300;
Align := alLeft;
End;
With TSplitter.Create(AppMain.MainForm) Do
Begin
Parent := AppMain.MainForm;
Align := alLeft;
Left := 300;
End;
End;
Application.Handle 我在 进入Dll之后(DLL_PROCESS_ATTACH)已经作了设置,退出的时候(DLL_PROCESS_DETACH)复原,另外你所说的windows.SetParent(h
WndChild, hWndNewParent)在这里是不能使用的,因为此时的hWndChild没法得到
Begin
With TPanel.Create(AppMain.MainForm) do
Begin
parentFont := False;
Parent := Application.MainForm;
Width := 300;
Align := alLeft;
End;
With TSplitter.Create(AppMain.MainForm) Do
Begin
Parent := AppMain.MainForm;
Align := alLeft;
Left := 300;
End;
End;Name都等于空 没有报错?Control '' already exists
Parent为空也就说明 执行Parent := Application.MainForm; 时,MainForm还没有创建
Build with runtime packages 可以自主搜索所需的bpl包
Width = 200;
Height = 225;
ParentColor = false;
等属性的设置都会引起控件的重绘,在构造的时候,其Parent是不存在的,或者说是这种窗体包含关系还没有形成的,尽管你给Parent赋值了。
var
frm,frm1 : TForm;
Begin
frm := TPanel.Create(AppMain.MainForm);
frm.parentFont := False;
frm.Parent := Application.MainForm;
frm.Width := 300;
frm.Align := alLeft;
frm1 := TSplitter.Create(AppMain.MainForm); frm1.Parent := AppMain.MainForm;
frm1.Align := alLeft;
frm1.Left := 300; End;
试试
var
frm :TPanel;
frm1 : TSplitter;