1、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
2、通过数据源与数据表连接后,显示数据表的哪一个字段,则是由DataField字段决定的。(2)DataField用于选择数据字段,如果DataField设置为TB0602,则DBEdit用于显示与编辑字段TB0602的值。DataSource与DataField是数据界面组件用于选择数据表与字段的最重要的2个属性。(3)Enabled当Enabled为True时数据界面组件有效,此时组件可用于编辑操作。当Enabled为False时,数据界面组件无效,运行后该组件呈灰色,不能用鼠标或键盘对该组件进行操作。(4)ReadOnly当ReadOnly为True时,数据只能读不能修改;为False时,数
3、据可读可写。默认值为False。以上属性也是大多数数据界面组件的共同属性,因此在下面的组件介绍中,不再重复介绍上述属性。2、主要方法(1)OnChange当字段内容发生变化时触发该事件。(2)OnClick用鼠标单击组件触发该事件。(3)OnDblClick用鼠标双击组件触发该事件。(4)OnKeyDown当键按下时触发该事件。(5)OnKeyUp当键松开时触发该事件。(6)OnMouseDown当鼠标按下时触发该事件。(7)OnMouseUp当鼠标松开时触发该事件。读者应注意,以上方法也是大多数数据界面组件共有的方法,大家可以试着写点小程序,这样才能掌握。Delphi 中压缩流和解压流的应用
4、出处:多特软件站时间:2011-04-25人气:272我要提问我来说两句Delphi中DBEdit组件使用方法 Delphi制作桌面时钟代码参考核心提示:经常使用Delphi的朋友都知道,它为我们提供了两个流类来完成数据的压缩和解压缩,但该流在Delphi 的帮助中没有详细的说明,使得它们在使用起来有一定得困难。相关下载: DelphiV7.0 软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩,但美中不足的是,该流在Delphi 的帮助中没有详
5、细的说明,使得它们在使用起来有一定得困难。其实在Delphi系统中提供了这两个类的源代码和库。保存在Delphi 光盘的InfoExtraslib Src和InfoExtraslibObj目录中(其中OBJ目录中保存的是库,Src目录中保存的是源代码,感兴趣的朋友可以看看)。本人在使用的过程中,对它们有了一定的了解。一、 类的说明1、 基类 TCustomZlibStream:类TCustomZlibStream 是类TCompressionStream和TDecompressionStream 类的基类,它主要有一个属性: OnProgress,在类进行压缩或解压缩的过程中会发生这个的事件
6、,它的定义如下:Procedure OnProgress (Sender: TObject); dynamic;2、 压缩类TCompressionStream:类TCompressionStream除了继承了基类的 OnProgress 属性外,又增加了一个属性:CompressionRate,它的定义如下:Property CompressionRate: Single read GetCompressionRate;通过这个属性,可以得到压缩比。它的几个重要的方法定义如下:Constructor TCompressionStream.Create (CompressionLevel: T
7、CompressionLevel; Dest: TStream);其中:TcompressionLevel(压缩类型),它由如下几个定义:、 clNone :不进行数据压缩;、 clFastest:进行快速压缩,牺牲压缩效率;、 clDefault:进行正常压缩;、 clMax: 进行最大化压缩,牺牲速度;Dest:目的流,用于存放压缩过的数据。Function TCompressionStream.Write (const Buffer; Count: Longint): Longint;其中:Buffer:需要压缩的数据;Count: 需要压缩的数据的字节数;函数返回写入流的字节数。压缩类
8、TCompressionStream的数据只能是写入的,如果试图从其内部读取数据,将发生一个Error 异常。需要压缩的数据通过方法 Write写入流中,在写入的过程中就被压缩,并保存在由构造函数提供的内存流(TmemoryStream)中,同时触发 OnProcess 事件。3、 解压缩类 TDecompressionStream :和压缩类TcompressionStream 相反,它的数据是只能读出的,如果试图往其内部写数据,将发生一个Error 异常。它的几个重要方法定义如下:构造函数:Constructor Create(Source: TStream);其中:Source 是保存着
9、压缩数据的流;Function Read(var Buffer; Count: Longint): Longint;数据读出函数,Buffer: 存数据缓冲区;Count: 缓冲区的大小;函数返回读出的字节数。数据在读出的过程中,数据被解压缩,并触发 OnProcess 事件。二、 类的使用通过类TCompressionStream和TdecompressionStream的配合使用,我们可以非常方便地完成数据的压缩和解压,下面就是本人在编写屏幕拷贝程序中的使用例子:Procedure TClientForm.GetScreen;VarSourceDC,DestDC:HDC;Bhandle:H
10、BITMAP;BitMap:TBitMap;BmpStream,Deststream:TMemoryStream;SourceStream:TCompressionStream;Count:Integer;BeginSourceDC:=CreateDC(display,nil);得到屏幕的 DCDestDC:=CreateCompatibleDC(SourceDC);建立临时 DCBhandle:=CreateCompatibleBitmap(SourceDC,Screen.Width, Screen.Height);建立位图SelectObject(DestDC,Bhandle);选择位图D
11、CBitBlt(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:=TCo
12、mpressionStream.Create(clMax, DestStream);构建压缩流,采用最大化压缩,并保存到目标流中tryBmpStream.SaveToStream(SourceStream);压缩位图流SourceStream.Free;完成压缩,释放压缩流BmpStream.Clear;清空原来位图流BmpStream.WriteBuffer(Count, Sizeof(Count);将原来位图的大小保存到新的位图流中,以便使用BmpStream.CopyFrom(DestStream, 0);将压缩数据附加到新的位图流后面BmpStream.Position := 0;NM
13、Strm.PostIt(BmpStream);发送位图流finallyDestStream.Free;BmpStream.Destroy ;BitMap.Destroy;DeleteDC(SourceDC);ReleaseDC(Bhandle,SourceDC);end;释放有关资源End; 该过程得到整个屏幕的图象拷贝,并利用压缩流SourceStream和内存流 Deststream将位图压缩,并重新把位图大小和压缩数据流保存到位图流中,发送出去,发送位图大小的目的是在解压前来确定需要的内存空间。procedure TServerForm.NMStrmServMSG(Sender: TCo
14、mponent;const sFrom: String; strm: TStream);VarStreamStr,DestStream:TMemoryStream;SourceStream:TDecompressionStream;count:Integer;buffer:pointer;beginScreenImage.Picture.Bitmap:=nil;If Strm Is TMemoryStream ThenStreamStr := Strm AS TMemoryStreamElseExit;StreamStr.Position := 0;StreamStr.ReadBuffer(C
15、ount, Sizeof(Count);得到位图的大小GetMem(Buffer,Count);申请数据空间DestStream := TMemoryStream.Create;SourceStream := TDecompressionStream.Create(StreamStr);构建解压流,压缩数据由StreamStr 流得到StatusBar.SimpleText := 正在处理图象;TrySourceStream.ReadBuffer(Buffer,Count);读出解压数据DestStream.WriteBuffer(Buffer,Count);保存到位图流中DestStream
16、.Position := 0;ScreenImage.Picture.Bitmap.LoadFromStream(DestStream);显示到屏幕上FinallyFreeMem(Buffer);DestStream.Destroy;SourceStream.Destroy;End;end; 该过程首先从得到的数据流中取得位图大小,并申请内存空间,然后建立解压流,并将解压数据保存到位图流中,然后显示到屏幕上。本文程序在Delphi6.0中调试通过。Delphi制作桌面时钟代码参考出处:天下网吧时间:2011-04-22人气:1414我要提问我来说两句Delphi 中压缩流和解压流的应用 Del
17、phi中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 KBExa22.dfm 799 bytesExa22.pas 4.79 KBExa22_pro.bdsproj 8.05 KBExa22_pro.bdsproj.local 463 bytesExa22_pro.cfg 428 bytes
18、Exa22_pro.dpr 233 bytesExa22_pro.identcache 160 bytesExa22_pro.res 876 bytesDelphi中TApplication类的用法出处:多特软件站时间:2011-04-22人气:268我要提问我来说两句Delphi制作桌面时钟代码参考 Delphi网吧P2P三层更新BT源码核心提示:在Delphi中TApplication是一个有着十分重要作用的类。TApplication类是用于描述Delphi编制的应用程序的一个类。相关下载: DelphiV7.0 在Delphi中TApplication是一个有着十分重要作用的类。TAp
19、plication类是用于描述Delphi编制的应用程序的一个类。通过对这个类的灵活应用可以编制许多有特点的程序。1) 检测当前Windows程序是否被激活:TApplication类有一个属性Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点。检测的代码如下:If Application.Active=False then ShowMessage(当前窗口没有被激活);2) 取得当前程序的名称:TApplication类的EXEName属性可以返回这个可执行程序的完整文件名(包含路径)。实现的代码如下所示: ShowMessage(Application.Ex
20、eName);3) 改变程序极小化时的标题Tapplication类的Title属性。这个属性决定了程序最小化时的标题,而窗口中标题栏的标题是由Form的Caption属性来决定的。其代码如下:Form1.Caption:= 窗口的标题;Application.Title:=程序的标题;4) 指明程序的主窗口Windows系统中的界面都是窗口,但一般来讲有一个主窗口。Tapplication的MainForm属性就可以返回程序的主窗口。5) 显示消息框Delphi可以生成一个含有中文显示的按钮,Tapplication的MessageBox函数了。这个函数的原形如下: function Mes
21、sageBox(Text, Caption: Char; Flags: Longint): Integer例如:Application.MessageBox(需要存盘吗?,提示信息,MB_OKCANCEL);这个函数返回的是一个整型的数值,而这个数值被系统指定了具体的含义,比如:按下“确定”按钮时返回的值是“1”,按钮的意义及系统中对其定义的值:IDOK 1IDCANCEL 2IDABORT 3IDRETRY 4IDIGNORE 5IDYES 6IDNO 76) 控制窗口的尺寸一般可以用窗口手柄来调整窗口的尺寸,但是也可以用Application的事件来调整。实现的方法是用以下两个过程:App
22、lication.Minimized;Application.Restore;前一个过程用来将程序的主窗口最小化,而后一个过程用来将最小化的窗口恢复到原来的尺寸。7) 链接联机帮助文件Application的CurrentHelpFile属性能够指定当前程序所用的联机帮助文件的文件名。这个属性经常与另一个方法联合在一起使用。举例如下:Application.HelpFile := 联机帮助文件名;Application.HelpJump(联机帮助文件的主题)通过这一命令组合,我们就能使系统弹出一个显示某主题的联机帮助文件。8) 在程序运行时动态地创建窗口窗口是在设计时加入到工程项目中的,但是有
23、时也需要我们在程序运行时动态地加入窗口,这就要用到Application 的CreateForm过程,举例如下:Form3:Tform3; /声明窗口类Application.CreateForm(TForm3, Form3); /创建窗口9) 结束程序虽然我们可以用关闭主窗口的方法来关闭一个程序,但是更好的办法是用Application的Terminate过程。它能够起到更彻底地关闭程序的效果。10) Destroy 属性.虽然Delphi提供了这一属性, 但是并不提倡使用它,如果要终结程序就要调用Terminate过程,而Destroy过程一般是用来在程序发生悬挂时来退出程序时才调用,有些
24、类似 Windows中的结束任务功能。它不仅能关闭程序实例本身,而且还能释放程序所占用的资源,能够达到将程序彻底清除出系统的目的。Delphi网吧P2P三层更新BT源码出处:天下网吧时间:2011-04-22人气:809我要提问我来说两句Delphi中TApplication类的用法 Delphi中如何取得系统支持的颜色数核心提示:BT核心源码也在里面,自己的核心。由delphi实现的bt下载器示例程序,带全部源码和BT协议相关下载: DelphiV7.0 BT核心源码也在里面,自己的核心。由delphi实现的bt下载器示例程序,带全部源码和BT协议包中文件说明:BTDemo.dpr, BTD
25、emoF.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内部使
26、用Bit Torrent Specification.htm - BT协议文档 图片:1.jpg Delphi中如何取得系统支持的颜色数出处:多特软件站时间:2011-04-22人气:117我要提问我来说两句Delphi网吧P2P三层更新BT源码 利用API函数开发DELPHI程序核心提示:在自己的软件中经常需要得知运行本软件的系统支持的颜色数。相关下载: DelphiV7.0 在自己的软件中经常需要得知运行本软件的系统支持的颜色数。例如有的软件在16Bits的颜色数的计算机上开发而成,程序的颜色调试得非常漂亮,但是到了一台只支持16色的计算机上,程序变得非常难看。这就需要得到系统的颜色数。
27、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我要提问我来说两句Del
28、phi中如何取得系统支持的颜色数 delphi编程控制INI文件核心提示:Windows的API函数是应用程序开发的有力辅助工具,对它们的恰当使用,可大大增强和改进应用程序与系统打交道的能力,使自己的程序 真正具有底层操作功能。相关下载: DelphiV7.0 Windows的API函数是应用程序开发的有力辅助工具,对它们的恰当使用,可大大增强和改进应用程序与系统打交道的能力,使自己的程序 真正具有底层操作功能。作为RAD工具的基础代表,BORLANDDELPHI虽然本身也已提供了大 量强有力的函数和过程,但在某些场合、要求下,使用API函数将使你的程序进一步得到改 善,并可拓宽范围,简化程序
29、代码。 在DELPHI中引用API函数,和使用DELPHI本身的函 数、过程几乎没有区别。在DELPHI目录下有一个WINDOWS.PAS文件,凡是在其中声明过的API 函数,都可在编程时直接引用而无须另加说明。只是要注意,标准API函数都是以C或C+为 标准进行数据结构定义的,而DELPHI使用的是OBJECTPASCAL语言,因此在引用时应特别注 意参数和函数本身的数据类型。如一个API函数若为布尔值,则在DELPHI中就应以TRUE、FALSE 而不能用0、非0来对返回值进行判断。 下面以三个小例子来说明API函数在DELPHI中的 使用。 一、本地化消息框 想让自己的消息框显示“OK”
30、、“Cancel”还是“确定”、“ 取消”?如果想使程序彻底本地化,那么还是放弃MessageDlg和ShowMessage吧都怪DELPHI 没有。用MessageBox这个API函数照样方便。 使用语法为: MessageBox(HWND:hWND,lpMessage:PChar,lpCaption:PChar,uType:Cardinal);各参数中,第一个为消息框所属的窗口句柄,第二 个为要显示的消息,第三个为消息框的标题,第四个为消息框的类型,函数返回值为整型数。 为使消息框有所归属,第一个参数设为当前窗口, 获取其句柄的方法是使用另一个API函数:GetActiveWindows(
31、),且不需任何参数。 例1)Messagebox示例: 1主要构件及属性的设置: form1:caption:messagebox示例bordericons:biMaximize和biHelp设为falsepanel1:caption:文字部分Alignment:taLeftJustifypanel2:caption:图象部分Alignment:taLeftJustifybutton1button12:caption分别为:确定、确定取消、确定帮助取消、是否、重试取消、终止重试取消、信息、提问、系统图标、警告、停止、组合方式bitbtn1:kind:bkClose如图一所示: 2事件说明:(详
32、见源程序,下仅举两例) 文字部分以button2click()为例procedureTForm1.Button2Click(Sender:TObject);begincasemessagebox(getactivewindow(),显示确定、取消框,例子, okcancel)ofidok:messagebox(getactivewindow(),您按下的是“确定”按钮,结果,mb_ok);idcancel:messagebox(getactivewindow(),您按下的是“取消”按钮,结果,mb_ok);end;end;图象部分以button8click()为例procedureTForm1
33、.Button8Click(Sender:TObject);beginmessagebox(getactivewindow(),显示警告图标,例子,mb_iconwarning)end;二、改进Windows9x的系统登录的安全性: Win9x的“用户登录”窗口可谓来者不拒,密码不 对照样可以“登堂入室”,系统为用户保留的个人设置等信息也就毫无保密性可言,通过查 看Profiles目录,可轻松地将其复制或删除。虽然Win95、Win98的应用对象是个人用户,但 在某些场合下,还是让登录窗口起点作用的好。 要使系统登录具有安全性,对非法使用者真正能 拒之门外,不妨用两个API函数来实现此目的。例
34、二)系统登录检查 1主要构件及属性设置: form1:caption:CheckUserheight、width:设为最小值2事件说明: /定义变量privatesize:cardinal;name:pchar;entry:boolean;PrivatedeclarationsprocedureTCheckUser.FormShow(Sender:TObject);beginsize:=64;name:=StrAlloc(64);检查用户名,判断是按了“取消”按钮还是键入了新用户名ifGetUsername(name,size)thenifname=wj/wj为笔者机器的登录用户名在此,若允许
35、的合法使用者不止一个,还可利用关系运算指定一个以上的用户进入。如:if(name=computer1)or(name=computer2)thenentry:=true;close;end;procedureTCheckUser.FormClose(Sender:TObject;varAction:TCloseAction);beginifnotentrythenExitWindowsEx(EWX_REBOOT,32);/若用户名不对,则重新启动Windowsend;procedureTCheckUser.FormCreate(Sender:TObject);beginentry:=false
36、;/设定初始值end;编译完毕后,生成EXE文件,然后打开注册表 使用Regedit,找到HKEY_LOCAL_MACHINESOFTWAREMicrWindowsCurrentVersionRUN 行,添加键值名(如:CheckUser)及键值(EXE文件所在的完整路径)。如图所示: 好了,重新启动一次,没有正确的密码还能进入吗 ? 三没有“媒体播放器”的声音播放 日前做了一个小程序,想在“关于”窗口加上一段 声音说明,但小小的“关于”FORM放上一个长长的、Visible属性需为False的MediaPlayer构 件实在别扭。东查西找之下,还是靠API函数SNDPLAYSOUND()解决
37、了问题从而摆脱了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函数就能实现功能的还
38、用得着MediaPlayer来大动干戈吗? 总之,使用DELPHI的“聪明的程序员”们应该充分 发挥DELPHI调用API函数方便快捷的优势,好好利用API函数以更好地为自己程序服务。delphi编程控制INI文件出处:多特软件站时间:2011-04-22人气:296我要提问我来说两句利用API函数开发DELPHI程序 Delphi编写后台监控软件核心提示:delphi编程控制INI文件从.INI文件中获取字符串 var 相关下载: DelphiV7.0 从.INI文件中获取字符串 varstrResult:pchar;beginGetPrivateProfileString(windows,
39、 / 中标题的名字NullPort, / =号前的名字NIL, / 如果没有找到字符串时,返回的默认值strResult, /存放取得字符100, /取得字符的允许最大长度c:forwin95win.ini / 调用的文件名);edit1.text:=strResult; /显示取得字符串从.INI文件中获取整数edit1.text:=inttostr(GetPrivateProfileInt(intl, / 中标题的名字iCountry, / =号前的名字0,/ 如果没有找到整数时,返回的默认值c:forwin95win.ini / 调用的文件名);向.INI文件写入字符串WritePriv
40、ateProfileString(windows, / 中标题的名字load, / 要写入“=”号前的字符串accca, /要写入的数据c:forwin95win.ini / 调用的文件名);向.INI文件写入整数WritePrivateProfileSection(windows, / 中标题的名字read=100, / 要写入的数据c:forwin95win.ini / 调用的文件名);Delphi编写后台监控软件出处:多特软件站时间:2011-04-25人气:424我要提问我来说两句delphi编程控制INI文件 Delphi编程根据IP地址得到主机名核心提示:后台监控软件,为了达到隐蔽
41、监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。相关下载: DelphiV7.0 后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。一、把当前进程变为一个系统服务: 目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。 二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤
42、: 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 T
43、Form1 = 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