资源描述
Delphi中DBEdit组件使用方法
出处:多特软件站 时间:2011-04-22 人气:325我要提问我来说两句
用Delphi开发简单的WebMail程序
Delphi 中压缩流和解压流的应用
核心提示:Delphi的DBEdit组件位于组件板的Data Controls页上,用于编辑数据表当前记录某字段的值。
相关下载: DelphiV7.0
Delphi的DBEdit组件位于组件板的Data Controls页上,用于编辑数据表当前记录某字段的值。DBEdit组件的主要属性与方法如下:
1、主要属性
(1)DataSource
用于选择数据源,使DBEdit组件通过数据源与数据表连接。当DBEdit通过数据源与数据表连接后,显示数据表的哪一个字段,则是由DataField字段决定的。
(2)DataField
用于选择数据字段,如果DataField设置为TB0602,则DBEdit用于显示与编辑字段TB0602的值。
DataSource与DataField是数据界面组件用于选择数据表与字段的最重要的2个属性。
(3)Enabled
当Enabled为True时数据界面组件有效,此时组件可用于编辑操作。当Enabled为False时,数据界面组件无效,运行后该组件呈灰色,不能用鼠标或键盘对该组件进行操作。
(4)ReadOnly
当ReadOnly为True时,数据只能读不能修改;为False时,数据可读可写。默认值为False。
以上属性也是大多数数据界面组件的共同属性,因此在下面的组件介绍中,不再重复介绍上述属性。
2、主要方法
(1)OnChange
当字段内容发生变化时触发该事件。
(2)OnClick
用鼠标单击组件触发该事件。
(3)OnDblClick
用鼠标双击组件触发该事件。
(4)OnKeyDown
当键按下时触发该事件。
(5)OnKeyUp
当键松开时触发该事件。
(6)OnMouseDown
当鼠标按下时触发该事件。
(7)OnMouseUp
当鼠标松开时触发该事件。
读者应注意,以上方法也是大多数数据界面组件共有的方法,大家可以试着写点小程序,这样才能掌握。
Delphi 中压缩流和解压流的应用
出处:多特软件站 时间:2011-04-25 人气:272我要提问我来说两句
Delphi中DBEdit组件使用方法
Delphi制作桌面时钟代码参考
核心提示:经常使用Delphi的朋友都知道,它为我们提供了两个流类来完成数据的压缩和解压缩,但该流在Delphi 的帮助中没有详细的说明,使得它们在使用起来有一定得困难。
相关下载: DelphiV7.0
软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩,但美中不足的是,该流在Delphi 的帮助中没有详细的说明,使得它们在使用起来有一定得困难。其实在Delphi系统中提供了这两个类的源代码和库。保存在Delphi 光盘的InfoExtraslib Src和InfoExtraslibObj目录中(其中OBJ目录中保存的是库,Src目录中保存的是源代码,感兴趣的朋友可以看看)。本人在使用的过程中,对它们有了一定的了解。
一、 类的说明
1、 基类 TCustomZlibStream:类TCustomZlibStream 是类TCompressionStream和TDecompressionStream 类的基类,它主要有一个属性: OnProgress,在类进行压缩或解压缩的过程中会发生这个的事件 ,它的定义如下:
Procedure OnProgress (Sender: TObject); dynamic;
2、 压缩类TCompressionStream:类TCompressionStream除了继承了基类的 OnProgress 属性外,又增加了一个属性:CompressionRate,它的定义如下:
Property CompressionRate: Single read GetCompressionRate;通过这个属性,可以得到压缩比。
它的几个重要的方法定义如下:
Constructor TCompressionStream.Create (CompressionLevel: TCompressionLevel; Dest: TStream);
其中:TcompressionLevel(压缩类型),它由如下几个定义:
①、 clNone :不进行数据压缩;
②、 clFastest:进行快速压缩,牺牲压缩效率;
③、 clDefault:进行正常压缩;
④、 clMax: 进行最大化压缩,牺牲速度;
Dest:目的流,用于存放压缩过的数据。
Function TCompressionStream.Write (const Buffer; Count: Longint): Longint;
其中:Buffer:需要压缩的数据;
Count: 需要压缩的数据的字节数;
函数返回写入流的字节数。
压缩类TCompressionStream的数据只能是写入的,如果试图从其内部读取数据,将发生一个"Error "异常。需要压缩的数据通过方法 Write写入流中,在写入的过程中就被压缩,并保存在由构造函数提供的内存流(TmemoryStream)中,同时触发 OnProcess 事件。
3、 解压缩类 TDecompressionStream :和压缩类TcompressionStream 相反,它的数据是只能读出的,如果试图往其内部写数据,将发生一个"Error "异常。它的几个重要方法定义如下:
构造函数:Constructor Create(Source: TStream);
其中:Source 是保存着压缩数据的流;
Function Read(var Buffer; Count: Longint): Longint;
数据读出函数,Buffer: 存数据缓冲区;
Count: 缓冲区的大小;
函数返回读出的字节数。
数据在读出的过程中,数据被解压缩,并触发 OnProcess 事件。
二、 类的使用
通过类TCompressionStream和TdecompressionStream的配合使用,我们可以非常方便地完成数据的压缩和解压,下面就是本人在编写屏幕拷贝程序中的使用例子:
Procedure TClientForm.GetScreen;
Var
SourceDC,DestDC:HDC;
Bhandle:HBITMAP;
BitMap:TBitMap;
BmpStream,Deststream:TMemoryStream;
SourceStream:TCompressionStream;
Count:Integer;
Begin
SourceDC:=CreateDC('display','','',nil);
{得到屏幕的 DC}
DestDC:=CreateCompatibleDC(SourceDC);
{建立临时 DC}
Bhandle:=CreateCompatibleBitmap(SourceDC,Screen.Width, Screen.Height);
{建立位图}
SelectObject(DestDC,Bhandle);
{选择位图DC}
BitBlt(DestDC,0,0,Screen.Width, Screen.Height,SourceDC,0,0,SRCCOPY);
{拷贝整个屏幕}
BitMap:=TBitMap.Create;
BitMap.Handle := Bhandle;
{保存屏幕位图到 BitMap中}
BmpStream:=TMemoryStream.Create;
BitMap.SaveToStream(BmpStream);
{建立位图数据的内存流}
count:=BmpStream.Size;
{保存位图的大小}
DestStream:=TMemoryStream.Create;
{目标流,保存压缩数据}
SourceStream:=TCompressionStream.Create(clMax, DestStream);
{构建压缩流,采用最大化压缩,并保存到目标流中}
try
BmpStream.SaveToStream(SourceStream);
{压缩位图流}
SourceStream.Free;
{完成压缩,释放压缩流}
BmpStream.Clear;
{清空原来位图流}
BmpStream.WriteBuffer(Count, Sizeof(Count));
{将原来位图的大小保存到新的位图流中,以便使用}
BmpStream.CopyFrom(DestStream, 0);
{将压缩数据附加到新的位图流后面}
BmpStream.Position := 0;
NMStrm.PostIt(BmpStream);
{发送位图流}
finally
DestStream.Free;
BmpStream.Destroy ;
BitMap.Destroy;
DeleteDC(SourceDC);
ReleaseDC(Bhandle,SourceDC);
end;
{释放有关资源}
End;
该过程得到整个屏幕的图象拷贝,并利用压缩流SourceStream和内存流 Deststream将位图压缩,并重新把位图大小和压缩数据流保存到位图流中,发送出去,发送位图大小的目的是在解压前来确定需要的内存空间。
procedure TServerForm.NMStrmServMSG(Sender: TComponent;
const sFrom: String; strm: TStream);
Var
StreamStr,DestStream:TMemoryStream;
SourceStream:TDecompressionStream;
count:Integer;
buffer:pointer;
begin
ScreenImage.Picture.Bitmap:=nil;
If Strm Is TMemoryStream Then
StreamStr := Strm AS TMemoryStream
Else
Exit;
StreamStr.Position := 0;
StreamStr.ReadBuffer(Count, Sizeof(Count));
{得到位图的大小}
GetMem(Buffer,Count);
{申请数据空间}
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(StreamStr);
{构建解压流,压缩数据由StreamStr 流得到}
StatusBar.SimpleText := '正在处理图象';
Try
SourceStream.ReadBuffer(Buffer^,Count);
{读出解压数据}
DestStream.WriteBuffer(Buffer^,Count);
{保存到位图流中}
DestStream.Position := 0;
ScreenImage.Picture.Bitmap.LoadFromStream(DestStream);
{显示到屏幕上}
Finally
FreeMem(Buffer);
DestStream.Destroy;
SourceStream.Destroy;
End;
end;
该过程首先从得到的数据流中取得位图大小,并申请内存空间,然后建立解压流,并将解压数据保存到位图流中,然后显示到屏幕上。
本文程序在Delphi6.0中调试通过。
Delphi制作桌面时钟代码参考
出处:天下网吧 时间:2011-04-22 人气:1414我要提问我来说两句
Delphi 中压缩流和解压流的应用
Delphi中TApplication类的用法
核心提示:delphi写时钟,delphi模拟时钟,delphi桌面时钟源码。
相关下载: DelphiV7.0
delphi写时钟,delphi模拟时钟,delphi桌面时钟源码
制作石英钟 (0 folders, 12 files, 26.51 KB, 26.51 KB in total.)
Exa22.dcu 9.21 KB
Exa22.dfm 799 bytes
Exa22.pas 4.79 KB
Exa22_pro.bdsproj 8.05 KB
Exa22_pro.bdsproj.local 463 bytes
Exa22_pro.cfg 428 bytes
Exa22_pro.dpr 233 bytes
Exa22_pro.identcache 160 bytes
Exa22_pro.res 876 bytes
Delphi中TApplication类的用法
出处:多特软件站 时间:2011-04-22 人气:268我要提问我来说两句
Delphi制作桌面时钟代码参考
Delphi网吧P2P三层更新BT源码
核心提示:在Delphi中TApplication是一个有着十分重要作用的类。TApplication类是用于描述Delphi编制的应用程序的一个类。
相关下载: DelphiV7.0
在Delphi中TApplication是一个有着十分重要作用的类。TApplication类是用于描述Delphi编制的应用程序的一个类。通过对这个类的灵活应用可以编制许多有特点的程序。。
1) 检测当前Windows程序是否被激活:
TApplication类有一个属性——Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点。检 测的代码如下:
If Application.Active=False then ShowMessage(’当前窗口没有被激活’);
2) 取得当前程序的名称:
TApplication类的EXEName属性可以返回这个可执行程序的完整文件名(包含路径)。实现的代码如下所示: ShowMessage(Application.ExeName);
3) 改变程序极小化时的标题
Tapplication类的Title属性。这个属性决定了程序最小化时的标题,而窗口中标题栏的标题是由Form的Caption属性来决定的。其代码如下:
Form1.Caption:=’ 窗口的标题’;
Application.Title:=’程序的标题’;
4) 指明程序的主窗口
Windows系统中的界面都是窗口,但一般来讲有一个主窗口。Tapplication的MainForm属性就可以返回程序的主窗口。
5) 显示消息框
Delphi可以生成一个含有中文显示的按钮,Tapplication的MessageBox函数了。这个函数的原形如下: function MessageBox(Text, Caption: Char; Flags: Longint): Integer
例如:Application.MessageBox('需要存盘吗?','提示信息',MB_OKCANCEL);
这个函数返回的是一个整型的数值,而这个数值被系统指定了具体的含义,比如:按下“确定”按钮时返回的值是“1”,按钮的意义及系统中对其定义的值:
IDOK 1
IDCANCEL 2
IDABORT 3
IDRETRY 4
IDIGNORE 5
IDYES 6
IDNO 7
6) 控制窗口的尺寸
一般可以用窗口手柄来调整窗口的尺寸,但是也可以用Application的事件来调整。实现的方法是用以下两个过程:
Application.Minimized;
Application.Restore;
前一个过程用来将程序的主窗口最小化,而后一个过程用来将最小化的窗口恢复到原来的尺寸。
7) 链接联机帮助文件
Application的CurrentHelpFile属性能够指定当前程序所用的联机帮助文件的文件名。这个属性经常与另一个方法联合在一起使用。举例如下:
Application.HelpFile := '联机帮助文件名';
Application.HelpJump('联机帮助文件的主题’)
通过这一命令组合,我们就能使系统弹出一个显示某主题的联机帮助文件。
8) 在程序运行时动态地创建窗口
窗口是在设计时加入到工程项目中的,但是有时也需要我们在程序运行时动态地加入窗口,这就要用到Application 的CreateForm过程,举例如下:
Form3:Tform3; //声明窗口类
Application.CreateForm(TForm3, Form3); //创建窗口
9) 结束程序
虽然我们可以用关闭主窗口的方法来关闭一个程序,但是更好的办法是用Application的Terminate过程。它能够起到更彻底地关闭程序的效果。
10) Destroy 属性.
虽然Delphi提供了这一属性, 但是并不提倡使用它,如果要终结程序就要调用Terminate过程,而Destroy过程一般是用来在程序发生悬挂时来退出程序时才调用,有些类似 Windows中的结束任务功能。它不仅能关闭程序实例本身,而且还能释放程序所占用的资源,能够达到将程序彻底清除出系统的目的。
Delphi网吧P2P三层更新BT源码
出处:天下网吧 时间:2011-04-22 人气:809我要提问我来说两句
Delphi中TApplication类的用法
Delphi中如何取得系统支持的颜色数
核心提示:BT核心源码也在里面,自己的核心。由delphi实现的bt下载器示例程序,带全部源码和BT协议
相关下载: DelphiV7.0
BT核心源码也在里面,自己的核心。
由delphi实现的bt下载器示例程序,带全部源码和BT协议
包中文件说明:
BTDemo.dpr, BTDemoF.pas, BTDemoF.dfm -- 一个简单的bt下载器,支持多个.torrent文件同时下载
btutils.pas -- 核心bt组件
DCP*.pas -- SHA算法源码(复制自DEC组件包)
InetUtils.pas -- 提供Internet下载的函数库
SimpleSocks.pas -- socket组件(TCP)
SortLists.pas -- 排序的List组件
ThreadTimer.pas -- 定时器与线程池
DelayLists.pas -- 一个延时5秒再释放Object的队列
FastShareMem.pas, MemPools.pas, ShareGlobals.inc -- 由ThreadTimer内部使用
Bit Torrent Specification.htm -- BT协议文档
图片:1.jpg
Delphi中如何取得系统支持的颜色数
出处:多特软件站 时间:2011-04-22 人气:117我要提问我来说两句
Delphi网吧P2P三层更新BT源码
利用API函数开发DELPHI程序
核心提示:在自己的软件中经常需要得知运行本软件的系统支持的颜色数。
相关下载: DelphiV7.0
在自己的软件中经常需要得知运行本软件的系统支持的颜色数。例如有的软件在16Bits的颜色数的计算机上开发而成,程序的颜色调试得非常漂亮,但是到了一台只支持16色的计算机上,程序变得非常难看。这就需要得到系统的颜色数。
Delphi中如何取得系统的颜色数呢?下面的程序就解决这个问题。
function GetSysColorNum:Integer;
Var
ScreenDc:HDC;
NumBitsPixel:Integer;
begin
Result:=0;
ScreenDc:=GetDC(0);
NumBitsPixel:=GetDeviceCaps(ScreenDc,BITPIXEL);
ReleaseDC(ScreenDC);
Result:=1 shl NumBitsPixel;
End;
利用API函数开发DELPHI程序
出处:多特软件站 时间:2011-04-25 人气:256我要提问我来说两句
Delphi中如何取得系统支持的颜色数
delphi编程控制INI文件
核心提示:Windows的API函数是应用程序开发的有力辅助工具,对它们的恰当使用,可大大增强和改进应用程序与系统打交道的能力,使自己的程序 真正具有底层操作功能。
相关下载: DelphiV7.0
Windows的API函数是应用程序开发的有力辅助工具,对它们的恰当使用,可大大增强和改进应用程序与系统打交道的能力,使自己的程序 真正具有底层操作功能。作为RAD工具的基础代表,BORLANDDELPHI虽然本身也已提供了大 量强有力的函数和过程,但在某些场合、要求下,使用API函数将使你的程序进一步得到改 善,并可拓宽范围,简化程序代码。
在DELPHI中引用API函数,和使用DELPHI本身的函 数、过程几乎没有区别。在DELPHI目录下有一个WINDOWS.PAS文件,凡是在其中声明过的API 函数,都可在编程时直接引用而无须另加说明。只是要注意,标准API函数都是以C或C++为 标准进行数据结构定义的,而DELPHI使用的是OBJECTPASCAL语言,因此在引用时应特别注 意参数和函数本身的数据类型。如一个API函数若为布尔值,则在DELPHI中就应以TRUE、FALSE 而不能用0、非0来对返回值进行判断。
下面以三个小例子来说明API函数在DELPHI中的 使用。
一、本地化消息框
想让自己的消息框显示“OK”、“Cancel”还是“确定”、“ 取消”?如果想使程序彻底本地化,那么还是放弃MessageDlg和ShowMessage吧——都怪DELPHI 没有。用MessageBox这个API函数照样方便。
使用语法为:
MessageBox(HWND:hWND,lpMessage:
PChar,lpCaption:PChar,uType:Cardinal);
各参数中,第一个为消息框所属的窗口句柄,第二 个为要显示的消息,第三个为消息框的标题,第四个为消息框的类型,函数返回值为整型数。
为使消息框有所归属,第一个参数设为当前窗口, 获取其句柄的方法是使用另一个API函数:GetActiveWindows(),且不需任何参数。
例1)Messagebox示例:
1.主要构件及属性的设置:
form1:caption:messagebox示例
bordericons:biMaximize和biHelp设为false
panel1:caption:文字部分Alignment:taLeftJustify
panel2:caption:图象部分Alignment:taLeftJustify
button1~button12:caption分别为:确定、确定取消、
确定帮助取消、是否、重试取消、终止重试取消、
信息、提问、系统图标、警告、停止、组合方式
bitbtn1:kind:bkClose
如图一所示:
2.事件说明:(详见源程序,下仅举两例)
{文字部分以button2click()为例}
procedureTForm1.Button2Click(Sender:TObject);
begin
casemessagebox(getactivewindow(),
显示确定、取消框,例子,
okcancel)
ofidok:messagebox(getactivewindow(),
您按下的是“确定”按钮,
结果,mb_ok);
idcancel:messagebox(getactivewindow(),
您按下的是“取消”按钮,
结果,mb_ok);
end;
end;
{图象部分以button8click()为例}
procedureTForm1.Button8Click(Sender:TObject);
begin
messagebox(getactivewindow(),显示警告图标,例子,
mb_iconwarning)
end;
二、改进Windows9x的系统登录的安全性:
Win9x的“用户登录”窗口可谓来者不拒,密码不 对照样可以“登堂入室”,系统为用户保留的个人设置等信息也就毫无保密性可言,通过查 看Profiles目录,可轻松地将其复制或删除。虽然Win95、Win98的应用对象是个人用户,但 在某些场合下,还是让登录窗口起点作用的好。
要使系统登录具有安全性,对非法使用者真正能 拒之门外,不妨用两个API函数来实现此目的。
例二)系统登录检查
1.主要构件及属性设置:
form1:caption:CheckUser
height、width:设为最小值
2.事件说明:
//定义变量
private
size:cardinal;
name:pchar;
entry:boolean;{Privatedeclarations}
procedureTCheckUser.FormShow(Sender:TObject);
begin
size:=64;
name:=StrAlloc(64);
{检查用户名,判断是按了“取消”按钮还是键入了新用户名}
ifGetUsername(name,size)
thenifname=’wj’//‘wj’为笔者机器的登录用户名
{在此,若允许的合法使用者不止一个,还可利用关系运算指定
一个以上的用户进入。
如:if(name=’computer1’)or(name=’computer2’)
}
thenentry:=true;
close;
end;
procedureTCheckUser.FormClose
(Sender:TObject;varAction:TCloseAction);
begin
ifnotentry
thenExitWindowsEx(EWX_REBOOT,32);
//若用户名不对,则重新启动Windows
end;
procedureTCheckUser.FormCreate(Sender:TObject);
begin
entry:=false;//设定初始值
end;
编译完毕后,生成EXE文件,然后打开注册表—— 使用Regedit,找到HKEY_LOCAL_MACHINESOFTWAREMicrWindowsCurrentVersionRUN 行,添加键值名(如:CheckUser)及键值(EXE文件所在的完整路径)。如图所示:
好了,重新启动一次,没有正确的密码还能进入吗 ?
三.没有“媒体播放器”的声音播放
日前做了一个小程序,想在“关于”窗口加上一段 声音说明,但小小的“关于”FORM放上一个长长的、Visible属性需为False的MediaPlayer构 件实在别扭。东查西找之下,还是靠API函数SNDPLAYSOUND()解决了问题——从而摆脱了MediaPlayer 的“束缚”。例三)使用API函数控制声音文件的播放:(部分代码)
procedureTaboutBox.FormShow(Sender:TObject);
begin
//播放当前目录下的welcome.wav文件
sndplaysound(‘welcome.wav’,snd_async)
end;
procedureTAboutBox.FormClick(Sender:TObject);
begin
//停止播放
sndplaysound(‘’,snd_async);
end;
别忘了,在USES子句中加入mmsystem单元。如果只 需要播放声音,那么一条API函数就能实现功能的还用得着MediaPlayer来大动干戈吗?
总之,使用DELPHI的“聪明的程序员”们应该充分 发挥DELPHI调用API函数方便快捷的优势,好好利用API函数以更好地为自己程序服务。
delphi编程控制INI文件
出处:多特软件站 时间:2011-04-22 人气:296我要提问我来说两句
利用API函数开发DELPHI程序
Delphi编写后台监控软件
核心提示:delphi编程控制INI文件从.INI文件中获取字符串 var
相关下载: DelphiV7.0
从.INI文件中获取字符串
var
strResult:pchar;
begin
GetPrivateProfileString(
'windows', // []中标题的名字
'NullPort', // =号前的名字
'NIL', // 如果没有找到字符串时,返回的默认值
strResult, //存放取得字符
100, //取得字符的允许最大长度
'c:\forwin95\win.ini' // 调用的文件名
);
edit1.text:=strResult; //显示取得字符串
从.INI文件中获取整数
edit1.text:=inttostr(GetPrivateProfileInt(
'intl', // []中标题的名字
'iCountry', // =号前的名字
0,// 如果没有找到整数时,返回的默认值
'c:\forwin95\win.ini' // 调用的文件名
));
向.INI文件写入字符串
WritePrivateProfileString(
'windows', // []中标题的名字
'load', // 要写入“=”号前的字符串
'accca', //要写入的数据
'c:\forwin95\win.ini' // 调用的文件名
);
向.INI文件写入整数
WritePrivateProfileSection(
'windows', // []中标题的名字
'read=100', // 要写入的数据
'c:\forwin95\win.ini' // 调用的文件名
);
Delphi编写后台监控软件
出处:多特软件站 时间:2011-04-25 人气:424我要提问我来说两句
delphi编程控制INI文件
Delphi编程根据IP地址得到主机名
核心提示:后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。
相关下载: DelphiV7.0
后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
一、把当前进程变为一个系统服务:
目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。
二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤:
1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom(’MyHotkey’), 并保留其句柄。
3、向Windows登记热键:调用API函数RegisterHotKey实现。
三、源程序:
unit Unit1;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{热键标识ID}
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
{ Privat-Declarations}
public
{ Public-Declarations}
end;
var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’K
展开阅读全文