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;
解决方案 »
- TDbGridEh控件中下拉列表与复选框的问题
- 一个关于dephi操作数据库的问题。
- 文件拷贝问题,急!!!
- Application.Terminate为什么会非法操作?
- ReportMachine3的数据字典里定义的变量,如何按日期预览出来?
- 如何使用ADOBE ACROBAT的WORD中使用打印方法可生成PDF文件
- 谁知道四国军旗的算法
- 小弟我有一个小想法
- 为什么我在delphi中stdcall调dll free的时候总是报错!怎么解决?
- adoquery的事务处理代码如何写?请给代码!连接MSSQL!有连接ADOCONNECTION
- 事件触发问题不明白,以前没这么做过。。
- 数据集怎么样才能过滤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功能不错。学习了