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

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;

在Access 2000中用ADO-VB资料 在Access数据库中实现密码管理的另一种方式 -VB资料 在VB6.0中使ACCESS数据库在网络使用中保持同步 在VB中更改SQL Server数据库结构 在VB中兼容非ACCESS数据库的技巧 在VB中引用dbf及索引文件 在VB中运行Microsoft Access报表的好方法 在VB中直接用ODBC API访问数据库 在数据库应用中, 经常要动态生成 Select 语句,典型的情况:-VB资料 在运行时修改DataEnvironment的连接字符串-VB资料 在抓取資料庫之資料前先計算資料總筆數 -VB资料 增加 MsFlexGrid 的编辑功能-VB资料 真正删除数据库的记录 -VB资料 用VB制作屏幕保护程序 VB多媒体程序设计 VB设计动画时钟 VB游戏写作技巧(1)秀图篇 VB游戏写作技巧(2)网络篇 VB中播放WAV文件 VB中播放三维动画编程一例 Visual Basic 5.0多媒体创作技巧 Visual Basic 5.0中实现视频画中画 Visual Basic 中制作流水灯 Visual Basic动画编程技术 Visual Basic环境下Video/ Audio压缩数据流播放技术 Visual Basic设计多媒体应用程序 Visual Basic影音控制 Web动画图像分解在VB动画设计中的应用 播放 .flc 动画 -VB资料 播放 AVI -VB资料 播放MP3文件 -VB资料 NT启动问题 有没有宁波的兄弟啊,有哪儿要PB或delphi的好点的公司。请介绍下。 关于远程登陆的问题??回答者一定重分相谢。 同志们,朋友们,有空来这里玩玩! 为什么用gethostbyaddr(ip,size,PF_INET)不能把机器名得到????? 如何将Delphi程序改为汇编? 非常着急,各位高手一起来帮我研究一下这个工作流系统怎么用? 简单问题,肯定给分! 据说高程的通过标准是上下午加起来算了? 请斑竹帮忙 请问各位前辈: 在执行中出现"incorrect syntax near 'JCSZ'"的错误提示,如何解决? 下标越界是什么意思啊? 一个基础性的问题,同样一份C/C++源代码可以在UNIX 和WINDOWS运行需要具有的条件是啥??? 在一台计算机上安装两个键盘同时接受输入的问题 对XML文档中的数据能不能进行SELECE操作???? 如何用JAVA实现263邮件那样的邮件粘贴功能 请教各位大哥,小弟最近遇到麻烦,为什么我的程序安装时,出现expsrv.dll无法注册的提示?expsrv.dll有什么作用?怎样闭掉? 如何在两个结构相同的库之间倒数?? 请问如何简单确定右键点击的是哪个控件? 有哪位高手可以给出windows98登录时网络服务的身份验证模块的程序或相关资料的呢?非常感谢啦 在CTreeCtrl中同时使用系统图标与自定义图标的问题?? SHGetFileInfo()为什么在Win2000下工作不正常? 请问高手:DataGrid的问题 jsp和servlet是怎样交互的? 请问 有什么方法能实现 在几个数中随机取出几个数 谢谢 请问:在执行文件DPR中有一段代码出现错误,请各问指点! 两个问题:1 关于.NET中 一个新控件propertyGrid1的使用问题;2 我想生成一个由lable和TextBox合成的控件(label在左,TextBox靠其右),怎么办? 分栏打印 依旧是undefined function mysqsl_connect()问题 急:如何在生成的exe中添加新的属性页,显示更多文件信息? V-DVD ROM!? MSDN上的例子需要uafxcwd.lib,怎么找不到呢? 请问窗口的other事件是如何触发执行的 JSP如何学习 vc在什么时候会引起小喇叭的叫声 请教高手,如果在VB里实现内存共享? 用什么方法可以转换图片类型?譬如将BMP格式的转换为JPEG格式的,请各位大哥给点提示!!! 关于vb script数组和函数功能的二个问题!高难度! 关天打印问题? 只能最小化到屏幕的左下角 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm (有关XMLHTTP) 在php中要取出一段字符串的前n个字节,而又要判断最后一个是中文还是英文,如果是中文则将最后半个字符省略应该怎么做? 有在BCB5中用过sapi5朗读中文的朋友,高分送上! 最初级的问题,关于编译程序的。 重庆市信息产业办公室荣获全国最差信息产业办公室称号 大家用PB创建Jaguar应用程序时,一般创建一个大包还是多个包阿? 奇怪的问题,来者有分!没回答问题的先到先得! 如何把临时表建在内存中 请教一个关于DELPHI多线程的问题 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm(有关XMLHTTP) 比爱情少一点,比友情多一点,即不讨厌又不来电,你能做到吗? 一根轻绳上端悬挂在天花板上下端挂一灯泡,则()A灯泡受到重力对绳拉力是一对平衡力B灯泡受重力和绳对灯泡拉力作用力和反作用力C灯泡对绳拉力绳对灯泡拉力是作用力反作用力D绳对天花 万级的计数单位有哪些? 用滑轮组匀速提升重为3000牛的物体,作用在绳子自由端的拉力为625牛,拉力做功的功率为1875瓦,滑轮组的机 电灯的重力为20N,绳AO与天花板间的夹角为45°,绳BO水平,求绳AO,BO所受拉力的大小 自行车上哪些部位要增大摩擦?哪些部位要减小摩擦?这些部位各用什么方法来增大或减小摩擦力的?具体方法 某滑轮组匀速提升重为2000N的物体,作用在绳子自由端的拉力为625N,物体在20S内匀速上升5m滑轮组机械效率为80%,不计绳重和摩擦.1、绳子段数n2、总功功率3、若提升3000N的物体,滑轮组飞机械效率 一个数最高位是百万位,他是()位数;一个九位数,它的最高位是()位 计数单位“兆”以后是什么? 用滑轮组匀速提起400牛重的物体,作用在绳子自由端的拉力需125牛,拉力做功的功率为250瓦,此时滑轮组的机求 动滑轮的重 如果用这个滑轮组匀速提升900牛重物 作用在绳子上的拉力为多少 机械 一个五位数,它的最高位是什么位?一个九位数,一个十二位数呢? 举四个例子说明怎样减小或增大摩擦力 用滑轮匀速提升重为2000牛的物体,作用在绳子自由端的拉力大小为625牛,拉力的功率为1250瓦,滑轮组的机械公式 就是两物体重叠在一起放在水平桌面上,对下面的物体施加水平向又的5N力,物体保持静止,为什么两物体间没有静摩擦?为什么下面对上面没有摩擦… 物体对支持物的压力(或对悬绳的拉力)大于物体所受重力的现象叫做超重.不是支持力大于重力吗怎么这里说的是压力? 高中物理需平衡摩擦力的实验有哪些 要全! 一道有关摩擦力的高中物理题如图所示,一物体分别沿AB、BO轨道由静止从斜面顶端滑到底端,物体与轨道间的动摩擦因数相同,物体克服摩擦分别为W1和W2则( ).A.W1>W2 B.W1=W2 C.W1 一道科学物理力学上的求绳端拉力F的题重物A是体积为10立方分米,密度为7.9*10三次方 千克/立方米的实心金属块,将它完全浸没在水中,始终未提出水面.若不计摩擦和动滑轮重,要保持平衡,求: 高中物理力学实验哪些需要平衡摩擦力哪些不用?为什么? 如果拉物体,物体没有动,摩擦力是物体的拉力吗?物体动了,无论拉力多少,摩擦力是最大静摩擦吗?为什么最大静摩擦略大于滑动摩擦?为什么静摩擦力大小与压力无关,但与最大静摩擦力成正比? 计数单位是什么 高中物理必修一二中哪些实验需平衡摩擦力? 一道关于摩擦力的高中物理题题目大概就是人两手之间放置若干本书,双手压力不变,求最多能放几本,我一直弄不清书本与书本间的摩擦力的作用力与反作用力,应该是中间的书先掉还是两边的 个级的计数单位有哪些 在牛顿第二定律的实验中,平衡摩擦力的作用是什么,为什么一定要平衡摩擦力,如果不,有什么影响呢,谢谢 从个位起,第五位是万位,第八位是千位,它们的计数单位分别是? 计数单位都有哪些? 与亿相邻的计数单位是()() 与亿位相邻的数位是()位()位 与亿相邻的自然数是()和()快 在数位顺序里,小数点左边第一位是【 】位,计数单位是【 】,第五位是【 】位,计数单位是【 】. 高中物理中,m 用滑轮组匀速提起400牛的中物体,作用在绳子自由端的拉力为125牛,拉力的功率为250瓦,此时滑轮组的机械效率为80%,不计摩擦和绳重求:(1)物体被匀速提升的速度这一小题答案究竟是多少? 一个数的最高位是亿位,这个数肯定是九位数.是对是错? 在数位顺序表里,小数点左边第一位是()位,计数单位是(),第五位是()位,计数单位是().小数部分的最高位是()位,计数单位是() 物体受重力、支持力、摩擦力、拉力,属于弹力的有什么? 一个数的最高位是亿位,这个数一定是一个九位数.对还是错 在数位顺序表中,从个位起,第五位是()位,计数单位是();第八位是()位,计数单位是(). 万级的数位有( ),它们的计数单位分别是( ) 用定滑轮将重力为500牛的物体以1米/秒的速度匀速提升,不记摩擦.求(1)绳子的拉力;(2)10秒拉力做的功. 在光滑或粗糙斜面上拉力与物体重力的关系?注意摩擦力 如何区分“数位”和“计数单位” 当一物体在桌面上静止时,它受到的静摩擦力的大小,方向,作用点个是什么?!物理好的朋友帮忙答一下.有用的再多给!例如:一本新华字典在水平粗糙的桌面静止.那么它受到的静摩擦力的方向, 斜面机械拉力为什么克服物体的重力做功斜面拉力是等于物体重力加摩擦力吗?如果是,那么按网友回答“物体被视为一边向上运动,一边横着运动”向上的力与重力是平衡力,那么横着的力不应 数位和计数单位的区别? 一个十位数,它最高位是(),从右边数第七位是(),计算单位是() 关于重力、弹力、摩擦力下面说法正确的是A.重力与物体的质量和所在的地理位置有关 B.摩擦力可能与物体相对于地面的运动方向相同 C.有弹力就一定有摩擦力 D.在粗糙程度一定的情况下,接 在升降机的天花板上用轻弹簧悬挂一个小球,升降机静止时,弹簧伸长量为4cm,升降机运动时,弹簧伸长量为3cm,则升降机的运动情况可能是A.以a=1/4g的加速度加速下降B.以a=3/4g的加速度加速下降C. 一个九位数,他的最高位是( ),计算单位是( ) 下列关于重力、弹力和摩擦力的说法正确的是?A静摩擦力的大小在零和最大静摩擦力之间 B劲度系数越大的弹簧,产生的弹力越大 C动摩擦因数与物体之间的压力成反比,与滑动摩擦力成正比 D物 电梯的天花板上悬挂着一根弹簧,弹簧下端悬挂一重物,电梯向上做匀速直线运动,电梯停止后小球运动状况 高中物理向心力什么时候是重力减弹力什么时候弹力减重力RT,我高一 关于弹力和摩擦力,下列说法正确的是:A、有弹力一定有摩擦力B、有摩擦力一定有弹力C、摩擦力的大小和弹力大小成正比D、弹力的方向一定和摩擦力方向垂直具体分析一下,最好有反例 数位和计数单位意义不同对吗 “弹力大小与物件受到的重力成正比”这句话对不?为什么? 请举出增大有益摩擦力的两个方法和+减少有害摩擦力的方法 绳端拉动一米,滑轮组内的物体上升几米?有公式吗 挂在天花板上的电灯所受的重力跟和绳对灯的拉力是不是相互作用力?为什么? 增大摩擦力和减小摩擦力的办法? 某人用25牛的力拉滑轮组的绳子移动4米,而总重为80牛的物体只升高1米,则滑轮组的机械效率为多少如果是对的,没有过程也行 竖直悬挂在天花板上的电灯,除了受到重力外还受到一个绳子的弹力,问这个弹力是否就是绳子的拉力? 请举出增大有益摩擦力的两个实例和方法和 减少有害摩擦力的两个实例和方法 用滑轮组匀速提升重2000N的物体,作用在绳子自由端的拉力大小为625N,拉力做功为12500J,滑轮组的机械效率为80%,不计轮与转轴之间的摩擦和绳重.(1)求物体上升的高度;(2)如果使用这个滑
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn