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

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;

高效敏捷的十大经验法则 佛瑞斯特资讯公司预测2013年云计算的十个变化 百会中小企业CRM年会成功举办 发布CRM选型指南 诺基亚创新体验中心NEIC训练团正式开班 新威胁:IE新漏洞允许网站跟踪鼠标 少编码多思考:代码越多 问题越多 [简讯] JDK 7u10发布 修复安全漏洞 搜狗茹立云:为何搜狗语音助手比Siri更精准? BlackBerry 10最终版SDK Gold发布 谷歌地图正式登陆App Store 为开发者推出SDK 你的云数据的三个最大威胁 公开叫板:Google不打算推出Win8版Gmail和Drive APP备案风波:开发者何去何从? 32位和64位的JVM 我该选择哪个呢? 黑莓“Got Game Port-a-Thon”活动将于12月22日在北京举行 专访Moti Joseph:浏览器安全的经验之谈 四大开源云平台的命运基因 FPS移动游戏:画质不是第一位,操控才是死穴 微软2013年的五个安全预测 应用成武器 王淮,大城小胖论辩HTML5 局部有小雨 技术人员创业后就不再适合继续编码了? Google Dremel vs Apache Hadoop 低功耗之争:英特尔 VS ARM NEIC-诺基亚体验创新中心 助力开发者创享新移动互联时代 Google地图主管Daniel Graf:新设计,新目标 浴火重生:OpenFeint创始人推开源平台OpenKit 紧随AWS数据仓库服务 Rackspace力鼎Cloudant 创业者谈:畏惧失败,但也要拥抱失败 谷歌赢得一场战斗 苹果能否赢得战争? 走进大学校园:是什么让学生成为独立开发者? 移动周报:为什么说独立开发者才是光明康途? 如何添加空记录 非常着急!!请高手赐教!我刚注册,只有200分奉送!!谢谢!!! 哪儿可以提供ExpressNavBar vcl下? 各位高手快来指点一下,是关于动态创建组件的! 自己定义CMP的finder定位器的问题 四舍五入问题 请教牛人,能不能发一段java中有关计时的程序 一个小问题,请大侠指点,立即给分!!! 关于三角函数的问题 一个三百年前已忘得一干二净的问题 打包!!!问题问题。。。在线..... 一个c的问题!! [100分求救]在Canvas或Applet上画的图应该怎样输出为jpg图象呢? 用VC的console application 到底能编多大的程序? 关于程序在初始化时候注册窗口类的问题? 上网很慢 请问从log文件里都能得到哪些信息? 系统设计一般把数据表放一个数据库中还是分到多个数据库中? 树型控件的问题,PB8.03版本,大家遇到过吗? 强烈支持雍亲王倒分!!(江湖无赖) 怎样调用VC写的DLL 同步 兄弟们,我的rh8中怎么没有中文输入法? 在access中如何用函数?我怎么找不到函数库啊。那里有关于access的函数库教程? 请教 我装的DELPHI7.0不知为何在区域设置为“英文”是看到的汉字都成了“????”? <iframe>如何改变大小? 关于水晶报表的问题!(急!!!!)(在线等待~~~~~~~~) 关于vb脚本中运用三角函数的问题 一个三百年前已忘得一干二净的问题 cbc+数据库的问题????????? 能不能控制<input type='fele' ...>的文件类型,如不可输入(readonly全部都不能用了) 在线等待:谁有个最简单的加密算法? 谁有More Effective中文电子书! 请教一段java计时器的问题(送分了) 在ASP中能不能引用.net的框架组件,能的话该怎么做? 占便宜歌 不想周末加班了,帮我啊兄弟们! 小弟是2003年毕业生,想找个软件工程师工作,不知道有什么要求? 一个简单的添加记录语句,求解! 请问通常所说的“横表”“纵表”指什么。 我想在菜单显示之前将其文字都更改掉在哪个函数中写?? 各位高手快来指点一下,是关于动态创建组件的! http://expert.csdn.net/Expert/topic/1180/1180423.xml?temp=.7148706 各位高手快来指点一下,是关于动态创建组件的! http://devserver/mail/abc.nsf?login&Username=abc&Password=12345678 如何得到已有exe文件中的菜单资源,并且添加新的item(UP无分) 在线等待:winxp professional中文版的sn? 进度条的颜色能不能换?老是灰的! 求网卡RealTek8029在Solaris8的驱动程序!!!!!! 如何提高记录的入库速度?内见例子 简单问题,容易回答,容易得分,在线等待。谢谢 高手请进,有关MVC(模型-视图-控制器)设计的讨论 “广”字头下有个“林”,“林”下有个“毛”是什么字?怎么读?新华字典里也查不到 1、初二菱形几何题1、在菱形ABCD中,E、F分别是BC、CD上的点,∠B=∠EAF=60°,∠BAE=18°,求∠CEF的度数. 夏天的早晨,室外的花草,树叶上常常有晶莹的小露珠,这是___现象,寒冷的冬天,清晨起床时常常看到窗户上有一层白色的冰花,这是___现象. 火星上有啥?尽量帮帮 --Do you know___ the men with sunglasses is?---I'm not sure .Maybe a reporter 空内填写what 还是who 小露珠是怎样形成的 《诺贝尔》“近了!近了!火星已经接近炸药了!”这段话表面上写火星接近炸药,实际上还包含了( ) 大学英语六级怎样估分呀?急听力选择对16个,单词6个,句子算1.5个,快速阅读选择加填空是7+2,阅读填词对1个,篇章阅读对8个,翻译就算2个,完型乱写的,算8个吧,作文觉得还可以. This shirt is too short .I wanta one在空的地方填词 干路与支路的区别最好有图谢谢 Do you know ( )the man with glasses is? Aeporter,I think为何这里用who不用what?what不是对职业进行提问的吗? 如何评价武则天,100字以内, 英语翻译是一本英文小说上的.charles waddell chesnuttTales Of Conjure And The Color Line 10 stories.第二个:Dover Thrift Editions 英语翻译 急求!我需要高中期末评语100字左右 甲基红反应(+)、PV反应(-)、血清学反应的具体解释啊! 电路中,干路为什么叫做干路?那支路呢? 对生命价值的看法(100字左右)急! 激素对生物的新陈代谢、生长发育等生理活动有很多重要的调节作用.它们在生物李磊的含量激素对生物的新陈代谢、生长发育等生理活动有很多重要的调节作用。它们在生物体内的含量A很 什么是干路,支路 哲学与文化的关系是什么?请写的详细点 2010年6级估分 第二次考了~作文一般吧快速阅读对8个听力选择题对21个 单词只写对2个 句子算1个简答题只是2个深度阅读7个完形填空是12个 翻译算2个吧可以有多少啊~希望能具体点~为什么还只 文明与文化的区别和联系是什么? 如何理解四个文明的关系? 2010年12月份六级估分.快速阅读对9个听力选择对15个,单词6个,句子有两个写对一大半,一个完全不会,只写了几个单词短文阅读,一个完全不对,其他都是格式错误,是分不给么?传统阅读8个完形12个 文明与文化的区别是什么? 八上, 求2010年12月六级估分高手帮忙~~~跪谢下面是我做错题的情况:作文中等偏上(四级作文120)快速阅读 选择没错 填空算2个仔细阅读 错4个听力 选择错4个 填词没错 句子错一个完形填空 文明与文化有什么区别? 百万亚瑟王,3星4星卡有什么用? 作文一般快速阅读5或6个听力选择21个,填词3个,句子都没写全阅读填空3个,仔细阅读7个完型4个翻译算2个吧 文明跟文化有什么区别? 小露珠有什么作用 火星表面温度 指出下面加点词语在文中的含义.她满不在乎地说:"算了吧,反正我已经站了一个钟头,要是再换回来,你还得站两个钟头 小露珠是怎么形成的?怎样变成的? 什么是干路 什么是支路 This is a black and grey shirt将这句话变成复数形式 “公园里有许多人,男男女女,老老少少.”用英语怎么说 英语翻译下面几个词怎么翻译啊,request for change proposalestimate for change proposalaccept of estimatechange proposalchange orderpending agreement change orderapplication for change proposal有点急, 武则天创造了多少个汉字? 老少爷儿们用英语怎么说? 合同制订,英文怎么说?要标准点的词汇 武则天创造的十二个汉字 先生们,女士们,老少爷们们,用英语怎么说? 英文合同术语Replace with new parts that conform to the specifications,quality and performance as stipulated in this contract,and bear all the expenses to rectify or replace the damaged parts.The seller shall,at the same time,guarantee the quali 简述汉语汉字和中国文化之间的关系 老的英语怎么说? 贸易合同中,下面是关于瓜子油的规格类术语,求大神帮忙翻译,卡这了,谢了FFA (as oleic) – max 0,10%Moisture and impurities: max 0,05%Color (lovibond 5 ¼” cell) max 0,6 red unitsPeroxide value max 2 millimoles / kgIodi 简述文化与经济、政治的关系 最坏的结局是什么---【】括号中填四字成语【趣味题】 2010大学英语六级估分我六级 听力section A 对了7个 ,sectionB 对了7个 ,section C (也就是单词听写)对了7 个 ,句子听写对了一个,其他两个马马虎虎的.快速阅读对了 8 个,仔细阅读对了 13 个,完型填 简述经济.文化三者的关系 文化与文明的联系 初二菱形的几何题目一道----------------------------急在线等——————————已知菱形的一条边与它的两条对角线所成的两个角大小的比为3:2,求这个菱形的各个内角的度数 简述文明产生于自然环境的关系 在括号里填上两个意思相近的字,组成成语( )马( )花 2010 大学英语六级估分我刚考了六级 第一次考 很紧张.希望有经验的同学可以给我估下分.算分器的分数都不太一样.不太相信~下面是我的正确的答案的情况:听力:8,3,5.单词4个,句子一个.快 论述设计与中国文化的关系 小露珠什么意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘