说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi技巧点滴

HTML文档下载 WORD文档下载 PDF文档下载
Delphi技巧点滴

1.如何检测Insert、Capslock、NumLock、ScrollLock状态键的状态

Delphi可以调用Win API的Getkeyboardstate()函数。

常量 按键名称

VK_INSERT znsert键

VK_NUMLOCK Num Lock键

VK_CAPITAL Caps Lock键

VK_SCROLL Scroll Lock键

键盘缓冲区每一位都有一位特定的格式,对于状态键来说,最低位是1时表示状态键处于ON状态,你可以使用odd()函数来确定这一位的状态,以下是一个简单的例子请参考。例子中放置一个Timer控件、一个StatusBar状态条。

procedure TForm1.Timer1Timer(Sender: TObject);

var ks:tkeyboardstate;

begin

getkeyboardstate(ks);//检测键盘函数

if odd(ks[VK_NUMLOCK]) then

statusbar1.panels.items[0].text:='NUM'

else

statusbar1.panels.items[0].text:='';

if odd(ks[VK_INSERT]) then

statusbar1.panels.items[1].text:='INSERT'

else

statusbar1.panels.items[1].text:='';

if odd(ks[VK_CAPITAL]) then

statusbar1.panels.items[2].text:='CAPITAL'

else

statusbar1.panels.items[2].text:='' ;

if odd(ks[VK_SCROLL]) then

statusbar1.panels.items[3].text:='SCROLL'

else

statusbar1.panels.items[3].text:='';

end;

end.

2.屏蔽系统按键

也许你希望程序在运行时不想让用户按系统按键 Alt-Tab 或 Ctrl-Alt-Del,那么可以通过以下的程序来屏蔽这些按键。  

procedure TForm1.FormCreate(Sender: TObject);   var tmp

Flag :integer;

begin

tmp := 0;

Flag := 1;

//屏蔽 Alt-Tab

SystemParametersInfo( SPI_SETFASTTA-SKSWITCH

Flag

@tmp

0);

//屏蔽 Ctrl-Alt-Del

SystemParametersInfo( SPI_SCREENSAVERRU-NNING

Flag

@tmp

0);  

end;

当你要恢复功能键时用以下代码:

Flag := 0;

SystemParametersInfo(SPI_SCREENSAVERRU-NNING

Flag

@temp

0);

3.隐藏和显示Windows的任务条

如何隐藏和显示Windows的任务条?仅仅调用以下的函数就可以。本程序的思路实际上就是先找到标题条的句柄,然后向它发送相应消息(SW_HIDE/SW_RESTORE)即可

procedure hideTaskbar;

//隐藏

var wndHandle : THandle;

wndClass : array[0..50] of Char;

begin

StrPCopy(@wndClass[0]

'Shell_TrayWnd');

wndHandle := FindWindow(@wndClass[0]

nil);

ShowWindow(wndHandle

SW_HIDE);

End;

procedure showTaskbar;

var wndHandle : THandle;

wndClass : array[0..50] of Char;

begin

StrPCopy(@wndClass[0]

'Shell_TrayWnd');

wndHandle := FindWindow(@wndClass[0]

nil);

ShowWindow(wndHandle

SW_RESTORE);

end;

end;

3.如何将你的程序放在Windows启动中

有时需要让Windows在启动时自动运行你的程序

如何在程序中实现呢?

使用Regedit查找HKEY_LOCALMACHINE\Sodtware\

Microsoft\Windows\CurrentVersion\Run

你会发现所有的Windows启动时调用的程序都在这里

于是你将你的程序增加在这里就可以了。名称为你的程序的标题

其值为你的程序的执行路径和文件名称。

在程序中实现可以使用TRegIniFile或者使用TRegistry都可以。

User Registry;

Var RegF:TRegistry;

begin

RegF:=TRegistry.Create;

RegF.RootKey:=HKEY_LOCAL_MACHINE;

try

RegF.OpenKey('SOFTWARE\Microsoft\

Windows\CurrentVersion\Run'

True);

RegF.WriteString('MyProg'

Mypr-og.exe

');

except

...

End; {try}

RegF.Close;

RegF.Free;

end;

4.如何动态更新StringGrid的颜色

StringGrid控件是一个有许多用户接口的显示数据库的控件,以下的程序告诉你如何根据显示的内容改变字体的显示颜色。例如,如果一个城市的人口大于200万,我们就让它显示为蓝色。使用的控件事件为StringGrid.On-DrawColumeCell。

procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

if Table1.FieldByName('Population').AsInteger > 20000000 then

StringGrid1.Canvas.Font.Color := clBlue;

StringGrid1.DefaultDrawColumnCell(Rect

DataCol

Column

State);

end;

5.Memo的Undo功能

在平常

你可以在MEMO中使用Ctrl+Z进行UNDO操作,但在程序中

你可以使用:

Memo1.Perform(EM_UNDO

0

0);进行UNDO操作.

当你使用一个enable/disable的菜单时

你可以使用:

Undo1.Enabled := Memo1.Perform(EM_CANUNDO

0

0) <> 0;

6.Delphi 中如何改目录的名字

在DOS低版本下这个问题比较麻烦(可能要使用move命令),在Win98/98的DOS窗口下可以简便地使用Ren命令或者在资源管理器中“重命名”。

那么在在Delphi下如何做呢?

调用RenameFile函数,如:

RenameFile('c:\wang\temp'

'c:\wang\tmp');

7.关闭Windows

控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等

ExitWindowsEx(UINT uFlags

DWORD dwReserved);是实现这一功能的API函数。

首先定义常数

const

EWX_FORCE=4;

//关闭所有程序并以其他用户身份登录

EWX_LOGOFF=0;

//重新启动计算机并切换到MS-DOS方式

EWX_REBOOT=2;

//重新启动计算机

EWX_SHUTDOWN=1;

//关闭计算机

运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句:

ExitWindowsEx(How

0);

就可以达到目的。

8.检测磁盘是否变化

最简单的检查CD-ROM或是磁盘是否有过变化的方法是检查其volume号码。你可以简单地运用下面的函数来返回磁盘的volume系列号码GetDiskVolSerialID, 函数代码如下:

function GetDiskVolSerialID(cDriveName:char):DWord;

var

dwTemp1,dwTemp2:DWord;

begin

GetVolumeInformation(PChar(cDriveName+':l')

Nil

0

Result

dwTemp2

dwTemp2

Nil

0);

end;

9.防止Win95显示严重错误

不管你的程序如何反复调试,交给用户之后,总有可能发生你意想不到的错误,如何避免Win95显示出蓝屏,告诉你的用户发生了难堪的意外错误呢?我们可以这样做:

首先定义一个Word型变量:wOldErrorMode,然后在程序的适当部分添加如下代码

wOldErrorMode:=SetErrorMode(SEM_FAILCR-ITICALERRORS);

try

{此处填写程序主体部分}

finally

SetErrorMode(wOldErrorMode);

10.临时路径

有时需要Windows的临时路径来做一些诸如备份等工作,那么就要知道路径在哪?我们可以这样得到它:

var TempPath:pchar;

begin

GetTempPath(20

TempPath);

//返回路径名

edit1.text := TempPath;

end;

11.实现打开文件

打开Windows已经注册的文件其实很简单,根据以下代码定义一个过程:

procedure URLink(URL:PChar);

begin

ShellExecute(0

nil

URL

nil

nil

SW_NORMAL);

end;

在要调用的地方使用

URLink('Readme.txt');

如果是链接主页的话,那么改用

URLink('http://www.pcdigest.com');

12.检测驱动器类型

当要知道所选的驱动器属于什么类型时,请看下面的程序

var x:integer;

driver:pchar;

begin

driver:='f:\';

x := GetDriveType(driver);

Case x of

2: Label1.Caption :='该驱动器是可移动驱动器';

3: Label1.Caption := '该驱动器是固定驱动器';

4: Label1.Caption := '该驱动器是网络驱动器';

5: Label1.Caption := '该驱动器是CD-ROM驱动器';

6: Label1.Caption := '该驱动器是虚拟驱动器';

Else Label1.Caption := '该驱动器无效';

End;

end;

13.驱动器容量

要得到驱动器的容量和剩余容量,用下面的程序

var

driver:pchar;

sec1

byt1

cl1

cl2:longword;

begin

driver:='c:\';//要显示的驱动器名

GetDiskFreeSpace(driver

sec1

byt1

cl1

cl2);

cl1 := cl1 * sec1 * byt1;

cl2 := cl2 * sec1 * byt1;

Label1.Caption := '该驱动器总共容量' + Formatfloat('###

##0'

cl2) + '字节';

Label2.Caption := '该驱动器可用容量' + Formatfloat('###

##0'

cl1) + '字节';

end;

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘