Delphi软件的使用技巧,请高手指点一些使用心得。
1个回答
2012-03-13 · 知道合伙人软件行家
关注
展开全部
span class="font">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;
wnd ss : 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;
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;
wnd ss : 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;
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询