EXE中调用融合DLL窗体,一直在EXE大小变化的时候,DLL窗体不会有变化。
现解决了记录下,供大家参考,有更加好的方式也贴出来让大家分享分享。
procedure tabSheetOnResize(Sender: TObject);
procedure TForm1.tabSheetOnResize(Sender: TObject);
begin
if Sender is TRzTabSheet then
begin
// tabSheet发生大小时 发送消息给 子窗体 子窗体大小tabSheet变化
if TRzTabSheet(Sender).Tag <> 0 then
begin
SendMessage(Integer(TRzTabSheet(Sender).Tag), WM_USER + 100,
TRzTabSheet(Sender).ClientWidth, TRzTabSheet(Sender).ClientHeight);
end;
end;
end;
----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
AddFrmTrue
end;
function TForm1.AddFrmTrue: Boolean;
var
tpage:TRzTabSheet;
aFormClass : TFormClass;
begin
tpage := TRzTabSheet.Create(RzPageControl1);
tpage.PageControl := RzPageControl1;
aFormClass := ShowForm(Application,tpage);
aForm := aFormClass.Create(tpage);
windows.SetParent(aForm.Handle,tpage.Handle);
aForm.Show;
tpage.Tag:= aForm.Handle;
tpage.Caption:=IntToStr(tpage.Tag) ;
RzPageControl1.ActivePage:=tpage;
tpage.OnResize:=tabSheetOnResize;
tpage.OnResize(tpage);
end;
子窗体
DLL
procedure ChangeMsg(var msg: TMessage); message WM_USER + 100;procedure TFormA.ChangeMsg(var msg: TMessage);
begin
self.Width := msg.WParam;
self.Height := msg.LParam;
SetWindowPos(self.Handle, 0, 0, 0, self.Width, self.Height, SWP_NOSIZE);
end;
现解决了记录下,供大家参考,有更加好的方式也贴出来让大家分享分享。
procedure tabSheetOnResize(Sender: TObject);
procedure TForm1.tabSheetOnResize(Sender: TObject);
begin
if Sender is TRzTabSheet then
begin
// tabSheet发生大小时 发送消息给 子窗体 子窗体大小tabSheet变化
if TRzTabSheet(Sender).Tag <> 0 then
begin
SendMessage(Integer(TRzTabSheet(Sender).Tag), WM_USER + 100,
TRzTabSheet(Sender).ClientWidth, TRzTabSheet(Sender).ClientHeight);
end;
end;
end;
----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
AddFrmTrue
end;
function TForm1.AddFrmTrue: Boolean;
var
tpage:TRzTabSheet;
aFormClass : TFormClass;
begin
tpage := TRzTabSheet.Create(RzPageControl1);
tpage.PageControl := RzPageControl1;
aFormClass := ShowForm(Application,tpage);
aForm := aFormClass.Create(tpage);
windows.SetParent(aForm.Handle,tpage.Handle);
aForm.Show;
tpage.Tag:= aForm.Handle;
tpage.Caption:=IntToStr(tpage.Tag) ;
RzPageControl1.ActivePage:=tpage;
tpage.OnResize:=tabSheetOnResize;
tpage.OnResize(tpage);
end;
子窗体
DLL
procedure ChangeMsg(var msg: TMessage); message WM_USER + 100;procedure TFormA.ChangeMsg(var msg: TMessage);
begin
self.Width := msg.WParam;
self.Height := msg.LParam;
SetWindowPos(self.Handle, 0, 0, 0, self.Width, self.Height, SWP_NOSIZE);
end;
解决方案 »
- 怎样通过外网连接内网的SQLSERVER数据库!
- 这样的过滤条件怎么写?
- 执行多条sql语句如何保证完整性。
- easy sql question
- 导出Excel文件格式,为什么只有退出程序,才能打开Excel,是否可以不退出就打开,超难!各位大侠帮忙!
- 巨难问题!!--Access动态建库,然后动态建表,内详!只要解决,马上给分!!
- 头痛,用ADO连接数据库,经常丢数据,怎么回事???
- 我怎么就不能把checklistbox我所选中的内容全部加入edit,而只能加入最后一个被选 中的呢?
- 窗体标题栏上的那个?帮助怎么使用?
- 关于:KILL UNIX进程的方法???
- 事件触发问题不明白,以前没这么做过。。
- 数据集怎么样才能过滤memo类型字段呢,求指教
不用每个dll窗口都处理这种消息。 是什么意思呢
不用每个dll窗口都处理这种消息。 是什么意思呢
你不是 都搞了WM_USER + 100这种消息。另,这种声明最好统一放一个位置,避免冲突。
不用每个dll窗口都处理这种消息。 是什么意思呢
你不是 都搞了WM_USER + 100这种消息。另,这种声明最好统一放一个位置,避免冲突。
procedure TForm1.tabSheetOnResize(Sender: TObject);
begin
if Sender is TRzTabSheet then
begin
// tabSheet发生大小时 发送消息给 子窗体 子窗体大小tabSheet变化
if TRzTabSheet(Sender).Tag <> 0 then
begin
SendMessage(Integer(TRzTabSheet(Sender).Tag), WM_USER + 100,
TRzTabSheet(Sender).ClientWidth, TRzTabSheet(Sender).ClientHeight);
end;
end;
end;
谢谢版主啊。我其实把这里修改一下:SetWindowPos(Integer(TRzTabSheet(Sender).Tag), HWND_TOP, 0, 0, TRzTabSheet(Sender).Width, TRzTabSheet(Sender).Height, SWP_SHOWWINDOW) ;SWP_NOSIZE换成 SWP_SHOWWINDOW就不用到DLL窗体里面去处理了。
没看明白这个参数
不用每个dll窗口都处理这种消息。 是什么意思呢
你不是 都搞了WM_USER + 100这种消息。另,这种声明最好统一放一个位置,避免冲突。
procedure TForm1.tabSheetOnResize(Sender: TObject);
begin
if Sender is TRzTabSheet then
begin
// tabSheet发生大小时 发送消息给 子窗体 子窗体大小tabSheet变化
if TRzTabSheet(Sender).Tag <> 0 then
begin
SendMessage(Integer(TRzTabSheet(Sender).Tag), WM_USER + 100,
TRzTabSheet(Sender).ClientWidth, TRzTabSheet(Sender).ClientHeight);
end;
end;
end;
谢谢版主啊。我其实把这里修改一下:SetWindowPos(Integer(TRzTabSheet(Sender).Tag), HWND_TOP, 0, 0, TRzTabSheet(Sender).Width, TRzTabSheet(Sender).Height, SWP_SHOWWINDOW) ;SWP_NOSIZE换成 SWP_SHOWWINDOW就不用到DLL窗体里面去处理了。
没看明白这个参数
这个API功能不错。学习了