在寫程序的時候,有時我們為了省力,或者為了別的目的,我們常常想借用系統的對話框,那麼,如何才能調用系統對話框呢?一位朋友是VB中是這樣調用“打開方式”對話框的:
winexec(PChar('rundll32 shell32,OpenAs_RunDLL '+FilePath),SW_SHOWDEFAULT);
這句代碼是運行rundll32.exe,讓它調用shell32.dll中的資源來實現的。方法可行,但是有許多像我一樣的菜鳥並不明白如何調用shell32.dll中的寶貴資源,我們應該如何去做呢?
下面說說我是如何調用的:
一、調用系統“About”對話框:
首先在uses中加入SHellApi,
然後寫下如下代碼:
procedure TForm1.Button1Click(Sender: TObject);
var
shellapp: variant;
begin
ShellAboutW(0,'Timer v1.03','kedy版權所有',1);
end;
其他步驟我不詳述。運行後點擊button就會彈出標准的Windows關於對話框。對話框標題為"關於Timer v 1.03"。大家可 以看到,在程序中我使用了ShellAboutW這個函數。在MSDN2003中這個函數 是這樣描述的:
ShellAbout Function
Displays a ShellAbout dialog box.
Syntax
int ShellAbout( HWND hWnd,
LPCTSTR szApp,
LPCTSTR szOtherStuff,
HICON hIcon
);
Parameters
hWnd
[in] Window handle to a parent window. This parameter can be NULL.
szApp
[in] Pointer to a null-terminated string containing text that will be displayed in the
title bar of the ShellAbout dialog box and on the first line of the dialog box after the
text "Microsoft". If the text contains a separator (#) dividing it into two parts, the
function displays the first part in the title bar and the second part on the first line
after the text "Microsoft".
szOtherStuff
[in] Pointer to a null-terminated string containing text that will be displayed in the
dialog box after the version and copyright information.
hIcon
[in] Icon that the function displays in the dialog box. If this parameter is NULL, the
function displays the Microsoft® Windows® or Microsoft Windows NT® icon.
什麼意思我想不用我來翻譯了吧,這些東西自己去看最好。
二、調用關機對話框
我們只要把begin部分代碼改為
begin
shellapp := CreateOleObject('Shell.Application');
shellapp.ShutDownWindows;
end;
其他部分不變。運行點擊button我們就可以看到標准的系統關機對話框了。
其實這還是調用的WindowsAPI函數shutdownWindows.
這個部分使用的是Windows的shell application的method中的兩個函數。method其他的函數還有:
BrowseForFolder、CascadeWindows、ControlPanelItem、EjectPC、Explore、FileRun、FindComputer、 FindFiles、Help、 MinimizeAll、NameSpace、Open、RefreshMenu、SetTime、TileHorizontally、 TileVertically、TrayPropertIEs、 UndoMinimizeALL。我也只是學會了使用其中的幾個函數。詳細情況 請大家查看MSDN中有關shell object的內容。
我最想說的是,學Windows下的程序一定要用MSDN。這個庫裡的資源讓我實在驚歎不已,大家可以看一看,我想你也會這樣認為的。