Articles of delphi 7

delphi,删除文件夹的内容

当我有文件夹中的子文件夹 – 此代码不是删除文件夹…有没有任何错误? procedure TForm.Remove(Dir: String); var Result: TSearchRec; Found: Boolean; begin Found := False; if FindFirst(Dir + '\*', faAnyFile, Result) = 0 then while not Found do begin if (Result.Attr and faDirectory = faDirectory) AND (Result.Name <> '.') AND (Result.Name <> '..') then Remove(Dir + '\' + Result.Name) else if (Result.Attr and faAnyFile <> […]

Delphi 7的WriteProcessMemory

这是我的工作守则 DriftMul:=99; WriteProcessMemory(HandleWindow, ptr($4E709C), @DriftMul, 2, Write); 我想转换它,而不使用一个variables,但它不会工作下面只是我想要做的一个例子。 WriteProcessMemory(HandleWindow, ptr($4E709C), ptr(99), 2, Write); 有谁知道一种方法来使这个工作与使用variables? 我可以使用几种语言进行编程,而且我使用的每种语言都是一种方法来执行此操作。 我想这样做的原因是因为我将会制作一个很大的程序,能够处理不同的值,而且会为我节省300多行。 下面是我正在使用的c ++的一个例子。 WriteProcessMemory(hProcess, (void*)0x4E709C, (void*)(PBYTE)"\x20", 1, NULL); 更新:解决了我使用4程序,我打电话取决于我想要写多less字节。 procedure Wpm(Address: Cardinal; ChangeValues: Byte); Begin WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 1, Write); End; procedure Wpm2(Address: Cardinal; ChangeValues: Word); Begin WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 2, Write); End; procedure Wpm3(Address: Cardinal; ChangeValues: Word); Begin WriteProcessMemory(HandleWindow, […]

OpenGL – 直接渲染到位图

我正在制作的应用程序中有一些小窗口和控件(所以它是2D渲染),我想呈现每个窗口和控制到自己的位图(有没有这么多)。 这是什么: uses dglOpenGL; … var BMP: TBitmap; DC, RC: HDC; … function TMainForm.Init: Boolean; begin Result := InitOpenGL; if Result = True then begin BMP := TBitmap.Create; BMP.PixelFormat := pf24bit; BMP.Width := 1280; BMP.Height := 1024; DC := (BMP.Canvas.Handle); RC := CreateRenderingContext(DC, [opGDI, opDoubleBuffered],//tried changing, didn't help 24, 24, 0, 0, 0, 0); ActivateRenderingContext(DC, […]

在Delphi的Windows API参数 – 传递var参数有或没有@运营商?

我试图使用一个函数调用SetupDiGetDeviceRegistryProperty与delphi7.该调用是从示例函数SetupEnumAvailableComPorts 。 它看起来像这样: SetupDiGetDeviceRegistryProperty( DevInfoHandle, DeviceInfoData, RegProperty, @PropertyRegDataType, nil, 0, @RequiredSize ); 我在参数@PropertyRegDataType和@RequiredSize上收到错误“实际和forms参数的types必须相同”。 这些参数被声明: var RequiredSize: Cardinal; PropertyRegDataType: DWORD; MSDN将这些参数描述为: “RequiredSize [out,optional]指向DWORDtypesvariables的指针,该variables接收所需大小(以字节为单位)的PropertyBuffer缓冲区,该缓冲区用于保存请求属性的数据。并且可以为NULL。 “和”PropertyRegDataType [out,optional]指向一个variables的指针,该variables接收正在检索的属性的数据types,这是标准的registry数据types之一,该参数是可选的,可以是NULL “。 SetupDiGetDeviceRegistryProperty(来自JVCL的 SetupAPI.pas中)的声明如下所示: function SetupDiGetDeviceRegistryProperty( DeviceInfoSet: HDEVINFO; const DeviceInfoData: TSPDevInfoData; Property_: DWORD; var PropertyRegDataType: DWORD; PropertyBuffer: PBYTE; PropertyBufferSize: DWORD; var RequiredSize: DWORD ): BOOL; stdcall; {$EXTERNALSYM SetupDiGetDeviceRegistryProperty} 由于PropertyRegDataType和RequiredSize是var参数,因此应该能够在不使用@运算符的情况下传递。 实际上,如果我从函数调用参数中删除了@操作符,代码将会编译,但是会与访问冲突(读取地址0)一起崩溃。 原来的代码是为Delphi 7编写的,为什么他们会在这些参数上使用@运算符? […]

读取存储在registry中的GUID值

我尝试读取在Delphiregistry中存储为一个binary值的GUID值。 当我用BintoHex读它时,结果却是相反的。 看来我必须交换字节,但我认为BinToHex会做到这一点。 我提到这个线程,但我找不到正确的解决scheme: 如何在Delphi中将字节数组转换为其hex表示它似乎是由于小Eendian。 下面,你可以看到存储在registry中的GUID 这是我的代码: var s : string; buffer : pointer; … begin getmem(buffer, 1024*1024); …. reg.ReadBinaryData(iValueOfregistry, buffer^, 1024*1024); …. bintohex(pointer(longint(buffer)+14), PChar(s), 32); s的输出: 90E24D373F126545916439C4925E467B GUID应该是FOLDERID_Downloads GUID: {374DE290-123F-4565-9164-39C4925E467B} 请帮忙

在windows上保存依赖于机器(不是用户)的ini文件的位置

我的应用程序正在将设置存储在当前用户configuration文件(在WinXP下的C:\Documents and Settings\<CurrentUser>\Application Data\MyApplication\MySettings.ini下的INI文件中。 但是我意识到这些设置中的一些对于机器来说是独特的,而不是用户,因此想要(实际上需要)将它们保存在所有用户的单个位置。 Windows XP(和更高版本)上是否存在文件夹位置,可以存储用户独立设置? 注意:我不想将它们存储在与我的应用程序相同的文件夹中,也不希望将它们存储在registry中。 我注意到“C:\ Documents and Settings \”下有一个“All Users”文件夹? 我应该在那里存储? 奖励积分:我更倾向于给予谁可以告诉我如何在Delphi 7中从Windows返回这个path的答案。

使用Delphi打印在桌面上的dynamic文本?

我在我们的云服务器上看到,在桌面上dynamic显示了一些文本,显示有多less内存可用,硬盘空间等。这不像一个窗口或小工具或任何东西,但不知何故,它直接画在桌面上。 我怎样才能做到这一点? 我只看过文字,但是如果我能在桌面上绘制graphics,那也不错。 这是我的意思的一个样本: 编辑: 由于有人误解了我的问题,请允许我澄清一下: 我不一定需要做这个现有的工具。 其实我根本不想打印系统信息。 我想打印自己的信息看起来是一样的,但是用什么方法来实现这一点并不重要(无论是使用窗口,保存桌面图像,绘制到桌面的canvas,这些都是可能的答案)。 我只想做出一些类似的最终结果。

delphi – 计算目录大小API?

任何人都知道得到一个directoy的大小的其他方式,而不是通过计算文件的文件来计算它的大小? 我对一些win32 API函数感兴趣。 我已经谷歌关于这一点,但我没有find相关的信息,所以我在这里问。 PS:我知道如何通过使用findfirst和findnext来计算目录大小,并且总和所有文件的大小。

更新Windows资源pipe理器中显示的可用空间量

如何更新驱动器的Windows资源pipe理器中显示的可用空间量? 假设Windows资源pipe理器已打开,并以编程方式删除了一些文件。 Windows资源pipe理器将不会刷新显示新的可用空间。 所以,我试图像这样使用SHChangeNotify (Delphi代码): ws := 'C:\'; SHChangeNotify (SHCNE_FREESPACE, SHCNF_PATH, PWideChar(ws), nil); 但不会更新“Windows资源pipe理器”中报告的值。 请帮忙。

Borland Delphi 7 TExcelApplication.Connect适用于办公室机器,但不适用于客户端

我负责维护我的办公室(Pascal)的一些遗留代码,由于它的限制,我写了一个delphi的dll使用TExcelApplication访问Excel。 该DLL完美地在办公室工作,机器运行的是Microsoft Office 2010,Windows 7 32位和64位。 客户使用的是新型工作站,Windows XP,Microsoft 2007。 当遇到TExcelApplication.Connect时,dll会提供一个断点exception; 命令。 除了我提到的差异外,情况完全相同。 在小说工作站上访问Microsoft Excel有什么限制吗?或者,有没有更好的方法来访问Excel文档? 注意:我只想从Excel文档读取,它跨越多行,列和电子表格,源Excel文档是* .xls 2007文档。 它的主要function是针对Excel文档启用自动对帐。 这里是库代码的一个片段 library MyLibrary; uses SysUtils, Classes, Variants, Dialogs, StdCtrls, OleServer, ExcelXP, Windows; Type PString=String[254]; Var ExcelObj : TExcelApplication; Procedure XLSOPEN(THENAME:PSTRING;VAR Reslt:PSTRING); stdcall; Begin If FileExists(THENAME) Then Begin ExcelObj := TExcelApplication.Create(nil); ExcelObj.ConnectKind := ckRunningOrNew; ExcelObj.Connect; If ExcelObj=nil Then […]