Articles of delphi xe2

检测forms最小化的所有情况

我需要检测表单何时最小化(隐藏覆盖表单)。 我拦截WM_SYSCOMMAND消息,如果我单击窗体的最小化button,它工作正常,但如果我使用[Windows] + [M]这个事件似乎不会被解雇。 另外,在这种情况下, WM_ACTIVATE和WM_ACTIVATEAPP不会被触发。 我可以使用什么事件,还有其他什么情况需要检测?

什么外部事件触发TCustomForm.RecreateWnd?

一个特定的VCL应用程序崩溃,很less,显然是自发的,我强烈怀疑这是因为主窗体的窗口句柄正在重新响应来自操作系统的一些外部触发器。 我确实知道, 如果主窗体的窗口句柄改变了,那么肯定会出现麻烦(因为后台线程将消息发送到这个句柄)。 但是我想知道如何重现这个bug,然后才开始修改代码,以便修复它,如果只是这样,我可以确认这是崩溃的可能原因,症状符合那些报告,并且代码修改确实解决了这个问题。 (另外,如果操作系统没有办法触发TCustomForm.RecreateWnd的调用,我需要find一些其他的崩溃解释。是的,我可以将CM_RECREATEWND发布到主窗体,但这只是个问题。 (我知道将消息从后台线程发布到VCL线程的正确方法是使用AllocateHWnd纯粹为此目的创build一个隐藏的消息窗口 – 这是我build议的修复。) 我看到了TCustomListView的后代类似的错误,其中TCustomListView是通过将桌面样式从Windows XP更改为Windows Classic来触发的。 但我还没能find这样的方法来触发TCustomForm上的TCustomForm 。 (我花了相当多的时间阅读VCL代码,我一定会错过一些东西。) 概要: 在操作系统的刺激下,VCL最终在TCustomForm上调用TCustomForm ? (如果这有什么不同,我对Windows 7特别感兴趣。) 如果有这样的操作系统的刺激,我可以certificate是否导致观察到的症状。 如果确切地说不是那么我可以certificate窗口娱乐不是原因。

为什么CreateProcess给出错误193(%1不是有效的Win32应用程序)

下面的代码无法启动文档。 我得到错误193(%1不是有效的Win32应用程序)。 启动可执行文件正常工作。 这些文件正确关联,双击时会启动相应的应用程序。 我search了SO和其他地方的错误消息,createprocess的东西等(例如为什么CreateProcess在Windows Server 2003 64位失败?我知道引用命令行。 这是Win7 64位VMWare VM中的Delphi XE2(Update 4)Win32应用程序。 在主机(Win7 64位)和32位XP虚拟PC虚拟机上,代码也失败。 应该在Win7 VM(Excel 2003和Crimson Editor)中启动的应用程序是32位的。 从IDE启动或独立运行testing应用程序时都会发生故障 它曾经是Delphi2007的代码,编译的D2007应用程序,这个代码来自任何地方的罚款。 代码有什么问题? 这几乎就像我忽略了一些非常明显的东西。 提前致谢, 一月 procedure StartProcess(WorkDir, Filename: string; Arguments : string = ''); var StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; lCmd : string; lOK : Boolean; LastErrorCode: Integer; begin FillChar( StartupInfo, SizeOf( TStartupInfo ), […]

如何检测表单何时被最大化?

我想要检测何时将最大化表单来保存某些设置(与大小和位置无关)并修改大小和位置。 有一个通用的方法来做到这一点? 我试图捕捉像这篇文章中的WM_SYSCOMMAND消息。 它可以很好地用于从菜单最大化,通过最大化button,但是当我按下WIN + UP键时,它不会被触发。 有没有人知道如何捕捉最大化事件包括WIN + UP键盘的情况下的普遍方式? 谢谢

如何国际化delphi应用程序

可能重复: 翻译申请 国际化我用delphi xe2编写的应用程序的最佳方式是什么? 我已经看到了stringtable资源,但是我很担心,因为我有这样的感觉,那就是实现可能是耗时费力的。 还有其他同样有效的方法来做到这一点?