to use extended Windows dialogs

网友投稿 819 2022-09-19

to use extended Windows dialogs

to use extended Windows dialogs

Today I want to show a few samples how you can use the extended dialogs from MS Windows (Find Files, Find Computer, Select Icon etc) in own code.

Usually the MessageDlg is most used from standard dialogs but inside of Windows you'll find a lot of other useful dialogs too.

The any such dialog is declared in the Shell32.dll library and you can use it so:

1. Select an icon

this dialog is a same which you'll see when you'll edit an icon of any lnk-file (icon on desktop, for example)

Declaration:

function PickIconDlgA(OwnerWnd: HWND; lpstrFile: PAnsiChar; var nMaxFile: LongInt; var lpdwIconIndex: LongInt): LongBool; stdcall; external

'SHELL32.DLL' index 62;

Example (icon of current APPlication will be changed!):

procedure TForm1.Button4Click(Sender: TObject);

var

FileName: array[0..MAX_PATH-1] of Char;

Size, Index: LongInt;

begin

Size := MAX_PATH;

FileName := 'c:\windows\system\shell32.dll';

if PickIconDlgA(0, FileName, Size, Index) then

begin

if (Index <> -1) then

Application.Icon.Handle := ExtractIcon(hInstance, FileName, Index);

end;

end;

Of course, you can define any other file and in the dialog you'll see available icons of this executable file.

2. Find Computer

Declaration:

function SHFindComputer(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): Boolean; stdcall; external 'Shell32.dll' index 91;

Example:

begin

SHFindComputer(nil, nil);

end;

3. Find Files

Declaration:

function SHFindFiles(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): Boolean; stdcall; external 'Shell32.dll' index 90;

Example:

begin

SHFindFiles(nil, nil);

end;

Here the first parameter is a folder where you want to begin a search (nil is a Desktop). The second parameter allow to define a previous saved state of search process.

IMPORTANT:

Note that SHFindFiles and SHFindComputer are not modal dialogs (these dialogs will be started in separated thread) so the result of function will be

True

if dialog is created succesfully.

4. Shutdown dialog

Declaration:

procedure ExitWindowsDialog(ParentWnd: HWND); stdcall; external 'Shell32.dll' index 60;

Example:

begin

ExitWindowsDialog(0)

end;

5. RestartDialog

this dialog allow to ask end-user about Windows restarting and is used when changes are made to system that require a shutdown/restart before they will take effect.

Declaration:

function RestartDialog(ParentWnd: HWND; Reason: PAnsiChar; Flags: LongInt): LongInt; stdcall; external 'Shell32.dll' index 59;

Example:

begin

if RestartDialog(0, 'I want to call a RestartDialog ', EW_RESTARTWINDOWS)

= IDYES then

ShowMessage('succesfully started')

end;

You can define any reason of restarting (second parameter - additionally to default text or nil for default only) and use the another flag (one from the next available):

EWX_LOGOFF

EWX_SHUTDOWN

EWX_REBOOT

EW_RESTARTWINDOWS

EW_REBOOTSYSTEM

EW_EXITANDEXECAPP

This dialog is very useful for application which have embedded install procedure.

6. OutOfSpace

Will display a notification dialog about "Out Of Space" for some defined drive.

Declaration:

procedure SHHandleDiskFull(Owner: HWND; Drive: UINT); stdcall; external

'Shell32.dll' index 185;

Example:

begin

SHHandleDiskFull(0, 2);

end;

Note that second parameter is Drive number where 0 is A:, 1 is B:, 2 is C: etc

Of course, in the Shell32.dll you'll find other dialogs too (Object Properties, Map Network Drive, Browse For Folder etc) and you can use these dialogs without any problems.

IMPORTANT:

Don't forget to add ShlObj and ShellAPI units into uses-clause.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Check if Windows taskbar's auto hide feature enabled
下一篇:C# 结构与类(cctv5体育节目表)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~