Диалоги
Перевод одноимённой статьи с сайта delphi.about.com )
Стандарные диалоговые окошки
Практически любое приложение Windows использует стандартные диалоги, встроенные в операционную систему, для открытия и сохранения файлов, поиска текста, печати, выбора шрифта или установки цвета.
В этой статье мы рассмотрим основные свойства и методы этих диалогов и, особенно, сфокусируем внимание на диалогах Open и Save.
Code: |
function DisconnectNetworkDrive(Wnd: HWND = 0): DWORD; begin if Wnd = 0 then Wnd:=FindWindow('Shell_TrayWnd',''); Result:=WNetDisconnectDialog(Wnd, RESOURCETYPE_DISK); end; |
Пример использования:
Code: |
DisconnectNetworkDrive(Application.Handle); |
Code: |
uses ShellAPI, ShlObj;
procedure TForm1.Button1Click(Sender: TObject); var TitleName : string; lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char; begin FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); BrowseInfo.hwndOwner := Form1.Handle; BrowseInfo.pszDisplayName := @DisplayName; TitleName := 'Please specify a directory'; BrowseInfo.lpszTitle := PChar(TitleName); BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId nil then begin SHGetPathFromIDList(lpItemID, TempPath); ShowMessage(TempPath); GlobalFreePtr(lpItemID); end; end; |
Code: |
procedure TStartForm.NetBtnClick(Sender: TObject); var OldDrives: TStringList; i: Integer; begin OldDrives := TStringList.Create; // Запоминаем список дисков OldDrives.Assign(Drivebox.Items); // Показываем диалог подключения if WNetConnectionDialog(Handle, RESOURCETYPE_DISK) = NO_ERROR then begin // Обновляем список дисков DriveBox.TextCase := tcLowerCase; for i := 0 to DriveBox.Items.Count - 1 do begin // Ищем свободный логический диск if Olddrives.IndexOf(Drivebox.Items[i]) = -1 then begin // Показываем первый найденный логический диск DriveBox.ItemIndex := i; // Каскадируем обновление на список подключенных каталогов и др. DriveBox.Drive := DriveBox.Text[1]; end; end; DriveBox.SetFocus; end; OldDrives.Free; end; |
Для вывода диалога "Обзор папок" существует функция SHBrowseForFolder. Для выбора того, какие папки будут выведены в диалоге, используется функция SHGetSpecialFolderLocation. В этой программе выводится рабочий стол со всеми подпапками (папки рабочего стола, Мой компьютер, Корзина). Для выбора папки в меню пуск используется CSIDL_STARTMENU вместо CSIDL_DESKTOP.
Автор: Terrance Hui
Пример показывает стандартное диалоговое окно, которое обычно используется для подтверждения дальнейших действий в любой программе с галочкой "Don't show this message again."
Используем функцию CreateMessageDialog и добавляем любой компонент до того как будет вызвана ShowModal.
Code: |
ShellExecute(Application.Handle, 'open', 'sysdm.cpl', nil, nil,sw_ShowNormal); |
Code: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) SaveDialog1: TSaveDialog; Button1: TButton; procedure SaveDialog1Show(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public
end;
var Form1: TForm1;
implementation
{$R *.dfm}
// Стили: $7029 - значки, $702B - список, $702C - таблица, $702D - эскизы, $702E - плитка // ставим, например таблицу function NewSaveDlgProc(wnd:HWND; uMsg:integer; wParam:integer; lParam:integer):integer; stdcall; begin if uMsg=WM_SHOWWINDOW then begin MoveWindow(wnd, 10, 30, 500, 300, True) ; SendMessage(FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil), WM_COMMAND, $702C, 0); end; result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam) end;
procedure TForm1.SaveDialog1Show(Sender: TObject); begin SetWindowLong(GetParent(SaveDialog1.Handle),GWL_USERDATA, SetWindowLong(GetParent(SaveDialog1.Handle),DWL_DLGPROC,DWORD(@NewSaveDlgProc))); end;
procedure TForm1.Button1Click(Sender: TObject); begin SaveDialog1.Execute end;
end. |
Автор: Krid
Code: |
uses ComObj;
{....}
procedure TForm1.Button1Click(Sender: TObject); var shell: Variant; begin shell := CreateOleObject('Shell.Application'); shell.ShutdownWindows; end; |
Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.
Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.
Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна - кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.
Приведенный пример показывает использование DDE для вызова диалога 'Найти файлы и паки' Explorerа. Диалог открывается на каталоге "C:\Download".
Code: |
procedure TForm1.Button1Click(Sender: TObject); begin with TDDEClientConv.Create(Self) do begin ConnectMode := ddeManual; ServiceApplication := 'explorer.exe'; SetLink( 'Folders', 'AppProperties'); OpenLink; ExecuteMacro('[FindFolder(, C:\DOWNLOAD)]', False); CloseLink; Free; end; end; |
Страница 1 из 3