程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi編程技巧點滴

Delphi編程技巧點滴

編輯: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;
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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved