DELPHI基础开发技巧

Delphi教程 2025-08-17

DELPHI基础开发技巧

◇[DELPHI]网络邻居复制文件

usesshellapi;

copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);

◇[DELPHI]产生鼠标拖动效果

通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL:

varxpanel,ypanel,xlabel,ylabel:integer;

PANEL的MouseMove事件:xpanel:=x;ypanel:=y;

PANEL的DragOver事件:xpanel:=x;ypanel:=y;

LABEL的MouseMove事件:xlabel:=x;ylabel:=y;

LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;

◇[DELPHI]取得WINDOWS目录

usesshellapi;

varwindir:array[0..255]ofchar;

getwindowsdirectory(windir,sizeof(windir));

或者从注册表中读取,位置:

HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion

SystemRoot键,取得如:C:/WINDOWS

◇[DELPHI]在FORM或其他容器上画线

varx,y:array[0..50]ofinteger;

canvas.pen.color:=clred;

canvas.pen.style:=PSDash;

form1.canvas.moveto(trunc(x[i]),trunc(y[i]));

form1.canvas.lineto(trunc(x[j]),trunc(y[j]));

◇[DELPHI]字符串列表使用

vartips:tstringlist;

tips:=tstringlist.create;

tips.loadfromfile('filename.txt');

edit1.text:=tips[0];

tips.add('lastlineadditionstring');

tips.insert(1,'insertstringatNO2line');

tips.savetofile('newfile.txt');

tips.free;

◇[DELPHI]简单的剪贴板操作

richedit1.selectall;

richedit1.copytoclipboard;

richedit1.cuttoclipboard;

edit1.pastefromclipboard;

◇[DELPHI]关于文件、目录操作

Chdir('c:/abcdir');转到目录

Mkdir('dirname');建立目录

Rmdir('dirname');删除目录

GetCurrentDir;//取当前目录名,无'/'

Getdir(0,s);//取工作目录名s:='c:/abcdir';

Deletfile('abc.txt');//删除文件

Renamefile('old.txt','new.txt');//文件更名

ExtractFilename(filelistbox1.filename);//取文件名

ExtractFileExt(filelistbox1.filename);//取文件后缀

◇[DELPHI]处理文件属性

attr:=filegetattr(filelistbox1.filename);

if(attrandfaReadonly)=faReadonlythen...//只读

if(attrandfaSysfile)=faSysfilethen...//系统

if(attrandfaArchive)=faArchivethen...//存档

if(attrandfaHidden)=faHiddenthen...//隐藏

◇[DELPHI]执行程序外文件

WINEXEC//调用可执行文件

winexec('command.com/ccopy*.*c:/',SW_Normal);

winexec('startabc.txt');

ShellExecute或ShellExecuteEx//启动文件关联程序

functionexecutefile(constfilename,params,defaultDir:string;showCmd:integer):THandle;

ExecuteFile('C:/abc/a.txt','x.abc','c:/abc/',0);

ExecuteFile('http://tingweb.y*e**ah.net','','',0);

ExecuteFile('mailto:tingweb@wx88.net','','',0);

◇[DELPHI]取得系统运行的进程名

varhCurrentWindow:HWnd;szText:array[0..254]ofchar;

begin

hCurrentWindow:=Getwindow(handle,GW_HWndFrist);

whilehCurrentWindow<  >0do

begin

ifGetwindowtext(hcurrnetwindow,@sztext,255) >0thenlistbox1.items.add(strpas(@sztext));

hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);

end;

end;

◇[DELPHI]关于汇编的嵌入

AsmEnd;

可以任意修改EAX、ECX、EDX;不能修改ESI、EDI、ESP、EBP、EBX。

◇[DELPHI]关于类型转换函数

FloatToStr//浮点转字符串

FloatToStrF//带格式的浮点转字符串

IntToHex//整数转16进制

TimeToStr

DateToStr

DateTimeToStr

FmtStr//按指定格式输出字符串

FormatDateTime('YYYY-MM-DD,hh-mm-ss',DATE);

◇[DELPHI]字符串的过程和函数

Insert(obj,target,pos);//字符串target插入在pos的位置。如插入结果大于target最大长度,多出字符将被截掉。如Pos在255以外,会产生运行错。例如,st:='Brian',则Insert('OK',st,2)会使st变为'BrOKian'。

Delete(st,pos,Num);//从st串中的pos(整型)位置开始删去个数为Num(整型)个字符的子字串。例如,st:='Brian',则Delete(st,3,2)将变为Brn。

Str(value,st);//将数值value(整型或实型)转换成字符串放在st中。例如,a=2.5E4时,则str(a:10,st)将使st的值为'25000'。

Val(st,var,code);//把字符串表达式st转换为对应整型或实型数值,存放在var中。St必须是一个表示数值的字符串,并符合数值常数的规则。在转换过程中,如果没有检测出错误,变量code置为0,否则置为第一个出错字符的位置。例如,st:=25.4E3,x是一个实型变量,则val(st,x,code)将使X值为25400,code值为0。

Copy(st.pos.num);//返回st串中一个位置pos(整型)处开始的,含有num(整型)个字符的子串。如果pos大于st字符串的长度,那就会返回一个空串,如果pos在255以外,会引起运行错误。例如,st:='Brian',则Copy(st,2,2)返回'ri'。

Concat(st1,st2,st3……,stn);//把所有自变量表示出的字符串按所给出的顺序连接起来,并返回连接后的值。如果结果的长度255,将产生运行错误。例如,st1:='Brian',st2:='',st3:='Wilfred',则Concat(st1,st2,st3)返回'BrianWilfred'。

Length(st);//返回字符串表达式st的长度。例如,st:='Brian',则Length(st)返回值为5。

Pos(obj,target);//返回字符串obj在目标字符串target的第一次出现的位置,如果target没有匹配的串,Pos函数的返回值为0。例如,target:='BrianWilfred',则Pos('Wil',target)的返回值是7,Pos('hurbet',target)的返回值是0。

◇[DELPHI]关于处理注册表

usesRegistry;

varreg:Tregistry;

reg:=Tregistry.create;

reg.rootkey:='HKey_Current_User';

reg.openkey('ControlPanel/Desktop',false);

reg.WriteString('TitleWallpaper','0');

reg.writeString('Wallpaper',filelistbox1.filename);

reg.closereg;

reg.free;

◇[DELPHI]关于键盘常量名

VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK_ESCAPE

/VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN

F1--F12:$70(112)--$7B(123)

A-Z:$41(65)--$5A(90)

0-9:$30(48)--$39(57)

◇[DELPHI]初步判断程序母语

DELPHI软件的DOS提示:ThisPRogramMustBeRunUnderWin32.

VC++软件的DOS提示:ThisProgramCannotBeRunInDOSMode.

◇[DELPHI]操作Cookie

response.cookies("name").domain:='http://www.0**8*6net.com';

withresponse.cookies.adddo

begin

name:='username';

value:='username';

end

◇[DELPHI]增加到文档菜单连接

usesshellapi,shlOBJ;

shAddToRecentDocs(shArd_path,pchar(filepath));//增加连接

shAddToRecentDocs(shArd_path,nil);//清空

◇[杂类]备份智能ABC输入法词库

windows/system/user.rem

windows/system/tmmr.rem

◇[DELPHI]判断鼠标按键

ifGetAsyncKeyState(VK_LButton)<  >0then...//左键

ifGetAsyncKeyState(VK_MButton)<  >0then...//中键

ifGetAsyncKeyState(VK_RButton)<  >0then...//右键

◇[DELPHI]设置窗体的最大显示

onFormCreate事件

self.width:=screen.width;

self.height:=screen.height;

◇[DELPHI]按键接受消息

OnCreate事件中处理:application.OnMessage:=MyOnMessage;

procedureTForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);

begin

ifmsg.message=256then...//ANY键

ifmsg.message=112then...//F1

ifmsg.message=113then...//F2

end;

◇[杂类]隐藏共享文件夹

共享效果:可访问,但不可见(在资源管理、网络邻居中)

取共享名为:direction$

访问://computer/dirction/

◇[javaScript]JavaScript网页常用效果

网页60秒定时关闭

关闭窗口

关闭

定时转URL

SQL语句,或者在TQuery的SQL中填入SQL语句。最后,别忘了将Active改为True。

在运行也可能配置TQuery,具体见Delphi帮助。

□◇[DELPHI]得到图像上某一点的RGB值

procedureTForm1.Image1MouseDown(Sender:TObject;Button:TMouseButton;

Shift:TShiftState;X,Y:Integer);

var

red,green,blue:byte;

i:integer;

begin

i:=image1.Canvas.Pixels[x,y];

Blue:=GetBValue(i);

Green:=GetGValue(i):

Red:=GetRValue(i);

Label1.Caption:=inttostr(Red);

Label2.Caption:=inttostr(Green);

Label3.Caption:=inttostr(Blue);

end;

□◇[DELPHI]关于日期格式分解转换

varyear,month,day:Word;now2:Tdatatime;

now2:=date();

decodedate(now2,year,month,day);

lable1.Text:=inttostr(year)+'年'+inttostr(month)+'月'+inttostr(day)+'日';

◇[DELPHI]如何判断当前网络连接方式

判断结果是MODEM、局域网或是代理服务器方式。

useswininet;

FunctionConnectionKind:boolean;

varflags:dword;

begin

Result:=InternetGetConnectedState(@flags,0);

ifResultthen

begin

if(flagsandINTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEMthen

begin

showmessage('Modem');

end;

if(flagsandINTERNET_CONNECTION_LAN)=INTERNET_CONNECTION_LANthen

begin

showmessage('LAN');

end;

if(flagsandINTERNET_CONNECTION_PROXY)=INTERNET_CONNECTION_PROXYthen

begin

showmessage('Proxy');

end;

if(flagsandINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYthen

begin

showmessage('ModemBusy');

end;

end;

end;

◇[DELPHI]如何判断字符串是否是有效EMAIL地址

functionIsEMail(EMail:String):Boolean;

vars:String;ETpos:Integer;

begin

ETpos:=pos('@',EMail);

ifETpos >1then

begin

s:=copy(EMail,ETpos+1,Length(EMail));

if(pos('.',s) >1)and(pos('.',s)< length(s))then

Result:=trueelseResult:=false;

end

else

Result:=false;

end;

◇[DELPHI]判断系统是否连接INTERNET

需要引入URL.DLL中的InetIsOffline函数。

函数申明为:

functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';

然后就可以调用函数判断系统是否连接到INTERNET

ifInetIsOffline(0)thenShowMessage('notconnected!')

elseShowMessage('connected!');

该函数返回TRUE如果本地系统没有连接到INTERNET。

附:

大多数装有IE或OFFICE97的系统都有此DLL可供调用。

InetIsOffline

BOOLInetIsOffline(

DWORDdwFlags,

);

◇[DELPHI]简单地播放和暂停WAV文件

usesmmsystem;

functionPlayWav(constFileName:string):Boolean;

begin

Result:=PlaySound(PChar(FileName),0,SND_ASYNC);

end;

procedureStopWav;

var

buffer:array[0..2]ofchar;

begin

buffer[0]:=#0;

PlaySound(Buffer,0,SND_PURGE);

end;

◇[DELPHI]取机器BIOS信息

withMemo1.Linesdo

begin

Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061))));

Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091))));

Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5))));

Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71))));

end;

◇[DELPHI]网络下载文件

usesUrlMon;

functionDownloadFile(Source,Dest:string):Boolean;

begin

try

Result:=UrlDownloadToFile(nil,PChar(source),PChar(Dest),0,nil)=0;

except

Result:=False;

end;

end;

ifDownloadFile('http://www.b*or**land.com/delphi6.zip,'c:/kylix.zip')then

ShowMessage('Downloadsuccesful')

elseShowMessage('Downloadunsuccesful')

◇[DELPHI]解析服务器IP地址

useswinsock

functionIPAddrToName(IPAddr:String):String;

var

SockAddrIn:TSockAddrIn;

HostEnt:PHostEnt;

WSAData:TWSAData;

begin

WSAStartup($101,WSAData);

SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(IPAddr));

HostEnt:=gethostbyaddr(@SockAddrIn.sin_addr.S_addr,4,AF_INET);

ifHostEnt<  >nilthenresult:=StrPas(Hostent^.h_name)elseresult:='';

end;

◇[DELPHI]取得快捷方式中的连接

functionExeFromLink(constlinkname:string):string;

var

FDir,

FName,

ExeName:PChar;

z:integer;

begin

ExeName:=StrAlloc(MAX_PATH);

FName:=StrAlloc(MAX_PATH);

FDir:=StrAlloc(MAX_PATH);

StrPCopy(FName,ExtractFileName(linkname));

StrPCopy(FDir,ExtractFilePath(linkname));

z:=FindExecutable(FName,FDir,ExeName);

ifz >32then

Result:=StrPas(ExeName)

else

Result:='';

StrDispose(FDir);

StrDispose(FName);

StrDispose(ExeName);

end;

◇[DELPHI]控制TCombobox的自动完成

{'Sorted'propertyoftheTComboboxtotrue}

varlastKey:Word;//全局变量

//TCombobox的OnChange事件

procedureTForm1.AutoCompleteChange(Sender:TObject);

var

SearchStr:string;

retVal:integer;

begin

SearchStr:=(SenderasTCombobox).Text;

iflastKey<  >VK_BACKthen//backspace:VK_BACKor$08

begin

retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));

ifretVal >CB_Errthen

begin

(SenderasTCombobox).ItemIndex:=retVal;

(SenderasTCombobox).SelStart:=Length(SearchStr);

(SenderasTCombobox).SelLength:=

(Length((SenderasTCombobox).Text)-Length(SearchStr));

end;//retVal >CB_Err

end;//lastKey<  >VK_BACK

lastKey:=0;//resetlastKey

end;

//TCombobox的OnKeyDown事件

procedureTForm1.AutoCompleteKeyDown(Sender:TObject;varKey:Word;

Shift:TShiftState);

begin

lastKey:=Key;

end;

◇[DELPHI]如何清空一个目录

functionEmptyDirectory(TheDirectory:String;Recursive:Boolean):

Boolean;

var

SearchRec:TSearchRec;

Res:Integer;

begin

Result:=False;

TheDirectory:=NormalDir(TheDirectory);

Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);

try

whileRes=0do

begin

if(SearchRec.Name<  >'.')and(SearchRec.Name<  >'..')then

begin

if((SearchRec.AttrandfaDirectory) >0)andRecursive

thenbegin

EmptyDirectory(TheDirectory+SearchRec.Name,True);

RemoveDirectory(PChar(TheDirectory+SearchRec.Name));

end

elsebegin

DeleteFile(PChar(TheDirectory+SearchRec.Name))

end;

end;

Res:=FindNext(SearchRec);

end;

Result:=True;

finally

FindClose(SearchRec.FindHandle);

end;

end;

◇[DELPHI]如何计算一个目录的大小

functionGetDirectorySize(constADirectory:string):Integer;

var

Dir:TSearchRec;

Ret:integer;

Path:string;

begin

Result:=0;

Path:=ExtractFilePath(ADirectory);

Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);

ifRet<  >NO_ERRORthenexit;

try

whileret=NO_ERRORdo

begin

inc(Result,Dir.Size);

if(Dir.Attrin[faDirectory])and(Dir.Name[1]<  >'.')then

Inc(Result,GetDirectorySize(Path+Dir.Name+'/*.*'));

Ret:=Sysutils.FindNext(Dir);

end;

finally

Sysutils.FindClose(Dir);

end;

end;

◇[DELPHI]安装程序如何添加到Uninstall列表

操作注册表,如下:

1.在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall键下建立一个主键,名称任意。

例HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall

2.在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall下键两个串值,

这两个串值的名称是特定的:DisplayName和UninstallString。

3.给串DisplayName赋值为显示在“删除应用程序列表”中的名称,如'AimingUninstallone';

给串UninstallString赋值为执行的删除命令,如C:/WIN97/uninst.exe-f"C:/TestPro/aimTest.isu"

◇[DELPHI]截获WM_QUERYENDsession关机消息

type

TForm1=class(TForm)

procedureWMQueryEndSession(varMessage:TWMQueryEndSession);messageWM_QUERYENDSESSION;

procedureCMEraseBkgnd(varMessage:TWMEraseBkgnd);MessageWM_ERASEBKGND;

private

{Privatedeclarations}

public

{Publicdeclarations}

end;

procedureTForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);

begin

Showmessage('computerisabouttoshutdown');

end;

◇[DELPHI]获取网上邻居

proceduregetnethood();//NT做服务器,WIN98上调试通过。

var

a,i:integer;

errcode:integer;

netres:array[0..1023]ofnetresource;

enumhandle:thandle;

enumentries:dword;

buffersize:dword;

s:string;

mylistitems:tlistitems;

mylistitem:tlistitem;

alldomain:tstrings;

begin//listcomputerisalistviewtolistallcomputers;controlcenterisaform.

alldomain:=tstringlist.Create;

withnetres[0]dobegin

dwscope:=RESOURCE_GLOBALNET;

dwtype:=RESOURCETYPE_ANY;

dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;

dwusage:=RESOURCEUSAGE_CONTAINER;

lplocalname:=nil;

lpremotename:=nil;

lpcomment:=nil;

lpprovider:=nil;

end;//获取所有的域

errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);

iferrcode=NO_ERRORthenbegin

enumentries:=1024;

buffersize:=sizeof(netres);

errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);

end;

a:=0;

mylistitems:=controlcenter.lstcomputer.Items;

mylistitems.Clear;

while(string(netres[a].lpprovider)<  >'')and(errcode=NO_ERROR)do

begin

alldomain.Add(netres[a].lpremotename);

a:=a+1;

end;

wnetcloseenum(enumhandle);

//获取所有的计算机

mylistitems:=controlcenter.lstcomputer.Items;

mylistitems.Clear;

fori:=0toalldomain.Count-1do

begin

withnetres[0]dobegin

dwscope:=RESOURCE_GLOBALNET;

dwtype:=RESOURCETYPE_ANY;

dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;

dwusage:=RESOURCEUSAGE_CONTAINER;

lplocalname:=nil;

lpremotename:=pchar(alldomain[i]);

lpcomment:=nil;

lpprovider:=nil;

end;

ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);

iferrcode=NO_ERRORthen

begin

EnumEntries:=1024;

BufferSize:=SizeOf(NetRes);

ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);

end;

a:=0;

while(string(netres[a].lpprovider)<  >'')and(errcode=NO_ERROR)do

begin

mylistitem:=mylistitems.Add;

mylistitem.ImageIndex:=0;

mylistitem.Caption:=uppercase(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));

a:=a+1;

end;

wnetcloseenum(enumhandle);

end;

end;

◇[DELPHI]获取某一计算机上的共享目录

proceduregetsharefolder(constcomputername:string);

var

errcode,a:integer;

netres:array[0..1023]ofnetresource;

enumhandle:thandle;

enumentries,buffersize:dword;

s:string;

mylistitems:tlistitems;

mylistitem:tlistitem;

mystrings:tstringlist;

begin

withnetres[0]dobegin

dwscope:=RESOURCE_GLOBALNET;

dwtype:=RESOURCETYPE_DISK;

dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;

dwusage:=RESOURCEUSAGE_CONTAINER;

lplocalname:=nil;

lpremotename:=pchar(computername);

lpcomment:=nil;

lpprovider:=nil;

end;//获取根结点

errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);

iferrcode=NO_ERRORthen

begin

EnumEntries:=1024;

BufferSize:=SizeOf(NetRes);

ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);

end;

wnetcloseenum(enumhandle);

a:=0;

mylistitems:=controlcenter.lstfile.Items;

mylistitems.Clear;

while(string(netres[a].lpprovider)<  >'')and(errcode=NO_ERROR)do

begin

withmylistitemsdo

begin

mylistitem:=add;

mylistitem.ImageIndex:=4;

mylistitem.Caption:=extractfilename(netres[a].lpremotename);

end;

a:=a+1;

end;

end;

◇[DELPHI]得到硬盘序列号

varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;

begin

ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);

end;

◇[DELPHI]MEMO的自动翻页

ProcedureScrollMemo(Memo:TMemo;Direction:char);

begin

casedirectionof

'd':begin

SendMessage(Memo.Handle,{HWNDoftheMemoControl}

WM_VSCROLL,{WindowsMessage}

SB_PAGEDOWN,{ScrollCommand}

0){NotUsed}

end;

'u':begin

SendMessage(Memo.Handle,{HWNDoftheMemoControl}

WM_VSCROLL,{WindowsMessage}

SB_PAGEUP,{ScrollCommand}

0);{NotUsed}

end;

end;

end;

procedureTForm1.Button1Click(Sender:TObject);

begin

ScrollMemo(Memo1,'d');//上翻页

end;

procedureTForm1.Button1Click(Sender:TObject);

begin

ScrollMemo(Memo1,'u');//下翻页

end;

◇[DELPHI]DBGrid中回车到下个位置(Tab键)

procedureTForm1.DBGrid1KeyPress(Sender:TObject;varKey:Char);

begin

ifKey=#13then

ifDBGrid1.Columns.Grid.SelectedIndex< DBGrid1.Columns.Count-1then

DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl

else

begin

Table1.next;

DBGrid1.Columns[0].field.FocusControl;

end;

end;

◇[DELPHI]如何安装控件

安装方法:

1.对于单个控件,Component-- >installcomponent..-- >PAS或DCU文件-- >install

2.对于带*.dpk文件的控件包,File-- >open(下拉列表框中选*.dpk)-- >install即可.

3.对于带*.dpl文件的控件包,InstallPackages-- >Add-- >dpl文件名即可。

4.如果以上Install按钮为失效的话,试试Compile按钮。

5.是runtimelib则在option下的packages下的runtimepackes加之.

如果编译时提示文件找不到的话,一般是控件的安装目录不在delphi的Lib目录中,有两种方法可以解决:

1.把安装的原文件拷入到delphi的Lib目录下。

2.或者Tools-- >EnvironmentOptions中把控件原代码路径加入到Delphi的Lib目录中即可。

◇[DELPHI]目录完全删除(deltree)

procedureTForm1.DeleteDirectory(strDir:String);

var

sr:TSearchRec;

FileAttrs:Integer;

strfilename:string;

strPth:string;

begin

strpth:=Getcurrentdir();

FileAttrs:=faAnyFile;

ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0then

begin

if(sr.AttrandFileAttrs)=sr.Attrthen

begin

strfilename:=sr.Name;

iffileexists(strpth+'/'+strdir+'/'+strfilename)then

deletefile(strpth+'/'+strdir+'/'+strfilename);

end;

whileFindNext(sr)=0do

begin

if(sr.AttrandFileAttrs)=sr.Attrthen

begin

strfilename:=sr.name;

iffileexists(strpth+'/'+strdir+'/'+strfilename)then

deletefile(strpth+'/'+strdir+'/'+strfilename);

end;

end;

FindClose(sr);

removedir(strpth+'/'+strdir);

end;

end;

◇[DELPHI]取得TMemo控件当前光标的行和列信息到Tpoint中

1.functionReadCursorPos(SourceMemo:TMemo):TPoint;

varPoint:TPoint;

begin

point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);

point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);

Result:=Point;

end;

2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//行长

◇[DELPHI]读硬盘序列号

functionGetDiskSerial(DiskChar:Char):string;

var

SerialNum:pdword;

a,b:dword;

Buffer:array[0..255]ofchar;

begin

result:="";

ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,

a,b,nil,0)then

Result:=IntToStr(SerialNum^);

end;

◇[INTERNET]CSS常用综合技巧

1。P:first-letter{font-size:300%;float:left}//首字会比普通字体加大三倍。

2。//连接一个外部样式表

3。嵌入一个样式表

4。//内联样式

Arial//SPAN接受STYLE、CLASS和ID属性

DIV可以包含段落、标题、表格甚至其它部分

5。CLASS属性

//定义见3。

6。ID属性

//定义见3。

7。属性列表

字体风格:font-style:[normal|italic|oblique];

字体大小:font-size:[xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller|< 长度 >|< 百分比 >]

文本修饰:text-decoration:[underline||overline||line-through||blink]

文本转换:text-transform:[none|capitalize|uppercase|lowercase]

背景颜色:background-color:[< 颜色 >|transparent]

背景图象:background-image:[|none]

行高:line-height:[normal|< 数字 >|< 长度 >|< 百分比 >]

边框样式:border-style:[none|dotted|dashed|solid|double|groove|ridge|inset|outset]

漂浮:float:[left|right|none]

8。长度单位

相对单位:

em(em,元素的字体的高度)

ex(x-height,字母"x"的高度)

px(像素,相对于屏幕的分辨率)

绝对长度:

in(英寸,1英寸=2.54厘米)

cm(厘米,1厘米=10毫米)

mm(米)

pt(点,1点=1/72英寸)

pc(帕,1帕=12点)

◇[DELPHI]VCL制作简要步骤

1.创建部件属性方法事件

(建立库单元,继承为新的类型,添加属性、方法、事件,注册部件,建立包文件)

2.消息处理

3.异常处理

4.部件可视

◇[DELPHI]动态连接库的装载

静态装载:procedurename;external'lib.dll';

动态装载:varhandle:Thandle;

handle:=loadlibrary('lib.dll');

ifhandle<  >0then

begin

{dosomething}

freelibrary(handle);

end;

◇[DELPHI]指针变量和地址

varx,y:integer;p:^integer;//指向INTEGER变量的指针

x:=10;//变量赋值

p:=@x;//变量x的地址

y:=p^;//为Y赋值指针P

@@procedure//返回过程变量的内存地址

◇[DELPHI]判断字符是汉字的一个字符

ByteType('你好haha吗',1)=mbLeadByte//是第一个字符

ByteType('你好haha吗',2)=mbTrailByte//是第二个字符

ByteType('你好haha吗',5)=mbSingleByte//不是中文字符

◇[DELPHI]memo的定位操作

memo1.lines.delete(0)//删除第1行

memo1.selstart:=10//定位10字节处

◇[DELPHI]获得双字节字符内码

functiongetit(s:string):integer;

begin

Result:=byte(s[1])*$100+byte(s[2]);

end;

使用:getit('计')//$bcc6即十进制48326

◇[DELPHI]调用ADD数据存储过程

存储过程如下:

createprocedureaddrecord(

record1varchar(10)

record2varchar(20)

)

as

begin

insertintotablename(field1,field2)values(:record1,:record2)

end

执行存储过程:

EXECUTEprocedureaddrecord("urrecord1","urrecord2")

◇[DELPHI]将文件存到blob字段中

functionblobcontenttostring(constfilename:string):string;

begin

withtfilestream.create(filename,fmopenread)do

try

setlength(Result,size);

read(Pointer(Result)^,size);

finally

free;

end;

end;

//保存字段

begin

if(opendialog1.execute)then

begin

sFileName:=OpenDialog1.FileName;

adotable1.edit;

adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName);

adotable1.post;

end;

◇[DELPHI]把文件全部复制到剪贴板

usesshlobj,activex,clipbrd;

procedureTform1.copytoclipbrd(varFileName:string);

var

FE:TFormatEtc;

Medium:TStgMedium;

dropfiles:PDropFiles;

pFile:PChar;

begin

FE.cfFormat:=CF_HDROP;

FE.dwaspect:=DVASPECT_CONTENT;

FE.tymed:=TYMED_HGLOBAL;

Medium.hGlobal:=GlobalAlloc(GMEM_SHAREorGMEM_ZEROINIT,SizeOf(TDropFiles)+length(FileName)+1);

ifMedium.hGlobal<  >0thenbegin

Medium.tymed:=TYMED_HGLOBAL;

dropfiles:=GlobalLock(Medium.hGlobal);

try

dropfiles^.pfiles:=SizeOf(TDropFiles);

dropfiles^.fwide:=False;

longint(pFile):=longint(dropfiles)+SizeOf(TDropFiles);

StrPCopy(pFile,FileName);

Inc(pFile,Length(FileName)+1);

pFile^:=#0;

finally

GlobalUnlock(Medium.hGlobal);

end;

Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal);

end;

end;

◇[DELPHI]列举当前系统运行进程

usesTLHelp32;

procedureTForm1.Button1Click(Sender:TObject);

varlppe:TProcessEntry32;

found:boolean;

Hand:THandle;

begin

Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

found:=Process32First(Hand,lppe);

whilefounddo

begin

ListBox1.Items.Add(StrPas(lppe.szExeFile));

found:=Process32Next(Hand,lppe);

end;

end;

◇[DELPHI]根据BDETable1建立新表Table2

Table2:=TTable.Create(nil);

try

Table2.DatabaseName:=Table1.DatabaseName;

Table2.FieldDefs.Assign(Table1.FieldDefs);

Table2.IndexDefs.Assign(Table1.IndexDefs);

Table2.TableName:='new_table';

Table2.CreateTable();

finally

Table2.Free();

end;

◇[DELPHI]最菜理解DLL建立和引用

//先看DLLsource(FILE-- >NEW-- >DLL)

libraryproject1;

uses

SysUtils,Classes;

functionaddit(f:integer;s:integer):integer;export;

begin

makeasum:=f+s;

end;

exports

addit;

end.

//调用(INurPROJECT)

implementation

functionaddit(f:integer;s:integer):integer;far;external'project1';//申明

{调用就是addit(2,4);结果显示6}

◇[DELPHI]动态读取程序自身大小

functionGesSelfSize:integer;

var

f:fileofbyte;

begin

filemode:=0;

assignfile(f,application.exename);

reset(f);

Result:=filesize(f);//单位是字节

closefile(f);

end;

◇[DELPHI]读取BIOS信息

withMemo1.Linesdo

begin

Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061))));

Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091))));

Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5))));

Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71))));

end;

◇[DELPHI]动态建立MSSQL别名

procedureTForm1.Button1Click(Sender:TObject);

varMyList:TStringList;

begin

MyList:=TStringList.Create;

try

withMyListdo

begin

Add('SERVERNAME=210.242.86.2');

Add('DATABASENAME=db');

Add('USERNAME=sa');

end;

Session1.AddAlias('TESTSQL','MSSQL',MyList);//ミMSSQL

Session1.SaveConfigFile;

finally

MyList.Free;

Session1.Active:=True;

Database1.DatabaseName:='DB';

Database1.AliasName:='TESTSQL';

Database1.LoginPrompt:=False;

Database1.Params.Add('USERNAME=sa');

Database1.Params.Add('PASSWORD=');

Database1.Connected:=True;

end;

end;

procedureTForm1.Button2Click(Sender:TObject);

begin

Database1.Connected:=False;

Session1.DeleteAlias('TESTSQL');

end;

◇[DELPHI]播放背景音乐

usesmmsystem

//播放音乐

MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0);

MCISendString('PLAYNNFROM0','',0,0);

MCISendString('CLOSEANIMATION','',0,0);

end;

//停止播放

MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0);

MCISendString('STOPNN','',0,0);

MCISendString('CLOSEANIMATION','',0,0);

◇[DELPHI]接口和类的一个范例代码

Type{接口和类申明:区别在于不能在接口中申明数据成员、任何非公有的方法、公共方法不使用PUBLIC关键字}

Isample=interface//定义Isample接口

functiongetstring:string;

end;

Tsample=class(TInterfacedObject,Isample)

public

functiongetstring:string;

end;

//function定义

functionTsample.getstring:string;

begin

result:='whatshowis';

end;

//调用类对象

varsample:Tsample;

begin

sample:=Tsample.create;

showmessage(sample.getstring+'classobject!');

sample.free;

end;

//调用接口

varsampleinterface:Isample;

sample:Tsample;

begin

sample:=Tsample.create;

sampleInterface:=sample;//Interface的实现必须使用class

{以上两行也可表达成sampleInterface:=Tsample.create;}

showmessage(sampleInterface.getstring+'Interface!');

//sample.free;{和局部类不同,Interface中的类自动释放}

sampleInterface:=nil;{释放接口对象}

end;

◇[DELPHI]任务条就看不当程序

var

ExtendedStyle:Integer;

begin

Application.Initialize;

ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE);

SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW);

Application.CreateForm(TForm1,Form1);

Application.Run;

end.

◇[DELPHI]ALT+CTRL+DEL看不到程序

在implementation后添加声明:

functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL';

RegisterServiceProcess(GetCurrentProcessID,1);//隐藏

RegisterServiceProcess(GetCurrentProcessID,0);//显示

◇[DELPHI]检测光驱符号

vardrive:char;

cdromID:integer;

begin

fordrive:='d'to'z'do

begin

cdromID:=GetDriveType(pchar(drive+':/'));

ifcdromID=5thenshowmessage('你的光驱为:'+drive+'盘!');

end;

end;

◇[DELPHI]检测声卡

ifauxGetNumDevs()< =0thenshowmessage('Nosoundcardfound!')elseshowmessage('Anysoundcardfound!');

◇[DELPHI]在字符串网格中画图

StringGrid.OnDrawCell事件

withStringGrid1.Canvasdo

Draw(Rect.Left,Rect.Top,Image1.Picture.Graphic);

◇[SQLSERVER]SQL中代替Like语句的另一种写法

比如查找用户名包含有"c"的所有用户,可以用

usemydatabase

select*fromtable1whereusernamelike'%c%"

下面是完成上面功能的另一种写法:

usemydatabase

select*fromtable1wherecharindex('c',username) >0

这种方法理论上比上一种方法多了一个判断语句,即 >0,但这个判断过程是最快的,我想信80%以上的运算都是花在查找字

符串及其它的运算上,所以运用charindex函数也没什么大不了.用这种方法也有好处,那就是对%,|等在不能直接用like

查找到的字符中可以直接在这charindex中运用,如下:

usemydatabase

select*fromtable1wherecharindex('%',username) >0

也可以写成:

usemydatabase

select*fromtable1wherecharindex(char(37),username) >0

ASCII的字符即为%

◇[DELPHI]SQL显示多数据库/表

SELECTDISTINCTA.bianhao,a.xingming,b.gongziFROM"jianjie.dbf"a,"gongzi.DBF"b

WHEREA.bianhao=b.bianhao

◇[DELPHI]RFC(RequestForComment)相关

IETF(InternetEngineeringTaskForce)维护RFC文档http://www.ie*t*f.c*nri.reston.va.us

RFC882:报文头标结构

RFC1521:MIME第一部分,传输报文方法

RFC1945:多媒体文档传输文档

◇[DELPHI]TNMUUProcessor的使用

varinStream,outStream:TFileStream;

begin

inStream:=TFileStream.create(infile.txt,fmOpenRead);

outStream:=TFileStream(outfile.txt,fmCreate);

NMUUE.Method:=uuCode;{UUEncode/Decode}

//NMUUE.Method:=uuMIME;{MIME}

NMUUE.InputStream:=InStream;

NMUUE.OutputStream:=OutStream;

NMUUE.Encode;{编码处理}

//NMUUE.Decode;{解码处理}

inStream.free;

outStream.free;

end;

◇[DELPHI]TFileStream的操作

//从文件流当前位置读count字节到缓冲区BUFFER

functionread(varbuffer;count:longint):longint;override;

//将缓冲区BUFFER读到文件流中

functionwrite(constbuffer;count:longint):longint;override;

//设置文件流当前读写指针为OFFSET

functionseek(offset:longint;origin:word):longint;override;

origin={soFromBeginning,soFromCurrent,soFromEnd}

//从另一文件流中当前位置复制COUNT到当前文件流当前位置

functioncopyfrom(source:TStream;count:longint):longint;

//读指定文件到文件流

varmyFStream:TFileStream;

begin

myFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead);

end;

[Javascript]检测是否安装IE插件Shockwave&Quicktime

-----------------

谢谢你耐心看完,你有技巧了,希望继续贴出来!

="FONT-FAMILY:ARIAL">="COLOR:RED;FONT-FAMILY:'NEWCENTURYSCHOOLBOOK',SERIF">