DLL中的Forms问题,大家来看一下啊!!

DLL中的Forms问题,大家来看一下啊!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208104302104.html
我在窗口的panel中调用了一个dll文件中的窗口,调用是一切正常的,但要加  
  Panel1.updatecontrolstate窗口才能正常的显示出来。如果我的dll窗体中用了pagecontrol,问题就出现了,当按上面的tab切换时,   panel的显示不会发生变化,除非再次调用Panel1.updatecontrolstate。   关键是这个语句怎么加,加在什么地方?大家可以尝试一下。  
   
 

你跟踪以下就知道了,Panel1.updatecontrolstate,实际上是给vcl发送消息,  
  updatecontrolstate发送的是cm_base+25;  
   
  所以要么你在本地窗口切换的时候sendmessage,要么在dll窗口中的onpaint事件里  
  写入.  
   
  //不知道对不对,楼主看看

我的子窗口代码:  
  function   CreateDLLForm(myAPP:TApplication;myScr:TScreen):TForm;  
  begin  
    Application:=myApp;  
    Screen:=myScr;  
    application.CreateForm(TfrmDllForm,frmDllForm);  
    result:=frmDllForm;  
  end;  
   
  我的主窗口代码:  
  myHandle:=LoadLibrary('dllproj.dll');  
  if   myHandle<>0   then  
      begin  
          @myProc:=GetProcAddress(myHandle,'CreateDLLForm');  
          if   assigned(myProc)   then  
                begin  
                    DLLForm:=myProc(Application,Screen);  
                    DllForm.Parent:=Panel1;  
                    DLLform.Show;  
                    Panel1.UpdateControlState;  
                end;  
      end;  
   
  我尝试过了,dll窗口的pagecontrol发生变化的时候,主窗口好像无法感知。

可以通过发消息的办法和主窗体通信!  
  SENDMESSAGE(APPLICATION。MAINFORM。HANDLE,WM-XXXX,XX,XX);  
  然后主窗体在对应的消息处理函数里面执行相应的操作!

前提是DLL要用主程序的APPLICATION

带包编译(vcl70.bpl,   rtl70.bpl)

to:newfang(传说中的MIC)  
  我本来想在dll窗口的pagecontrolchange中用sendmessage,结果,主程序根本就没收到,问题确实如你所说,主程序的application句柄得不到啊,所以这个发消息的动作写在什么地方还没研究出来

另外,我处理消息的过程是在主form中定义的,好像消息传给应用程序也不行,要传给form的句柄。

 
  在创建Dllform的时候把applicaton.handle作为DLLForm单元中的全局变量。  
  (或者直接传递panel1的handle);这样就可以给application或者panel1发送消息直接通信了。  
   
  消息在pagecontrol的onchange事件里发送即可。

现在的问题变成了DLL子窗口发消息时怎样知道主窗口的句柄,不是应用程序的,  
 

转载于:https://www.cnblogs.com/delphi2007/archive/2008/09/23/1296482.html

星空组网 vs 蒲公英 vs Tailscale:2024年国内免费异地组网工具横评(含实测数据) 本文对2024年国内主流免费异地组网工具星空组网、蒲公英和Tailscale进行了深度横向评测。基于实测数据,重点分析了三者在P2P成功率、中继延迟、传输速度及稳定性方面的表现,为中小企业、远程办公及个人开发者提供了清晰的选择指南。星空组网在国内网络环境下展现出优秀的平衡性。 阅读详情

相关推荐

delphi的调用Dll中的窗体的范例和源码

Exe调用DllForm 的例子 可以传入字符串,返回字符串,包含全部源代码

將窗体加入到PageControl中成为一个TabSheet

1:如果是MDIChild,在子窗口中重載這個函數:*.hvoid __fastcall CreateParams(TCreateParams& Params);*.cppvoid __fastcall TForm2::CreateParams(TCreateParams& Params){  TForm::CreateParams(Params);  Params.Style=WS_CHILD|

Compile failed 3035

MATLAB/Simulink扩频通信系统仿真:BPSK/QPSK调制与误码率计算

内容概要:本文详细介绍了如何使用MATLAB/Simulink进行扩频通信系统的仿真,涵盖了BPSK和QPSK调制、伪随机序列(如m序列、Gold序列、Walsh码)的生成、信号波形图绘制以及误码率计算。文中提供了具体的代码实现,包括m序列生成、调制方式的选择、成形滤波器的应用、Gold序列生成、误码率计算的方法,并展示了如何通过GUI界面进行交互式仿真。此外,还讨论了不同信噪比条件下的性能评估。适合人群:具有一定MATLAB基础的通信工程学生、研究人员和技术爱好者。使用场景及目标:①理解和掌握扩频通信的基本原理及其在MATLAB中的实现;②通过具体代码实现加深对BPSK和QPSK调制的理解;③利用GUI界面进行交互式仿真实验,提高实际操作能力。其他说明:本文不仅提供详细的代码片段,还分享了许多实用技巧,如矩阵运算优化、GUI设计心得等,帮助读者更好地完成扩频通信系统的仿真。

Delphi使用pageControl实现镶嵌窗体

原文链接 Delphi使用pageControl实现镶嵌窗体 千里之行_12 2017-05-06 23:02:40 浏览46 评论0 函数 HTTPS form Create delphi pageControl 镶嵌窗体 摘要: Delphi使用pageControl实现镶嵌窗体 开发时需要把原来的几个功能集中整合到一个窗体,使用frame要重新

bystarlight的博客 5982

system.windows.forms.pocketpc.asmmeta.dll system.windows.forms.ni.dll system.windows.forms.dll sy

以上只是通用的运行库dll处理方式,如果你遇到缺失文件是第三方的软件文件,那么就需要下载到属于这个程序所匹配的版本的文件,然后将这个文件复制到这个程序的安装目录下才能解决问题。如果我们遇到关于文件在系统使用过程中提示缺少找不到的情况,如果文件是属于运行库文件的可以单独下载文件解决,但还是建议安装完整的运行库,可以尝试采用手动下载替换的方法解决问题!文件下载完成后,下方列表会有很多个不同版本的文件,这里所有文件都是免费可下载的,我们根据自己所需要的版本文件,点击右边的“打开”,这样就找到了下载的文件。

qqtban的博客 254

【Unity】使用 System.Windows.Forms问题

因为最近开发需要用到使用 Windows 自带的窗口打开、文件选择等功能,然后兜兜转转需要使用System.Windows.Forms 这个库。这个库在 WinForm 里是很常见的,但是要在 Unity 里使用,并打包出来还是有些坑的。

魔术师Dix的博客 7855

启动应用程序出现System.Windows.Forms.DataVisualization.Design.dll找不到问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.Forms.DataVisualization.Design.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.

wbcmbfy的博客 1056

启动应用程序出现System.Windows.Forms.dll找不到问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.Forms.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.

wbcmbfy的博客 1263

vs2019 System.Windows.Forms.dll

vs 2019找不到using System.Windows.Forms; 下载一个System.Windows.Forms.dll 1.解决方案资源管理器,点击项目文件(如图中的hello) 2.右键-添加-项目引用-浏览,找到下载的文件添加进去 3.打勾-点击确定 ...

qq_48257021的博客 3715

Unity打包程序System.Windows.Forms.dll

System.Windows.Forms.dll打包报错出现的问题如何解决1. 重新找到dll文件2.放入unity项目中3.Player Setting 出现的问题 在unity中build项目时,出现报错:The Assembly System.Deployment is referenced by System.Windows.Forms ('Assets/Plugins/System.Windows.Forms.dll'). But the dll is not allowed to be inc

LLLQQQismmmmme的博客 5207

【unity导入dll】System.Windows.Forms.dll

System.Windows.Forms.dll

好好学习天天向上 277

Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)

switch (MsgBoxBase.Show("Chinar,是 | 否,灯泡", GetType().Name, WinForms.MessageBoxButtons.YesNo, WinForms.MessageBoxIcon.Information))MsgBoxBase.Show("Chinar,OK按钮,警告", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Warning);print("对");

GarFe的博客 3718

PageControll加入子窗体

PageControll加入子窗体 一、子窗体 1、FormStyle:=fsNormal; 2、WindowState := wsMaximized;  3、BordStyle := bsNone; 4、Option-Forms设置子窗体:Available forms 5、FormClose事件 procedure TShowPathFrm.FormClose(Sender: TObject;...

lyhoo163的专栏 5011

Delphi 停靠技术的应用2(窗体之间的相互停靠,引入宿主窗体)

Delphi的可停靠窗体间可以相互停靠,而且花样还很多,可以停靠成并排的,也可以停靠成PageControl样式的,两个可停靠窗体合并后的窗体又可以再和别的可停靠窗体合并,形成树状。下面来介绍这方面的技术。   一、基础知识介绍 1、CM_DOCKCLIENT消息和TC

xiongmao000738 5508

012.Delphi插件之QPlugins,多实例内嵌窗口服务

这个DEMO中主要是在DLL中建立了一个IDockableControl类,并在DLL的子类中了具体的实现方法。 在主程序exe中,找到这个服务,然后调用DLL的内嵌方法,把DLL插件窗口内嵌到主程序中。 界面如下 DLL代码如下: unit Frm_Dll; interface uses Winapi.Windows, Winapi....

weixin_30346033的博客 236

013.Delphi插件之QPlugins,模块化代码示例

这个DEMO的是一个定义了一个窗体插件接口,把其他窗口注册到这个窗体插件接口中。主程序运行起来,就遍历一下窗体插件接口,把每个窗体内嵌到对话框中 运行效果如下 主窗口代码如下 unit Frm_Main; interface { 本程序演示了如何使用QPlugins来做模块间的松散耦合,使用了Execute来传递,实际上 也可以约定接口直接调用...

weixin_30346033的博客 334

使用Raize实现Form嵌入PageControl中

自己的demo, 备忘! unit Unit6;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, ToolWin, Unit7, RzTabs;type  TForm6 = class

火龙岛 5970

DLL中接收系统消息的办法

        程序中需要在DLL中接收系统消息,在网上搜了搜,总结出两种方法:         1. 建立一个隐藏窗口         在程序开始的时候创建一个隐藏窗口,注意这个窗口必须是无模式窗口,这样才能隐藏起来不干扰正常操作。在窗口中添加消息响应函数即可。           2. 全局钩子函数          这个办法暂时没有

silvervi的专栏 2338
上一篇: 窗口的隐藏与显示问题
下一篇: twebbrowser无法屏蔽flash的右键??
aibi9196
博客等级 码龄10年 3粉丝 283原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值