Delphi技巧点滴

2016-02-19 17:47 9 1 收藏

今天图老师小编要跟大家分享Delphi技巧点滴,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  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;begingetkeyboardstate(ks);//检测键盘函数if odd(ks[VK_NUMLOCK]) thenstatusbar1.panels.items[0].text:=NUMelsestatusbar1.panels.items[0].text:=;if odd(ks[VK_INSERT]) thenstatusbar1.panels.items[1].text:=INSERTelsestatusbar1.panels.items[1].text:=;if odd(ks[VK_CAPITAL]) thenstatusbar1.panels.items[2].text:=CAPITALelsestatusbar1.panels.items[2].text:= ;if odd(ks[VK_SCROLL]) thenstatusbar1.panels.items[3].text:=SCROLLelsestatusbar1.panels.items[3].text:=;end;end.

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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;beginStrPCopy(@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;beginStrPCopy(@wndClass[0], Shell_TrayWnd);wndHandle := FindWindow(@wndClass[0], nil);ShowWindow(wndHandle, SW_RESTORE);end;end;

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

  有时需要让Windows在启动时自动运行你的程序,如何在程序中实现呢?

  使用Regedit查找HKEY_LOCALMACHINESodtware

  MicrosoftWindowsCurrentVersionRun,你会发现所有的Windows启动时调用的程序都在这里,于是你将你的程序增加在这里就可以了。名称为你的程序的标题,其值为你的程序的执行路径和文件名称。

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

  

User Registry;      Var RegF:TRegistry;      begin       RegF:=TRegistry.Create;       RegF.RootKey:=HKEY_LOCAL_MACHINE;      try       RegF.OpenKey(SOFTWAREMicrosoftWindowsCurrentVersionRun,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);beginif Table1.FieldByName(Population).AsInteger  20000000 thenStringGrid1.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:wangtemp, c:wangtmp);

  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;vardwTemp1,dwTemp2:DWord;beginGetVolumeInformation(PChar(cDriveName+:l), Nil,0,Result, dwTemp2,dwTemp2,Nil,0);end;

  9.防止Win95显示严重错误

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

  

wOldErrorMode:=SetErrorMode(SEM_FAILCR-ITICALERRORS);try{此处填写程序主体部分}finallySetErrorMode(wOldErrorMode);

  10.临时路径

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

  

var TempPath:pchar;beginGetTempPath(20,TempPath);//返回路径名edit1.text := TempPath;end;

  11.实现打开文件

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

  

procedure URLink(URL:PChar);beginShellExecute(0, nil, URL, nil, nil, SW_NORMAL);end;

  在要调用的地方使用

  URLink(Readme.txt);

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

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

  12.检测驱动器类型

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

  

var x:integer;driver:pchar;begindriver:=f:;x := GetDriveType(driver);Case x of2: Label1.Caption :=该驱动器是可移动驱动器;3: Label1.Caption := 该驱动器是固定驱动器;4: Label1.Caption := 该驱动器是网络驱动器;5: Label1.Caption := 该驱动器是CD-ROM驱动器;6: Label1.Caption := 该驱动器是虚拟驱动器;Else Label1.Caption := 该驱动器无效;End;end;

  13.驱动器容量

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

  

vardriver:pchar;sec1, byt1, cl1, cl2:longword;begindriver:=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;

来源:http://www.tulaoshi.com/n/20160219/1616038.html

延伸阅读
我的主页: http://www.tommstudio.com/ 在Delphi程序设计中,我们需要通过解除建立的所有对象来避免内存泄漏。但是,如果你在程序中不谨慎小心的话,很容易多次解除同一个对象,这将会引起很严重的错误,造成应用程序崩溃,甚至是死机。 请看下面的程序: procedure TForm1.Button1Click(Sender:TObject); ...
标签: Delphi
   当我们在操作数据集时,往往需要对数据进行筛眩例如:一个名为Customer的数据表,它具有CustNo、CustName、Country、Address、Phone、State、TaxRate等字段,如果只想查看国别为China或顾客号大于1000的顾客记录,就需要对数据集进行过滤。经总结,有下面这些过滤方法:     一、利用TTable和TQuery的Filter属...
本文由lanyus从《奇思异想编程之DELPHI篇》收集整理,转载请注明此处。 一、隐藏任务栏 在WINDOWS中,系统的任务栏本质上也是一个窗口,其窗口类名为“Shell_TrayWnd"。要实现对它的操作,可通过API函 数FindWindow和 ShowWindow来达到目的。 var wndHandle:THandle; wndClass:Array[0..50] of char; ...
◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false); ◇[DELPHI]产生鼠标拖动效果 通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL: var xpanel,ypanel,xlabel,ylabel:integer; PANEL的M...
1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)  以下代码在WIN2K,D6,MDAC2.6下测试通过,  编译好的程序在WIN98第二版无ACCESS环境下运行成功. //在之前uses ComObj,ActiveX //声明连接字符串 Const SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +'Jet OLEDB:Database Password=%s;'; //...

经验教程

988

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部