
其它
文章平均质量分 50
aroc_lo
这个作者很懒,什么都没留下…
展开
-
DELPHI编译软件时带上当前IDE的版本号
即可得到一个大小为 90K左右的控制台程序 GetIDEVER.exe(这就是为什么用D2007编译的原因,目前我的电脑最低是2007,用最新的DXE12,编译出来得有4.5MB左右)我想得到的是IDE的版本号,比如当前最新版本的DELPHI是:Embarcadero® RAD Studio 12 Version。IDE提供的API中,好象没有与之相关的东西;想要得到这个版本号,也许只能用变通的方式。此时,只需要在你的单元文件中导入这个INC即可直接读取了。得到的也只是编译器的版本号。原创 2024-09-21 09:27:14 · 732 阅读 · 0 评论 -
在使用FRP做内网穿透时,客户端FRPC经常莫名退出的解决方法
然后上官方( github.com/fatedier/frp )去查,也有人反馈问题,作者仿佛也很无奈的相子,此问题在2017年就提出来了,直至今天好象也没有得到解决;在家里自建了一个私人网络云盘,由于家里上网IP都是服务商动态分配的,所以公网IP地址是不固定的。(免费的限制挺在的),由于我自己有一个固定公网IP的电脑可以使用,所以就选择了免费开源的 frp。在使用过程中,发一个问题,frpc.exe 会经常莫名的退出了。服务端也可以这么做。把相关的“写死”在代码里面的东西,弄一个配置,这样就灵活些了。原创 2023-07-25 15:48:54 · 3872 阅读 · 0 评论 -
一个让人郁闷的DELPHI编译器错误:[dcc32 致命错误] Main.pas(1305): F2084 内部错误:URW1302
[dcc32 致命错误] Main.pas(1305): F2084 内部错误:URW1302[dcc32 致命错误] F2084 内部错误:AV097D960B(09760000)-R3AC6FF18-0[dcc32 致命错误] Main.pas(1305): F2084 内部错误:AV097D95CB(09760000)-R0000020E-0[dcc32 致命错误] Main.pas(1305): F2084 内部错误:AV097D95CB(09760000)-R00000003-0......原创 2022-06-19 20:27:26 · 1035 阅读 · 0 评论 -
InpubQuery的高级用法
procedure ShowErrorMsg(Amsg:string);begin Application.MessageBox(PChar(Amsg), 'error', MB_OK); abort;end;procedure TFrm_Main.Btn_1Click(Sender: TObject);var ss:array of string;begin SetLength(ss,3); if InputQuery('密码修改',[Chr(0)+'旧 密 码',Chr.原创 2021-04-30 21:36:28 · 243 阅读 · 1 评论 -
uniGui 出现 [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt
之前觉得好玩,用 UniGui 帮一个朋友(开一间小公司)弄了一个管理上的小东西。使用的是 Delphi D10.1(Berlin)+ UniGui 1.0.0.1397 + fireDac + MSSQL2008 弄的,运行得还不错;后来新版本的DELPHI D10.3.2(RIO)版出来,就想玩玩。然后发现 UniGui 1.0.0.1397版安装不上,就装了 1.9.0.0.1506...原创 2019-11-14 09:17:08 · 2345 阅读 · 0 评论 -
透明皮肤控件设计系列(二):皮肤窗口初级篇
Windows将窗口分为客户区和非客户区,例如对于标准的Windows窗口,标题栏和边框都属于非客户区,又称为NC区。对于客户区的绘制,应用程序会收到WM_PAINT消息,而非客户区,对应的消息是WM_NCPAINT。要实现皮肤窗口,需要三个步骤:第一步:定义非客户区的大小。要自定义非客户区的大小,程序就要响应WM_NCCALCSIZE消息。假设我们的标题高度为60(像素,下同),转载 2013-08-12 13:23:58 · 1356 阅读 · 0 评论 -
透明皮肤控件设计系列(三):皮肤窗口进阶篇
前文的窗口如果最大化,你会发现它把任务栏也覆盖了,原因是我们窗口的 BorderStyle 设置成了 bsNone,所以要处理一下WM_GETMINMAXINFO消息:procedure TForm1.WMGETMINMAXINFO(var Message: TMessage);var Rect: TRect;begin SystemParametersInfo(SPI_GET转载 2013-08-12 13:41:11 · 1111 阅读 · 1 评论 -
透明皮肤控件设计系列(四):皮肤窗口完结篇
经过上面的几篇文章的介绍,相信大家已经会自己做一个透明皮肤窗口了,但是要记住,上文因为是基础教程,所以很多细节仍然是需要处理的,例如:1、为了加快速度,实际上可以先用MakeBmp函数制作好皮肤图片,平均颜色就是取图片右下角的一个点即可。例如QQ的皮肤包就是这么干的。2、如果实在想运行时计算,那么可以先将图片缩小,再计算平均颜色。这样一来,循环的次数就减少了,而效果是一样的。转载 2013-08-12 13:56:41 · 781 阅读 · 0 评论 -
任意进制(2-36内)与十进制间的转换
function DecimalToStr(n :Integer;jz :Byte):string;var m:Integer;begin Result :=''; while (n>jz) and (jz>1) do begin m := n mod jz; n := n div jz; Result := DD[m+1] + Result; end;原创 2013-09-29 11:12:57 · 943 阅读 · 0 评论 -
使用汇编语言关机
program Quickoff;uses Windows;//Forms;//{$R *.res} function RtlAdjustPrivilege(Privilege: ULONG; Enable: BOOLEAN; CurrentThread: BOOLEAN; Enabled: PBOOLEAN): DWORD; stdcall; ext转载 2014-02-25 13:52:44 · 1782 阅读 · 0 评论 -
佛祖保佑,永无BUG
(* * _oo0oo_ * o8888888o * 88" . "88 * (| -_- |) * 0\ = /0 * ___/`-转载 2014-08-26 11:13:05 · 5382 阅读 · 0 评论 -
word邮件合并中日期/电话号码/金额字段的格式
word邮件合并中日期/电话号码/金额字段的格式2008年02月12日 星期二 21:42 通过设置word文档中合并字段来以需要的格式显示数据。 使用(\#)设置数字类格式, 金额字段,{MERGEFIELD number \# ¥###,0.00} 电话号码字段,{MERGEFIELD phone \# ###'-'###'-'####}转载 2014-10-09 11:01:36 · 16921 阅读 · 0 评论 -
windows2003
Q2hpbmVzZSBWZXJzaW9uczoNClN0YW5kYXJkIDY0Yml0DQplZDJrOi8vfGZpbGV8Y25fd2luX3Nydl8yMDAzX3IyX3N0YW5kYXJkX3g2NF93aXRoX3NwMl92bF9jZDIuaXNvfDE3OTIwMjA0OHwwRDY2RkNGQUZCQUUwOTJCOEY5MkREQzMzN0I0Q0M1NHwvDQpl转载 2015-06-19 11:18:59 · 7929 阅读 · 0 评论 -
Delphi出现 No mapping for the Unicode character exists in the target multi-byte code page 处理方法
当调用 TStrings.LoadFromFile(html_file_name, TEncoding.UTF8); 出现 No mapping for the Unicode character exists in the target multi-byte code page错误。这种错误在调用非UTF8编码的文件时会出错。处理方法如下 try tmpS...转载 2019-10-09 14:53:17 · 2090 阅读 · 0 评论 -
透明皮肤控件设计系列(五):透明控件
现在我们有了透明窗口,那么所有控件也应该是透明的。控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的DC传递过去:SendMessage(Parent.Handle, WM_ERASEBKGND, DC, 0);TCtrl(Parent).PaintControls(DC, nil);这种方法对于非转载 2013-08-12 14:01:53 · 764 阅读 · 0 评论 -
透明皮肤控件设计系列(一):前言
转自:http://www.138soft.com/?p=35Delphi的皮肤控件非常多,例如DynamicSkinForm等等。以前都是习惯直接使用第三方皮肤控件,后来在开发一个内部IM聊天工具的时候,发现没有现成的IM控件,网上有一些介绍模仿QQ界面的文章,但不成系列,重要的是都是“看起来像”,离”实际能使用”差的很远,于是自己开发了一个。老实说,因为以前都是依赖第三方控件,转载 2013-08-12 13:14:45 · 1209 阅读 · 0 评论 -
PasToHtml
unit PasToHtml;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;const aRes: array [0..93] of string = ( ('absolute'), ('abstra转载 2013-08-10 11:59:33 · 649 阅读 · 0 评论 -
制作API HOOK
由于近期的项目需要,特此研究下API HOOK。研究前,我在网上找了许多资料,也大致了解了一下原理。其实说白了也不是很困难。核心思想就是用你自己的处理过程,取代掉Windows的API处理。这非常类似于Java等的AOP。下面就是一些实现。首先是API Hook的核心代码了,这个代码即是用于替换函数指针。定义入口记录:type PIMAGE_IM转载 2010-01-24 13:22:00 · 750 阅读 · 0 评论 -
ASCII 码
下表列出了字符集中的 0 - 127。 代码 字符 代码 字符 代码 字符 代码 字符 0 32[空格]64@96`1 33!65A原创 2009-12-10 21:06:00 · 1089 阅读 · 0 评论 -
Delphi中编写无输出函数名的DLL文件
<br />用 Delphi 用长了,总是发现,有些和 MS 不同的地方。例如,MS 的公开库中,常常隐藏了许多重要函数,这些函数在系统中常常有起着非常巨大的作用。一旦知道如何调用,可以给自己的应用程序提供很强的功能和很大的灵活性。但,这些函数通常又没有函数名(即使用 ExeScope 查看 DLL 文件的导出表也看不出函数意义),仅仅只有一个序号来表示。有时候我又自己想,为什么我在写程序的时候不能学学 MS 隐藏一些自己不希望公开的函数呢? 其实用 Delphi 写 DLL 的时候,使用简单的转载 2010-07-27 20:48:00 · 1556 阅读 · 1 评论 -
VisualSVN Server以及TortoiseSVN客户端的配置和使用方法
一、VisualSVN Server的配置和使用方法【服务器端】安装好VisualSVN Server后【安装过程看这里】,运行VisualSVN Server Manger,下面是启动界面:好的,下面我来添加一个代码库【Repository】,如下图:按上图所示,创建新的代码库,在下图所示的文本框中输入代码库名称:注意:上图中的CheckBox如果选中,则在代码库StartKit下面会创建trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。点击OK转载 2010-06-19 09:32:00 · 3583 阅读 · 0 评论 -
delphi MDI 闪烁问题
<br />用Delphi自带的MDI模板自动建立一个多文档工程,然后做如下修改,可使屏幕不闪烁<br /><br />procedure TMainForm.CreateMDIChild(const Name: string);varChild: TMDIChild;begin{ create a new MDI child window }Perform(WM_SETREDRAW, 0, 0); //锁屏幕Child := TMDIChild.Create(Application原创 2010-09-19 21:19:00 · 2259 阅读 · 1 评论 -
通过自定义消息调用主窗体的菜单项
<br />1.首先放置TApplicationEvents控件。<br /><br /><br /><br />2.代码<br /> <br />procedure TF_Main.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);<br />begin<br /> case Msg.Message of<br /> WM_USER + 128:<br /> Begin<br /> case Msg.w转载 2010-09-24 00:23:00 · 664 阅读 · 0 评论 -
从内存中加载DLL DELPHI版
<br />//从内存中加载DLL DELPHI版 unit MemLibrary;interfaceusesWindows;function memLoadLibrary(pLib: Pointer): DWord;function memGetProcAddress(dwLibHandle: DWord; pFunctionName: PChar): Pointer; stdcall;function memFreeLibrary(dwHandle: DWord): B转载 2010-09-25 08:34:00 · 3132 阅读 · 1 评论 -
DELPHI7的通配符比较的汇编函数
<br />DELPHI7中的POS()函数是不能用通配符的,但是有汇编代码公开的,于是我想能否把此汇编函数改编成可能用通配符,有此想法已有多年了,最近我重新研究这个问题,发现是可行了,并做了出来,由于时间仓促,错误在所难免,希望能发现此汇编函数有BUG者能反馈给我知,我就多谢大家了。下面是我修改DELPHI7中的POS()而成的POSLI()的汇编源码,我试过可以通配符的,未知有无什么BUG,希望有人通知我BUG在何处。<br />此汇编函数支持?号只匹配一个中文。只支持?号和*号,不支持[]原创 2010-11-20 22:33:00 · 1050 阅读 · 1 评论 -
线程!线程!!线程!!!(Delphi版)
一、以下内容仅供初学者参考看到有的同学对Delphi的线程认识不够深,特开一贴给同学们讲讲。主要给出两种常用的线程形式。1、长等待型线程示例,等待命令,执行不定长的工作,但每个工作的时间不会太长。2、长工作型线程示例,执行一个很长时间的工作,但可以很快响应取消操作。注:对于在线程中取消存储过程的执行仍然无解以下程序所用的知识为:消息机制以转载 2012-10-27 09:11:40 · 954 阅读 · 0 评论 -
Delphi创建虚拟桌面实现后台调用外部程序
最近在做的一个软件,其中有一部分功能需要调用其它的软件来完成,而那个软件只有可执行文件,根本没有源代码,幸好,我要做的事不难,只需要在我的程序启动后,将那个软件打开,在需要的时候,对其中的一个文本框设置一些文字,再点击一个按钮就可以了。说到这里,相信你也有了对该功能的一些初步设想了,没错,其基本思路就是:1)调用CreateProcess()打开目标程序。2)用FindWindow转载 2013-04-11 15:14:38 · 1860 阅读 · 0 评论 -
Delphi向可执行文件EXE尾部写数据然后读取
读取数据调用代码:procedure TForm1.FormCreate(Sender: TObject);var s:TExeStream; a:Char; k:Byte;begin s:=TExeStream.Create(Application.ExeName,True); repeat k:=s.Read(a,1); if k转载 2013-04-26 08:32:13 · 1993 阅读 · 0 评论 -
BPL vs. DLL
第一部分:有关包的介绍一般我们编写编译一个DELPHI应用程序时,会产生一个EXE文件,也就是一个独立的WINDOWS应用程序。很重要的一点:区别于Visual Basic,DELPHI产生的是预先包裹的应用程序是不需要大量的运行库(DLL's)。假设:打开Delphi默认的工程(只有一个空白form),F9她将编译生成一个大约295 KB (Delphi 5)的可执行文件。然后打转载 2010-11-15 09:08:00 · 1237 阅读 · 0 评论 -
最近写一个涉及到打印IC的软件。写一些东西以免以后忘记;
1、 读写S50 IC卡注意事项S50 IC卡共分为 16个扇区,每个扇区有4个块;其中 每个扇区的 1、2、3 是可写的,每块可写16个字符。第一扇区的1、2、3块为保留(或许)区块。第4块不可动所以,真正写入数据,是从第2个扇区开始,,每个扇区只写前3块;当然,第4块也不是不可能,但是,为防止写废卡。请跳过他;完整源代码:unit RY_ReadWrit原创 2013-04-13 22:56:57 · 996 阅读 · 0 评论 -
监控指定进程
对于守护中间件是非常有用的。中间件不可能绝对的稳定而不出问题,中间件有可能因比较严重的错误导致当机或者进程被人为地错误地关闭了中间件。有了这个自动守护进程的存在,这一切的问题都可以迎刃而解。program Monitor;// {$APPTYPE CONSOLE}usesWinapi.Windows,System.SysUtils,ProcLib in 'Pr转载 2013-07-03 00:38:08 · 778 阅读 · 0 评论 -
XE 获取硬盘序列号
function TdmCommonFun.GetIdeSerialNumber: AnsiString; stdcall;const IDENTIFY_BUFFER_SIZE = 512;type TIDERegs = packed record bFeaturesReg: Byte; // Used for specifying SMART "commands".转载 2013-07-03 23:25:26 · 1001 阅读 · 0 评论 -
delphi实现图象灰度处理的3种方法
灰度处理的方法主要有如下3种:1、最大值法:使R、G、B的值等于3值中最大的一个,即: R=G=B=max(R,G,B)最大值法会使形成高亮度很高的灰度图象varbitmap:tbitmap;i,j:integer;a,b,c,crgb,temp:longint;res:byte;begin//最大值灰度处理方法bitmap:=tbitmap.Cr转载 2013-07-05 23:22:45 · 1174 阅读 · 0 评论 -
二进制文件转成文本保存,并可以读回
以 JPEG 图片为例,以下代码演示了如何将一个 JPEG 图片保存为纯文本形式,并将其以图片形式读回并显示。保存 TXT:function TForm1.JpegToText(AFileName:string; SaveFile: Boolean; TxtFileName: string): string;var FileStream : TFile转载 2010-01-24 00:49:00 · 943 阅读 · 0 评论