胖胖虫关于Delphi中窗口(表单)的自以为是的经验总结

Delphi实现图像识别制作外挂 最近应几个朋友的要求帮他们做一个QQ斗地主的外挂,于是就研究了下。(比较简单,希望大家不要笑化^_^)网上有做外挂文章,找了,看了,试着理解了,但水平有限,貌似不是很明白,但总的来说就三种1,封包技术(个人认为是最难的,但是效果出来是最好的,因为里面还涉及到解密技术所以个人认为是有些难度的,工作量达);2,内存扫描3,图像识别(个人认为是比较大众化的,也最容易实现的,但效果也是最差的,而且束缚比较 阅读详情

不能在模式表单中Release自己

Form1的一个方法中如下:

    var

        x:tform2;

    begin

        x:=tform2.CreateParented(Self.Handle);

        x.ShowModal;

    如果在Form2中的某个事件方法中使用Self.Release释放自己,则Form2消失了,Form1却再也不响应键盘和鼠标。如果改成以下这样也不行:

        x:=tform2.CreateParented(Self.Handle); (或 x:=tform2.Create(nil) )

        x.ShowModal;

        x.release;                (或x.Free)

将第2句改成 x.Show 以后一切正常。

结论:不能在模式表单中Release自己,

    原理:经代码追溯,发现表单是这样实现的:在 ShowModal 方法中重复检查消息和ModalResult属性值,直到符合条件后,再进行关闭自己的一系列动作。所以,如果在模式表单中调用Release或类似方法将引发混乱。要在模式表单中关闭自己,可以调用Close方法,或者将ModalResult属性设置为非零值。

显示模式表单后,该模式表单无法回到屏幕最前面

    还是上个问题的第一段代码,

    var

        x:tform2;

    begin

        x:=tform2.CreateParented(Self.Handle);

        x.ShowModal;

 

Form2显示后(其FormStyle属性=fsNormal时), 切换到操作系统中其它任务画面后

只有以下方法才能回到该程序画面(也就是让Form2回到屏幕最前面):

    1.选择"显示桌面"再点击任务栏上的该程序任务;

    2.点击Form1, 虽然Form1不能接收焦点, 但却导致Form2来到屏幕最前面;

    3.点击Form2的标题栏。

而以下方法无法让Form2回到屏幕最前面

    1.点击Form2的标题栏之外的区域, 这时虽然Form2被激活,却无法回到最前面;

    2.点击操作系统任务栏上的该程序任务

    3.通过任务管理器来切换到该程序

原因:几乎可以肯定是Delphi中的BUG。
解决办法

覆盖Form2 的WndProc方法,捕捉Wm_Activate消息,获取该消息后  SetWindowPos(Self.Handle,HWND_TOP,

0,0,0,0,SWP_NOSIZE+SWP_NOMOVE);  该语句使得Form2回到前面来。

非模式表单要尽量避免使用 BsDialog 边框

2003.7.28

    还发现在Excel中, 用Delphi建立的非模式边框为 BsDialog 的表单也有同样情况,当切换到操作系统中其它任务后,再切换回来时,Excel很难显示出来,

不过,当显示出来时,其中的表单状态是正常的.

    所以, 非模式表单要尽量避免使用 BsDialog 边框,

消息响应的问题

    我覆盖了WndProc方法试图捕捉用户按下任意组合键中的Shift键,代码如下:

procedure TForm1.wndproc(var message: TMessage);

begin

  if message.Msg =WM_KEYUP then

    if GetKeyState(VK_SHIFT)=1   then

      ShowMessage('shift');

  inherited;

end;

    结果发现,每按两次组合键(例如Shift+1),GetKeyState才捕捉到一次,更要命的是,当上一次捕捉到Shift时,现在开始只按 1 不按Shift键,可GetKeyState却又每次都捕捉到Shift键。

结论:

无论是WndProc还是MainWndProc方法,其Message参数都是经过加工的,也就是说,有另外一个过程(这个过程是在运行时生成的,具体参考大富翁中的1267299号文章)响应了Windows消息,将该消息加工成TMessage结构后再传递给MainWndProc方法,这些加工后的消息已经和Windows的原始消息有所不同了。

KEIL-MDK代码美化神器:AStyle配置全攻略(附常用参数详解) 本文详细介绍了如何在KEIL-MDK中配置和使用AStyle代码格式化工具,包括基础参数设置、高级格式控制、团队协作方案以及KEIL深度集成技巧。通过合理的AStyle配置,开发者可以显著提升代码风格一致性,优化团队协作效率,特别适合嵌入式开发项目。 阅读详情

相关推荐

基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计与实现(附源码、仿真与计算书)

本文详细介绍了基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计方案。该设计利用STM32的高分辨率定时器(HRTIM)实现精确PWM控制,支持Buck、Boost和Buck-Boost三种工作模式自动切换,具备双向能量流动能力。通过PSIM仿真和Mathcad计算书进行参数优化,实测效率达95.8%,适用于新能源系统和电池管理等场景。

www00的博客 528

窗口置顶

Delphi 的 TForm.FormStyle 具有 fsStayOnTop 属性,但只是对其程序本身而言的,也就是说只在此应用程序本身的窗口中是前端显示的,其他的程序的窗口仍然可以覆盖此类型的窗口。这是因为此窗口的父窗口是 TApplication 。要让悬浮窗口独立的显示在

leon_kin的专栏 1269

抖音直播“卡黑屏”技术解析:从实现原理到平台风控与合规运营

在直播技术领域,视频流推送与实时互动是核心基础。其原理在于通过编码软件(如OBS)将音视频数据封装后,经由网络协议推送到服务器,再分发给观众。这项技术的价值在于支撑了实时、高并发的在线互动场景,是直播、在线会议等应用的基石。然而,在追求流量和互动的实践中,衍生出一些非常规操作,例如通过技术手段中断或控制视频流推送,仅保留音频和互动功能,以达到特定运营目的。这便涉及到了**卡黑屏**这一具体现象。它本质上是对直播流的人为干预,常与**流量博弈**和**风险规避**等动机相关联。从工程实践角度看,实现方式多样,

weixin_29895109的博客 1302

用Delphi制作个性化的菜单

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 1345

Eureka常见面试题总结

点击关注我的博客原文 Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移(来源springcloud中文网的介绍:https://www.springcloud.cc/)。下图总结了Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程: 流程说明:...

u012105931的博客 2万+

4、基于球面波展开的近场/远场变换技术解析

本文深入解析了基于球面波展开的近场/远场变换技术,涵盖坐标系统选择、截断测量处理、高级SWE方法及实际应用场景。重点介绍了广义SWE、全探头补偿、平移SNF测量(TSWE)等关键技术,结合吸收材料与导电地板系统的误差处理方案,系统总结了各类方法的优缺点与适用场景,并通过流程图和案例分析展示了技术应用路径。该技术在汽车、通信和航空航天领域的天线测量中具有重要价值,可显著提升测量效率与精度。

dell8的博客 255

Delphi 中Tform的visible属性详解

<br />如果设计时TForm的visible属性为true.则.创建此对象后,就会直接显示.且不会执行OnShow事件.切记.C++Builder亦同.

diligentcat的专栏 2504

QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)

这是一套QT5软件开发入门到项目实战的教程,并配套了所有的案例完整代码,方便QT初学者快速入门;文章里包含了QT常用的控件使用介绍、多媒体应用、线程、网络编程、蓝牙、串口、应用发布、嵌入式设备环境部署、Android环境部署等;目前一共写了19章,627页,后续也会持续更新。

5万+

一个漂亮的Delphi程序(Delphi在分形艺术中的应用)

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs;type  TBranchColor=record  r,g,b:Byte;  end;  TFormMain = class(TForm)    procedur

Xiaoke的专栏 1295

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2049

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

zhengzaifeidelushang的博客 3580

Delphi 不使用皮肤 搞定 漂亮单据界面

上面这个采用的是 TLBButton , RaizeEdit , DBGridEh 组合出来的效果 标准控件用了 Label , Shape , Panel , Form 就不用说了 这里是源码 /Files/apple1/3个控件搞定单据效果.zip 转载于:https://www.cnblogs.com/apple1/archive/2010/04/26/17...

dianxunzhang1095的博客 434

3. NVIDIA GPU Xid 常见错误码全解析、故障定位与标准化处理方案

摘要: Xid是NVIDIA显卡驱动记录的硬件/软件异常日志,通过dmesg等工具可获取,包含PCI总线、GPU编号、故障码等信息,是诊断显卡问题的核心依据。Xid故障分为四类:应用程序类(如代码错误,Xid13/31)、显存ECC硬件类(如显存损坏,Xid48/63)、链路/供电温控类(如PCIe故障,Xid74/79)和GSP固件类(如静电干扰,Xid119/154)。排查流程包括日志采集、软件修复(如重启进程、升级驱动)、硬件检查(如PCIe链路状态)及断电复位(针对GSP故障)。预防措施包括监控EC

jundao1997的专栏 674

胖胖虫关于Delphi中图形图像的自以为是的经验总结

图形大小Delphi中虽然插入图像(特别是无压缩的BMP)会导致运行文件变得很大,但是通过InstallShield得到的安装包会自动进行压缩,所以插入图像时一般不用担心其是否压缩过。关于透明 经过观察发现,DELPHI中的一些图形按钮其拥有的位图会自动变成透明的,它似乎进行这样的操作:凡是与第一个像素的颜色相同的像素点都被设定为?透明色?。    2003.7.28:TBitMa

fatbug的专栏 1373

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

胖胖虫关于Delphi中文件和注册表的自以为是的经验总结

文件操作TFileStreamRead和Write方法调用如下:  Write(Var Buffer; Count : integer) , 其中Buffer是指内存中一个真实的地址, Read方法将读取文件内容放到该位置上,而Write方法从该位置读取内容写入文件. 所以: 如果是操作 AnsiString 类型变量, 则: Write(xString[1], ...

fatbug的专栏 1245

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux 在文本中怎么复制粘贴快捷键,Linux下复制粘贴快捷键

css3&plus;visbibilty解决淡入淡出问题.fade{ visibility: hidden; opacity: ; transition: all .5s; } .fade.on { visibility: visible; opacity ...转:Delphi 回调函数及例子http://anony3721.blog.163.com/blog/static/511974...

weixin_42502040的博客 165

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最容易看懂的红黑树演变

前言      红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。      本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解了过

w 859

Delphi 绘图相关Demo

RAD Studio 10.2.3 测试√ 说明:下面的内容启发来源于 万一老师的博客,没事多翻一翻万一老师的博客还是会有很多收货的 程序界面 主要单元 [ uFrmDrawingFunction.pas ] unit uFrmDrawingFunction; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, V

小印丶的笔记 1139

手工修改窗体继承

1.手工修改窗体继承时,怎样让其父类的所有控件显示(在设计时)? File -> New -> Form,新建一个form,在form的单元文件中修改 TForm1 = class(TForm) 为; TForm1 = class(TFatherForm) //TFatherForm为被继承的窗体 不要忘记 uses TFatherForm的单元文件, 再在Form窗体上弹...

weixin_30929011的博客 216

delphi浮动窗口

像Photoshop一样的面板窗体,面板窗体与主窗体都处于激活状态。 用Spy & Capture查看一下就不难发现,这些面板窗体的Parent Window都是Photoshop的主窗体(以Photoshop CS为例,主窗体的Handle是001906D8,所有面板的Parent Window指向的就是001906D8),而一般我们创建的窗体的Parent是为None的。 下面的代码就...

weixin_33755847的博客 305
上一篇: 从现在起,我将学习Delphi过程中的经验和自以为是的结论放上来,如果有错误,请朋友们不吝指正,丢鸡蛋吧!
下一篇: 胖胖虫关于Delphi中图形图像的自以为是的经验总结
fatbug
博客等级 码龄24年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值