Диалоги
Вообще, винда предоставляет возможность расширения некоторых стандартных диалогов с помощью шаблонов и hook-процедуры. Например, для OpenFileDialog'а пишется к примеру, такой rc-скрипт с шаблоном
myres.rc
Code: |
OFT DIALOG -1, 1, 304, 62 STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS CAPTION "" FONT 8, "MS Sans Serif" { CONTROL "Select Options", 100, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP, 69, 4, 224, 52 CONTROL "CheckBox1", 101, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 19, 60, 12 CONTROL "CheckBox2", 102, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 38, 60, 12 } |
потом он компилится
brcc32.exe myres.rc
добавьте ShellAPI в USES
Code: |
ShellExecute(handle, nil, 'rundll32.exe', 'shell32.dll,SHHelpShortcuts_RunDLL AddPrinter', '', SW_SHOWNORMAL); |
Этот код показывает диалоговое окно стандартных свойств файла, как в проводнике Windows
Code: |
{ This code shows the standard file properties dialog like in Windows Explorer }
uses shellapi;
// Thanks to Peter Below (TeamB) for this code procedure PropertiesDialog(FileName: string); var sei: TShellExecuteInfo; begin FillChar(sei, SizeOf(sei), 0); sei.cbSize := SizeOf(sei); sei.lpFile := PChar(FileName); sei.lpVerb := 'properties'; sei.fMask := SEE_MASK_INVOKEIDLIST; ShellExecuteEx(@sei); end;
procedure TForm1.Button1Click(Sender: TObject); begin if Opendialog1.Execute then PropertiesDialog(Opendialog1.FileName); end; |
Code: |
WinExec('rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2',SW_SHOWNORMAL); |
Этот код отображает приложение/файл "открыть с помощью" диалоговое окно Ввод полного пути и имени файла в качестве параметра приведет к открытию
диалогового окна с отображением строки "выберите программу, которую вы хотите использовать, чтобы открыть файл "Имя файла"".
Code: |
uses Shellapi;
procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'control', 'date/time', nil, SW_SHOW); end; |
Code: |
procedure TForm1.Button1Click(Sender: TObject); var Ic: TIcon; begin Ic := TIcon.Create; Ic.Handle := LoadIcon(0, IDI_APPLICATION); Form1.Canvas.Draw(1, 1, Ic); Ic.Handle := LoadIcon(0, IDI_ASTERISK); Form1.Canvas.Draw(32, 1, Ic); Ic.Handle := LoadIcon(0, IDI_EXCLAMATION); Form1.Canvas.Draw(64, 1, Ic); Ic.Handle := LoadIcon(0, IDI_QUESTION); Form1.Canvas.Draw(1, 32, Ic); Ic.Handle := LoadIcon(0, IDI_HAND); Form1.Canvas.Draw(32, 32, Ic); Ic.Handle := LoadIcon(0, IDI_WINLOGO); Form1.Canvas.Draw(64, 32, Ic); Ic.Destroy; end; |
Code: |
uses registry, shellapi;
function Launch_CreateShortCut_Dialog(Directory: string): Boolean; var reg: TRegistry; cmd: string; begin Result := False; reg := TRegistry.Create; try reg.Rootkey := HKEY_CLASSES_ROOT; if reg.OpenKeyReadOnly('.LNK\ShellNew') then begin cmd := reg.ReadString('Command'); cmd := StringReplace(cmd, '%1', Directory, []); Result := True; WinExec(PChar(cmd), SW_SHOWNORMAL); end finally reg.Free; end; end;
{Example}
procedure TForm1.Button1Click(Sender: TObject); begin Launch_CreateShortCut_Dialog('c:\temp'); end; |
Как именно с ними работать чтобы на с: открыть файл?
Похоже я понял что тебя смущает: OpenFileDialog и SaveFileDialog - ничего сами по себе не открывают и не сохраняют. Они нужны только для выбора имени файла. Ставишь их на форму. Там куча свойств и опций - типа исходны каталог, показыать скрытые файлы или нет и т.п. Впрочем по началу можно их вообще не указывать. Тебе надо знать только 1 метод - execute - открыть диалог:
"Выбрать компьютер" - это диалог, предоставляемый сетевыми службами (NTLANMAN.DLL) для Windows для отображения серверов и компьютеров.
Code: |
uses CommCtrl;
// Example: Hide the "Create New Folder" Button.
procedure TForm1.OpenPictureDialog1Show(Sender: TObject); const TB_BTN_NEWFOLDER = 40962; var hWndToolbar, wnd: HWND; tbInfo: TTBButtonInfoA; begin tbInfo.cbSize := SizeOf(TTBButtonInfo); tbInfo.dwMask := TBIF_STATE; tbinfo.fsState := TBSTATE_HIDDEN or TBSTATE_INDETERMINATE;
hWndToolbar := FindWindowEx(GetParent((Sender as TOpenPictureDialog).Handle), 0, 'ToolbarWindow32', nil); SendMessage(hWndToolbar, TB_SETBUTTONINFO, TB_BTN_NEWFOLDER ,LParam(@tbinfo)); end; |
Страница 2 из 3