所遇问题 新建的算量工程文件暂时保存到临时文件中,代码中调用了Win32 API——GetTempFileName 但在一台笔记本上,函数返回了一个空字符串! 为了查明原因想到了好用的GetLastError——返回错误信息. 结果错误信息为“拒绝访问”,这让我很快想到了传入文件夹用户权限问题. 经过检验,果然当前用户没有传入文件夹的写权限. function GetTempFileA(const APrefix: string; const APath: string): string; va…
解决问题 如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥.这个问题可以通过CreateMutex来解决. 进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果没有则创建进程并设置进程实例已存在的标记. CreateMutex用于创建一个互斥体: OpenMutex为现有的一个已命名互斥体对象创建一个新句柄: ReleaseMutex释放由线程拥有的一个互斥体的控制权. 具体实现代码如下: constructor TUniqueAppInstance.Cr…
Delphi是Windows平台下著名的快速应用程序开发工具,它在VCL中封装并使用了大量的Win32 API. GAEA基于VCL开发的工具类产品,在程序中使用了大量的Win32 API,将经常用到或涉及到的API罗列并梳理一下. 系统API 1.事件对像:CreateEvent.setevent.ResetEvent和WaitForSingleObject: 2.互斥体:CreateMutex,OpenMutex和ReleaseMutex 3.时间:GetTickCount,Sleep,Ge…
TObject消息分派 procedure Dispatch(var Message); virtual; #负责分派消息到特定VCL组件的事件处理函数 procedure DefaultHandler(var Message); virtual; #消息分类:通过子类覆盖此方法,处理窗口命令消息,窗口标准消息,VCL自行触发消息,VCL通知消息,自定义 VCL封装类的方法种类 procedure WMButtonUp(var Message: TWMButtonUp); message WM_…
本文基本转自“Delphi编译/链接过程” @瓢虫Monster,向瓢虫君学习,:) 下图展示了Delphi是怎样编译源文件,并把它们链接起来,最终形成可执行文件的. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: 首先,Object Pascal编译器把项目单元文件编译为二进制对象文件(dcu): 然后资源编辑器将把诸如程序图标.窗体文件等资源编译成二进制资源文件: 接着链接开始起作用,链接器根据编译器产生的二进制文件,依…
问题描述 大部分软件都有鼠标双击文件,就能打开所关联的软件并打开所选工程,这是如何做到的呢? 把文件关联到一个程序中,双击文件来启动程序,那么这个文件名称就是这个程序的命令行的一个参数. 所以要想实现双击工程文件打开软件,在程序运行入口必须要处理命令行. 代码说明 begin Application.Initialize; CreateMainForm(); //GetCommandLine为Win32 API,用于获取命令行内容 HandleCommandLine(GetCommandLine…
本博客的Delphi代码使用的版本均为DelphiXE10.x 1.1 .枚举进程 通过进程名称获取指定的进程ID,代码很详细,不再赘述 unit Uuitls; interface uses TlHelp32, Winapi.Windows; function GetPidByProName(proname: string): DWORD; implementation function GetPidByProName(proname: string): DWORD; var hwd: THa…
Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = System.IntPtr; using HWND = System.IntPtr; namespace Win32 { public struct OVERLAPPED { public int Internal; public int InternalHigh; public int offset; p…
{*******************************************************} { } { Delphi公用函数单元 } { } { 版权所有 (C) 2008 勇者工作室 } { } {*******************************************************} unit UMyPubFuncFroc; interface uses ComCtrls, Forms, Windows, Classes, SysUtils,…
Visual Component Library的缩写(可视组件库)VCL是Visual Component Library的缩写,即可视组件库,它是Delphi,C++Builder等编程语言的基本类库. 它拥有封装纯粹,可扩展性强,操作方便等特点.如果是一个非常繁杂的Win32API,在经过VCL封装后,使用也是非常简便的.VCL支持类的嵌套,过程及函数的嵌套,如果你想在一个过程里声明一个类,或是声明另一个过程,那是完全可行的.过程内部的过程或是函数被称为局部过程或是局部函数. VCL对事件…
项目:无线无源测温软件系统 项目中,用到使用P/Invoke在.NET调用win32API,实现对ini配置文件的读写功能!因为有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化.将 一些信息写入INI文件(initialization file)中,可完成简单的持久化支持. Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下: =============================== [Section1] Key11=valu…
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API…
A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff. Note that only open-source projects are considered. Dead projects are mainly ignored except for those which do not have alive analogs.…
Awesome Delphi  A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff. Note that only open-source projects are considered. Dead projects are mainly ignored except for those which do not hav…
Delphi有三种类型的字符: AnsiChar这是标准的1字节的ANSI字符,程序员都对它比较熟悉. WideChar这是2字节的Unicode字符. Char在目前相当于AnsiChar,但在Delphi 2010 以后版本中相当于WideChar. 记住因为一个字符在长度上并不表示一个字节,所以不能在应用程序中对字符长度进行硬编码, 而应该使用Sizeof()函数.注意Sizeof()标准函数返回类型或实例的字节长度. Delphi有下列几种不同的字符串类型 String: ShortSt…
{*******************************************************} { } { Delphi公用函数单元 } { } { 版权所有 (C) 2008 } { } {*******************************************************} unit YzDelphiFunc; interface uses ComCtrls, Forms, Windows, Classes, SysUtils, ComObj,…
auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API 删除打印机缓冲文件 AbortSystemShutdown API 停止系统工作 AccessChec…
Lazarus的设计目标是应用Free Pascal,所以所有凡是Free Pascal能运行的平台,Lazarus都可以运行.最新版本能运行于Linux,Win32和Mac OS.整个界面的外观和操作和Delphi IDE一样,因此,如果你会使用Delphi的话,用起Lazarus IDE来就一定能得心应手了. Lazarus是一个用于FreePascal的快速应用开发(RAD)的面向对象的FreePascal集成开发环境(IDE),不仅可 最新版lazarus0.9.30.4(3张) 以编译…
第一次编译时,设定android SDK: F:\RAD Studio XE6\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk F:\RAD Studio XE6\PlatformSDKs\android-ndk-r9c C:\Program Files\Java\jdk1.7.0_40 SDK更新代理     XE6 不支持JStringToString.StringTojString.StrToJURI:use Androidapi.Help…
Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. 也看过网上一些人自己的修改,但是修改后有两个问题(网上的方法都不好,只能自己动手了): 1. 性能急剧下降.原作者是用二叉树对性能做了极大的优化.但是网上修改的方法性能不行. 2. 属性数大于 32 时会出错.(原来用的是二叉树,修改后部分算法未修改,导致此问题). 我采用的是重写遍历器的方法,和…
字符串类型 Delphi有三种类型的字符: ●AnsiChar这是标准的1字节的ANSI字符,程序员都对它比较熟悉. ●WideChar这是2字节的Unicode字符. ●Char在目前Delphi早前的版本相当于AnsiChar,但在Delphi以后版本中相当于WideChar. var c: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF} begin {用十进制方式赋值:} c := #65; ShowMessage(c); {A}…
参数传递方法 李纬的InsideVCL<第一章>中提到Windows定义的回调函数 typedef LRESULT (CALLBACK*WNDPROC)(HWND,UNIT,WPARAM,LPARAM) 为了加快回调函数执行的效率,Microsoft使用了CALLBACK修饰关键词来定义WNDPROC,而CALLBACK则是定义成FAR PASCAL. 那么为什么FARPASCAL就会更快执行呢?以下为我的解释 (1)cdecl: 通常是C/C++所使用缺省的参数传递方式,它的传递方式是由右到…
建议先参考我上次写的博文跨进程获取Richedit中Text: 获得QQ聊天输入框中的内容 拿到这个问题,我习惯性地会从VCL内核开始分析.找到TRichEdit声明的单元,分析TRichEdit保存为RTF流的代码.(分析VCL内核代码方便了解Windows标准API的封装和使用)     打开声明TRichEdit的ComCtrls.pas单元.搜索"TRichEditStrings"(保存流使用TRichEdit.Lines.SaveToStream方法,TRichEditStr…
Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 CreateProcess百科名片 WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 编辑本段函数原型 BOOL CreateProcess  (  LPCTSTR lpApplicationName,  LPTSTR lpCommandLine,  LPSECURITY_ATTR…
Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 2010-12-27 17:00:17|  分类: Delphi |  标签: |字号大中小 订阅 CreateProcess百科名片 WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 目录 函数原型 参数 返回值 举例说明 C代码 C++代码 函数原型 参数 返回值 举例说明 C…
 多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的人来说,“多线程”仍然是陌生的,但如同以前我们从DOS下的单任务过渡到windows3.下的多任务,如今我们又必须过渡到“多线程”领域,毕竟计算机时代是在不断发展的.不过,幸运的是,在DELPHI2.下进行多线程程序设计并不需要我们去学习庞大的WIN32API函数,我们可以利用DELPHI下标准的多…
Delphi利用系统环境变量获取常用系统目录 //譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取: var s: string; begin s := GetEnvironmentVariable('WINDIR'); ShowMessage(s); {C:\WINDOWS} end; 一些系统目录变量列表: --------变量-----------------------------,-------描述------------------------------------…
1.DELPHI中操作access数据库(建立.mdb文件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第二版无ACCESS环境下运行成功.//在之前uses ComObj,ActiveX//声明连接字符串Const SConnectionString = 'PRovider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +'Jet OLEDB:Database PassWord=%s;'; //=========…
最近做个发邮件的功能,需要将日志文件通过邮件发送回来用于分析,但是日志文件可能会超级大,测算下来一天可能会有800M的大小.所以压缩是不可避免了,delphi中的默认压缩算法整了半天不太好使,就看了看7z,在windows下有dll那么就用它吧. 下载7z.dll,还有一个delphi的开发sdk文件,sevenzip.pas.有这两个就可以了. 压缩 使用超级简单 procedure TForm1.Button1Click(Sender: TObject); var Arch: I7zOutA…
针对返回结果为参数的 一. 先建立自己的存储过程 ALTER PROCEDURE [dbo].[REName] ) AS BEGIN select ROW_NUMBER() over(order by Name asc) as [序号], Name,Gender,Birthday,Mobile,Tel,Ctfld from dbo.name where Gender = @Gender OR @Gender IN ( NULL, '', '-1' ) END 二.打开delphi,先添加几个控件…