随笔分类 -  Delphi

摘要:1新手上路1.1控件简介Dock panelsDock panels是建立停靠应用的最主要部分,是在应用内部的windows局部窗口,可以放置其他的VCL控件。当一个Dock panels放在Form上后,它会自动漂浮在Form之上。如果需要停靠到窗体中,需要使用TdxDockSite控件,并且可以设置主题风格。注意,当要对Dock panels控件进行删除、复制粘贴或者其他一些操作时,务必使用控件的上下文菜单来实现。Dock panels之间可以互相停靠,停靠的结果有2种类型-tab containers和side containers,例如,可以将side containers放到一个ta 阅读全文
posted @ 2011-08-25 10:04 许明吉博客 阅读(4140) 评论(0) 推荐(0)
摘要:library ConnDBDll; { Important note about DLL memory management: ShareMem must be the first unit in your library 's USES clause AND your project 's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. Th 阅读全文
posted @ 2011-08-18 23:15 许明吉博客 阅读(464) 评论(0) 推荐(0)
摘要:一、引子: 现在的Windows应用程序几乎都使用图标、图片、光标、声音等,我们称它们为资源(Resource)。最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用。资源是程序的一部分,程序要正常运行就离不了资源文件。但是它是不可执行代码。为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件。它可以把我们程序中所需要的资源整合到一个资源文件(.RES)下来。在编译应用程序时直接编译进了可执行程序里,成为应用程序的整合体。 这样做的好处是:1。由于定位资源比在磁盘中定位文件花费时间少,所以应用程序执行会更快。2。多种资源可以放在一个文件中,减少了图标、图 阅读全文
posted @ 2011-08-17 22:20 许明吉博客 阅读(844) 评论(0) 推荐(0)
摘要:Delphi2007编译的时候去掉GetVersionExA(@VI)中的@function GetWindowsVersionString: AnsiString;varVI: TOSVersionInfoA;beginVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfoA);if GetVersionExA(@VI) thenwith VI doResult := Trim(Format('%d.%d build %d %s',[dwMajorVersion, dwMinorVersion, dwBuildNumber, szCSD 阅读全文
posted @ 2011-08-16 18:05 许明吉博客 阅读(3816) 评论(1) 推荐(0)
摘要:RAD Studio/Delphi 2010 3615下载+破解官方下载地址:http://altd.embarcadero.com/download/RADStudio2010/delphicbuilder_2010_3615_win.iso序列号:HAAL-DANSGN-FZR5AG-M3BSJAAL-SCDKV6-ETH2SG-KBAN安装好后,将“rs2010arch.slip”WinXP复制到“C:\Documents and Settings\All Users\Application Data\Embarcadero”下(根据安装时的用户目录可能不同),WinVista或Win7 阅读全文
posted @ 2011-08-16 10:08 许明吉博客 阅读(8222) 评论(1) 推荐(0)
摘要:function GetShellFolder( ID: Cardinal; Create: Boolean = False ): string;// This function is a superset of SHGetSpecialFolderPath, included with// earlier versions of the Shell. On systems preceeding those including// Shell32.dll version 5.0 (Windows Millennium Edition (Windows Me) and// Windows 200 阅读全文
posted @ 2011-08-13 22:01 许明吉博客 阅读(341) 评论(0) 推荐(0)
摘要:利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录。 Function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer; var ppidl: PItemIDList): HResult; stdcall; Function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL;stdcall; 其中由nFolder参数指定的就是各个特殊系统目录: CSIDL_DESKTOP:毫无疑问这就是桌面; CSIDL_DRIV 阅读全文
posted @ 2011-08-13 21:11 许明吉博客 阅读(4068) 评论(0) 推荐(0)
摘要:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,IdHashMessageDigest,IdGlobal, IdHash;type TForm1 = class(TForm) btn1: TButton; OpenSwf1: TOpenDialog; edt1: TEdit; procedure btn1Click(Sender: TObject); private function StreamToMD5( 阅读全文
posted @ 2011-08-09 10:10 许明吉博客 阅读(1165) 评论(0) 推荐(0)
摘要:unit md5;INTERFACEuses Windows;type MD5Count = array[0..1] of DWORD; MD5State = array[0..3] of DWORD; MD5Block = array[0..15] of DWORD; MD5CBits = array[0..7] of byte; MD5Digest = array[0..15] of byte; MD5Buffer = array[0..63] of byte; MD5Context = record State: MD5State; Count: MD5Count; Buffer: MD 阅读全文
posted @ 2011-08-08 23:45 许明吉博客 阅读(490) 评论(0) 推荐(0)
摘要:http://www.koders.com/default.aspx?s=md5&search.x=8&search.y=8&la=Delphi&li=*&scope= 阅读全文
posted @ 2011-08-08 23:09 许明吉博客 阅读(231) 评论(0) 推荐(0)
摘要:原来写过一个计算MD5的程序,是用了一个叫MD5.pas的单元,使用起来还算简单,但还有更简单的办法,安装了indy就会有IdHashMessageDigest单元(delphi 7默认安装indy)有篇文章教怎么用IdHashMessageDigest计算字符串md5,计算文件md5却没有说,在这里补充一下,先看计算函数:function TIdHashMessageDigest4.HashValue(AStream: TStream): T4x4LongWordRecord;参数类型是一个流就可以返回T4x4LongWordRecord类型的值,使用function TIdHash128. 阅读全文
posted @ 2011-08-08 23:02 许明吉博客 阅读(12306) 评论(0) 推荐(0)
摘要:在Delphi自带的Indy控件中其实是提供了MD2,MD4,MD5对象的,我们可以直接使用它们来完成MD5的签名算法。而不需要再去找其它的DLL或是Pas了。 在Uses单元中引用 IdHashMessageDigest,IdGlobal, IdHash 单元,再写如下代码即可以达到MD5的实现。 示例代码 procedure TForm1.Button1Click(Sender: TObject); var MyMD5: TIdHashMessageDigest5; Digest: T4x4LongWordRecord; begin MyMD5 := TIdHashMessageDiges 阅读全文
posted @ 2011-08-08 22:56 许明吉博客 阅读(3962) 评论(0) 推荐(0)
摘要:USES IdGlobal,IdHash;function GetMd5Str(ContenStr:string):string;var RegMd5:TIdHashMessageDigest5; RegDigest:T4x4LongWordRecord;begin RegMd5:=TIdHashMessageDigest5.Create; RegDigest:=RegMd5.HashValue(ContenStr); Result:=LowerCase(RegMd5.AsHex(RegDigest));end; 阅读全文
posted @ 2011-08-08 22:49 许明吉博客 阅读(2520) 评论(0) 推荐(1)
摘要:关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些,但是有个问题是:如果栏截应用程序的消息,势必会造成应用程序的所有消息都有执行这个 拦截过程,尽管可以通过条件来过滤掉其他消息,但是执行判断本身就要耗时间(尽管每次判断 一下的时间不多,但是的有消息占的时间加起来就不少了),另一种方法是继承控件,可以这样 写又麻烦,如果需要在设计期使用的话,还得重新注册。 有没有更加简单的方法呢?不需要去过滤所有的应用程序消息,又不需要重写控件? 的确还有第三种方法 阅读全文
posted @ 2011-08-07 17:37 许明吉博客 阅读(1617) 评论(0) 推荐(0)
摘要:procedure TForm1.ShowSystemMenu(const LPt: TPoint);var LMenu: HMENU; LFlags: Cardinal; LCommand: LongWord;begin LMenu := GetSystemMenu(FParentForm.Handle, False); LFlags := TPM_RETURNCMD or GetSystemMetrics(SM_MENUDROPALIGNMENT); LCommand := LongWord(TrackPopupMenu(LMenu, LFlags, LPt.X, LPt.Y, 0, FP 阅读全文
posted @ 2011-08-05 15:21 许明吉博客 阅读(345) 评论(0) 推荐(0)
摘要:unit MyOfficeButton;interfaceuses SysUtils, Classes, Controls,Ribbon,RibbonActnCtrls,RibbonStyleActnCtrls,forms,Windows,Math, Dialogs,Graphics,ActnMan,ActnMenus,Messages;type TMyOfficeButton = class(TOffice2007Button) private FCaptionHeight: Integer; FDefaultColorMap: TCustomActionBarColorMap; FColo 阅读全文
posted @ 2011-07-27 17:51 许明吉博客 阅读(1214) 评论(0) 推荐(0)
摘要:Delphi:界面美化,用网页做界面用TWebBrowser控件设置显示的网页,如果在本地则写全路径,放到窗体的create或show事件中var str:string;begin str:=ExtractFilePath(Application.ExeName)+test.html ; //程序目录下的test.html页 webbrowser1.Navigate(str);End;假设网页中有一个链接控件的OnBeforeNavigate2事件procedure TFmain.WebBrowser1BeforeNavigate2(Sender: TObject; const pDisp: 阅读全文
posted @ 2011-07-25 12:06 许明吉博客 阅读(3506) 评论(0) 推荐(0)
摘要:判断是否联网在uses中加入WinInetif InternetCheckConnection('http://www.sina.com.cn',1,0) thenbegin showmessage('在线');endelsebegin showmessage('离线');end;或直接用ping后,查看(0% loss)或(100% loss),可知在线或离线 阅读全文
posted @ 2011-07-25 11:56 许明吉博客 阅读(439) 评论(0) 推荐(0)
摘要:实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果。本文实现的是内嵌一个记事本程序,如下图:在实现细节上需要注意几点:为了美化程序的嵌入效果,需要隐藏其标题栏在外部窗体大小变化时,需要内嵌的窗体也随之变化大小外部程序退出时,内嵌的程序也要退出下面是例子程序。新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:view sourceprint?unitfrmTestEmbedApp;interfaceusesWindows, Messages, SysUtil 阅读全文
posted @ 2011-07-25 11:54 许明吉博客 阅读(6770) 评论(0) 推荐(0)
摘要:Delphi获取公网IP地址函数1usesIdHTTP;2functionGetPublicIP:string;3var4strIP,URL:string;5iStart,iEnd:Integer;6MyIdHTTP:TIdHTTP;7begin8Result:='';9MyIdHTTP:=TIdHTTP.Create(nil);10try11try12URL:=MyIdHTTP.Get('http://www.ip138.com/ip2city.asp');13except14end;15finally16MyIdHTTP.Free;17end;1819ifL 阅读全文
posted @ 2011-07-25 11:37 许明吉博客 阅读(4431) 评论(0) 推荐(0)