delphi3000.com - the free delphi knowledge platform
delphi3000.com - the free delphi knowledge platform
Have a look at your member-status

connecting people's knowledge


  - Recent ArticlesRSS feed for Recent Articles on delphi3000.com
  - List of All Articles
  - Top Viewed Articles
  - Articles (+Attachem.)
  - Articles Of Interest
  - Categories
  - Top Uploader
  - Search
  - Index

  - My Home
  - Submit an Article
  - My Articles
  - My Personal Data
  - My Bookmarks
  - Activities
  - Login/Logout

  - Sign Up
  - Why Sign Up
  - Newsletter

  - Press
  - Advertise

  - Contact
  - Feedback



Community
Borland
ClubeDelphi
Dr. Bob
UK-BUG
Delphi Meetings
Planeta Delphi








Share this article with friendsShare this article with friends
Rate this articleRate this article - to keep the quality of delphi3000.com !
Comment this article or read through previous comments (1)


to use extended Windows dialogsGo to Mike Shkolnik's websiteFormat this article printer-friendly!Bookmark function is only available for registered users!
Product:
Delphi all versions
Category:
Win API
Skill Level:
Scoring:
Last Update:
12/27/2001
Search Keys:
delphi delphi3000 article borland vcl code-snippet Windows dialog ExitWindow FindComputer Icon
Times Scored:
2
Visits:
5850
Uploader: Mike Shkolnik
Company: Scalabium Software
Reference: http://www.scalabium.com/faq/dct0131.htm
 
Question/Problem/Abstract:
How can I use extended Windows dialogs?
Answer:



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.





Please rate this article!
Skill level:
BeginnerExpert

Useful:
No!Very!

Overall rating:
PoorExcellent



Comments to this article
Write a new comment
VCL for these exist!
    Lloyd Kinsella (Jan 3 2002 2:25AM)

I wrote some VCL a long time ago to access these, you can find them at:

http://www.workshell.co.uk/dev/components/shelldlg/index.htm
Respond














 
Sign up to consume product discounts for Bronze memberships !

read more


   


  Community Ad of
L. Rosenstein
 
   














 







     
  Copyright © 2000 - 2007 delphi3000.com - All rights reserved. Terms of use. || Privacy
delphi3000.com is a service by bluestep.com IT-Services GmbH (Vienna)