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

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;

Android平台的两大移动威胁现状与变化趋势 推荐五款优秀的PHP代码重构工具 11个值得注意的安全问题及应对,第12个高端黑 微软新举措:打通Windows和WP开发者账户,下调注册费用 合并两应用商店的前兆?微软开始合并Windows Store和WP开发者账户 最难忘的Bug调试经历 LiveCode:让每个人都能开发APP的开发平台 17173总经理赵佳:媒体移动化需抓住三大要素 Django 1.6发布 支持持久数据库链接 如何优化单页面网站搜索引擎? TechCrunch国际创新峰会将于上海举行 极路由:一场由路由器引发的概念盛宴 14nm制程:三星64bit处理器 Exynos 6/S曝光 从Oracle到MySQL,余额宝云实践分享 从南水北调东线工程看物联网,大数据的另一面 不只是技术!成为IT经理必备的十大软技能 看看传说5亿行代码的Healthcare.gov网站的架构 如何走出选择PHP还是ASP.NET的两难境地? 你的设计够档次吗?分享25个奇异的404页面 百度LBS推Openmap战略:无编程经验者可通过拖拽制作个性化地图应用 百万用户时尚分享网站feed系统扩展实践 Twitter上市首战告捷的四大因素 大幕将启!MDCC2013移动开发者大会下周召开 TUP第30期:微软资深专家论如何用Visual Studio开发iOS、Android应用 [开源推荐]Riot.js:不足1KB的MVP客户端框架 研发周报:最难忘的Bug调试经历 NSA如何侵入Google和雅虎的私有数据网络? 飞天5K:开放比开源更有意义 MDCC之移动娱乐游戏峰会:手游金玩奖即将揭晓 开源巨人火狐浏览器:9周岁生日快乐! 感受OpenStack Summit香港大会 如何判断表单没有某个对象??? 怎样删除ListBox所选的内容??? 问大家一个超级难的问题,来者有分啊 请问如何把string类型转换为int类型啊? 我的msdn怎么了! C语言 在局域网中怎么才能使linux访问Internet? 我要问一个烂问题哈哈! 打印 华泰贝通,北京创智你去那家? 学习vc++,我离不开书,或者说了开书后,我什末也做不了,我该如何继续学习? 华泰贝通,北京创智你去那家? 简单问题:PB6.5中调用SQLSERVER的procedure! 打印 怎么去掉单文档视图中的菜单 华泰贝通,北京创智你去那家? 哪里有IDE技术规范的中文资料下载? 华泰贝通,北京创智你去那家? 哪里有IDE技术规范的中文资料下载? 如何把从文本登录该为Xwindow登录方式呢? 华泰贝通,北京创智你去那家? /***VC 6.0 的两个操作*/ 有关编译错误,百思不得其解!!(菜鸟那分) 怎么实现程序的换肤功能呢?? 怎样实现左连接(left outer join),右连接 这个网站制作费能值多少?? 怎样处理异质链表? 报表打开的时候缺省为最大化状态,怎么样为设计时候状态? 除了梅尔森式外,还有哪个比较好用的质数生成式?(要100位左右的) 如何在英文版的WINDOWS2k上输入中文? 为了提高大家专家分的质量,希望大家不要再散分了! 我在sun的网站上下了jdk1.4,请问怎么把JBuilder6的jdk升级到jdk1.4? 大家给推荐windows程序,sdk编程的入门好书(不是MFC的)言者有分 我在http://soft.jx163.com/上下载了JBuilder7但不知道怎样得到注册码 有没有其它免费空间(要支持ASP的) 为什么每次打开水晶报表都要求输入oricle数据库的密码和用户名,这些可以在程序里面完成吗?可以再crystalreportviewer空间里面实现翻页 请解释一下ASSERT()函数的作用 informix问题,紧急求救 求救!高手请进来 求助:build winsock 程序时出现 link 错误。 怎样能够将source safe link 像VC哪样集成到自己的应用程序? 关于用ASP+JMAIL开发一个像网易那种类似功能邮件系统的可行性!!!!大家来讨论一下!!! SQL Server7.0的ODBC驱动哪里有(不想安装客户端) 怎样将form中的值加入到数据库中 这个程序是在哪里和在什么时候执行的???? 急啊,我第一次用SQL SERVER,需要把ID号的属性定义为可自动编号,可是找不到相应的字符,可不可一帮帮我? 怎样使DLG的CLOSE(X)按钮变灰? ???? 关于managementserver的问题 b/s中的中文问题 关于udp发送的一些疑惑,请指点,up,gz也给分?(udp) 初一数学题.比较基础简单的1.在一个长方体蛋糕上切一刀,最多能把这个蛋糕切成 ( ) 块.2.过五边形的一个顶点,可以作______条对角线,这些对角线可以把这个五边形分成_______个三角形.过N边 是否所有含碘的物质都能使淀粉溶液变蓝 【高一化学】三氧化硫是什么状态的?是固体还是气体?两种都有?两种都有刺激性气味? 把一个图形平移,旋转或画出它关于某条直线的轴对称图形,图形的大小均() 孚县草原火灾是怎么这么猛消防员没有有效的自救措施? 在三角形ABC中AD垂直于BC,ae平分角BAC,角B=80度,角C=46度,你能发现角DAE与角B角C的关系吗在三角形ABC中AD垂直于BC,ae平分角BAC,角B=80度,角C=46度,你能发现角DAE与角B角C的关系吗?是要关系,用文 求美丽的平移图案,如下图,图发不出来,不好意思. 草原火灾属于自然灾害吗 己知,如图,在三角形ABC中,<BAC=80度,AD垂直于BC于D,AE平分<DAC,<B=60度.(1)求<AEC的度数.(2)想一想,还有其它的求法吗?写出你的思考. 平移,旋转,轴对称图形有哪些 我是男的,为什么十个手指都是簸箕,代表什么? 甲.乙.丙三人各拿一只水桶在自来水水笼头前等候打水,把他们打水所需的时间分为4分.3分6分.现在只有一个水龙头可以用.问怎样安排这三个人打水顺序,才能使他们总的等候时间最短? 静脉输液港是什么东东 手指头都是簸箕代表什么呀? 如图,已知三角形abc中,角bap=角cap,ab加bp=ac.求证:角b=2角c 工业上用氢气和氧气合成氯化氢时应选择什么条件,理由是什么 如图所示,在梯形ABCD中,∠1=90°,AB=2,CD=1,BC=3,E是AD中点,EC和EB的位置关系,说明理由.3种方法及以上! 三角形ABC的外角∠ACD的平分线CP与内角∠ABC平分线BP交于点P,若∠BPC=40度,求∠CAP我想问一条貌似很简单的数学题 铁,硅,硫,氨水,氨,硫酸 急 为什么氯气和水反应不生成氧气或者氢气而且为什么生成次氯酸和氯化氢而不是氯化氢和氧气啊 在梯形abcd中 AB‖CD,∠A=90,AB=2,BC=3,CD=1,E是AD中点,是判断ED与EB的位置关系,并写出推理过程.详细解答过程 氧气是不是可燃性气体 什么是静脉输液港? 在梯形ABCD中,AB平行CD,角A等于90°,AB等于2,BC等于3,CD等于1,E是AD的中点,试判断EC的位置关系,并写出推理过程!我知道是垂直, 氧气是一种可燃性气体这样的说法对么? 为什么脱离火险要把脚下干草点燃 手臂静脉输液怎么找血管 小明跟着爸爸荡秋千.设摆绳长为3m,悬点在横梁上,小明连同底板质量共为50kg.开始时小明在爸爸的外力作用下使摆绳与竖直方向成37°角处于静止状态.某时刻爸爸放手让秋千由静止开始摆动,假 密闭式静脉输液操作方法标准是什么?请简述. 静脉输液有一种灯可以很明显照射出血管位置,这灯的名字有谁知道 为什么可燃性气体与氧气反应都得点燃才行白痴的我只能问这样的白痴问题,请见谅! 密闭式静脉输液法和静脉输液法是一个概念吗?想知道两者的关系/区别! 世界上最大的草原是南美洲的( ) 高中的物理全是力学吗?RT那为什么我看那些电子课本,必修里边全是力学? 可乐和橙子一起吃有化学反应吗? “南美洲的仓库”是什么草原?寒假作业中的题目 一个滑轮上有一根绳子,下面连接着m,H和M两个重物,滑轮顶部有一个拉力让滑轮以a的加速度上升.求m,M的acceleration还有绳子两头的人tension各是多少.(补充,m,M的速度此时不一样)( 没有摩擦力) 森林与草原的区别是什么呀? 南美洲的粮仓是哪个草原 如图所示,用细线悬挂的小球从A 开始摆动,经过最低点B时摆线被直尺P挡住,球继续摆动至C点.若不计空气阻力,下列说法正确的是 A.A到B过程小球的机械能增加 B.B到C过程小球的机械能减 我手指头是十个斗,有什么说法?如果男朋友是十个簸箕好吗? 在森林中有许多生物,在草原也生物这体现了A 生物种内的多样性B 不同环境下的物种多样性C 生物种内的差异性D 生物种间的差异性 在水平面上放着两个质量分别为2kg和3kg的小铁块1和2,它们之间用一根自由长度为5cm,劲度系数为100N/m的轻弹簧相连,铁块与水平面间的动摩擦因数均为0.2.铁块2受到一大小为20N的恒定水平外力F, 手指有十个簸箕的怎么解释 要准确的解释 被称为“南美洲的粮仓”的是( )草原~~~~~~~~~~ 利用平移,旋转 轴对称 中心对称 设计图案,并说明含义. 我十个手指头都是簸箕,有什么说法? 在△ABC中,AB=AC,点P在BC上,若AP=AD,∠DPC=15°,求∠BAP, 失火怎样自救 手指十个簸箕和十个斗我的手指十个全是簸箕 而我男朋友的十个全是斗 我们这样好吗 有没有什么标准的说法 等容变化时为什么压强和热力学温度成正比 宿舍失火如何自救 正物质和反物质之间有万有引力吗 形容朋友之间情谊深厚的成语 氢气和氯气发生反应,氯化氢是什么产物?氧化产物还是还原产物 反物质与正物质之间是斥力还是引力急需解答 形容情谊深的成语 亲们,谁知道一个人手上有十个簸箕,是什么寓意? 静脉输液时进针后有点血出来是怎么回事?当时针也进了也没肿,滴的也通畅就是输液成功了,可怎么会有点血在我进针的时候出来呢? 赞美音乐才能的成语
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘