有什么方法可以知道我们正在使用哪个版本的Windows?我需要在WindowsXP中将图像设置为TExtButton,而在Windows7中则没有图像。它应该自动完成。 最佳答案 检查SysUtils.Win32MajorVersion(在Delphi7中,您需要将SysUtils添加到您的uses子句中,如果它不存在的话-更高版本会自动添加)。最简单的方法是像往常一样在IDE中分配Glyph,如果您在Vista或更高版本上运行,则清除它:ifSysUtils.Win32MajorVersion>=6then//WindowsVis
首先,抱歉我的英语不好......我想使用命名空间扩展(NSE)将虚拟文件夹添加到Windows资源管理器,并且我希望用户能够打开此虚拟文件夹以探索某些路径(例如,c:\test).我如何使用Delphi执行此操作?谢谢。 最佳答案 开始的地方是MSDN文档:IntroductiontotheShellNamespace.当然,这是从C++的角度编写的,但将其映射到Delphi并不难。此类任务的另一个优秀资源是代码项目。例如:TheCompleteIdiot'sGuidetoWritingNamespaceExtensions-Pa
我需要在编辑框改变大小时更新它周围的项目。TEdit没有OnResize事件。编辑框可以在不同时间调整大小,例如:在代码中更改宽度/高度表单缩放以进行DPI缩放字体已更改我确定还有其他我不知道的。我需要一个事件来知道编辑框何时改变了它的大小。有没有我可以将编辑框子类化并抓取的Windows消息? 最佳答案 OnResize声明为TControl的protected属性。您可以使用所谓的“cracker”类公开它。不过,这有点像hack。typeTControlCracker=class(TControl);...procedureT
我需要知道我的应用程序何时收到WM_SETTINGCHANGE消息(以前称为WM_WININICHANGE)。问题是TApplication中的消息泵在我有机会看到它之前将它发送到黑洞(默认处理程序):procedureTApplication.WndProc(varMessage:TMessage);...beginMessage.Result:=0;forI:=0toFWindowHooks.Count-1doifTWindowHook(FWindowHooks[I]^)(Message)thenExit;CheckIniChange(Message);withMessagedoc
是否可以模仿loadlibrary函数?我想从BLOB字段加载一个库而不先将其写入临时文件,我需要一个不依赖于特定版本的delphi编译器或Windows,并且不触发防病毒软件的解决方案。 最佳答案 是的,你可以,而且你不需要loadlibrary从内存中执行代码-你需要使用VirtualAlloc分配内存函数PAGE_EXECUTE旗帜组更新:这是从内存中为32位Delphi执行的代码的快速演示-我只测试了它是否有效:typeTIncMe=procedure(varI:Integer);varIncMeProc:TIncMe;pr
在Delphi中查看Windows.pas,我看到有几个签名作为LoadLibrary(A)或(W)用于加载特定模块。它们之间有什么区别?我是否可以相信始终为所有类型的Windows平台调用LoadLibrary? 最佳答案 WindowsAPI提供ANSI字符串(A)或Unicode字符串(W)。在内部,WindowsAPI都可用。但是,Delphi默认为其中之一,具体取决于Delphi的版本。许多其他Windows语言也这样做。该语言默认使用ANSI或Unicode字符串。在2009年之前的Delphi版本中,使用ANSIAPI
我想这个问题已经有人问过了,但我找不到适合我的解决方案。我在64位Windows7Ultimate下使用Delphi7。实际上,我开始在32位操作系统下编写应用程序,但后来更换了PC,所以现在是64位。在我的程序中,我使用注册过程和从Windows的PROGID值生成的许可证ID。不幸的是,它没有读取该值,似乎它正在寻找不同的文件夹,可能被Windows64重定向到32位注册表。你能帮我吗?这是我使用的代码:Registry:=TRegistry.Create(KEY_READOR$0100);tryRegistry.Lazywrite:=false;Registry.RootKey:
在我的应用程序的两个部分中,主窗体在错误的时刻获得焦点:错误1。在特定打印机表单中单击“确定”时。我打开FastReportsPDF预览-这是第一个弹出窗口。该弹出窗口不会单独显示在任务栏中。这种形式是模态的。然后我点击打印,这会打开另一个带有标准打印选项的窗口。然后我单击属性-打开驱动程序的特定形式。我更改双重打印设置。当我点击“确定”时,预览表单(1)应该获得焦点,但主表单被带到前面。因为预览窗体仍然是模态的,所以很难返回到预览窗体。只有随机点击,预览表单才会再次聚焦。错误2.单击或拖动此特定滚动框会聚焦主窗体此窗口处于事件状态。这是Windows任务栏中的一个独立窗口,不是模式窗
在DelphiDLL中需要建立调用者——可能是一个简单的“.exe”或一个DBMS运行时模块——这意味着它必须获得进程中正在运行的命令。我知道CmdLine不会工作,并且可能ParamStr(0),并且不能使用基于“主窗口”的技术,因为调用者有时没有窗口.我怀疑GetModuleHandle是起点,但需要帮助才能从那里到达正在执行的命令。 最佳答案 我创建了一个测试dll:libraryProject2;usesSystem.SysUtils,System.Classes,Vcl.Forms,Vcl.Dialogs,Winapi.W
我想在有人将文件放到特定控件(例如TMemo)时立即接受文件。我从这个例子开始:http://delphi.about.com/od/windowsshellapi/a/accept-filedrop.htm并像这样修改它:procedureTForm1.FormCreate(Sender:TObject);beginDragAcceptFiles(Memo1.Handle,True);end;这允许控件显示拖动图标,但不会调用正确的WM_DROPFILES消息,因为DragAcceptFiles需要一个(Parent?)窗口句柄。我可以在WMDROPFILES过程中确定MemoHan