Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свои кнопки в OpenDialog


Gu ©   (2011-05-26 01:14:00) 

Можно ли в опен(сейв) диалог стандартный добавить свою кнопку в левое окошко (там где "мой компутер", "мои документы", "сеть" и тп.? Если можно, то пример плз. Например чтобы при нажатии свой путь активным становился. Или как вариант заменить там все кнопки на кнопки дисков в системе. Возможно, что проще свой диалог создать, но если есть возможность, то былобы проще так.


Gu   (2011-05-27 07:21:00) [1]

Нашел, но на Win7 это не фурычит, тока на Xp.
http://fhasovic.blogspot.com/2004/09/custom-places-bar.html


Gu   (2011-05-27 03:47:00) [2]

>> через реестр

дайте ключ, где это лежит

>> в MSDN гарантированно есть

там все есть, подскажите ссылку на статью. Это все равно что написать ищи в гугле, а я не за этим тут спрашивал


Rouse_   (2011-05-26 19:58:00) [3]


> icWasya ©   (26.05.11 17:16) [2]
>
> Человек спрашивал немного не про то.

Слева дак-же через шаблон, параметры шаблона на вскидку не помню, в MSDN гарантированно есть.


QAZ   (2011-05-26 18:51:00) [4]


> Можно ли в опен(сейв) диалог стандартный добавить свою кнопку
> в левое окошко

через реестр


Dennis I. Komarov   (2011-05-26 17:41:00) [5]


> Слева располагается список снандартных папок, и вопрос был
> "как добавить свою папку именно туда";

Нечего юзерам впаривать свои супер-пупер диалоги, вместо стандартных...
Вот увести его в свою диру, еще куда не шло, и то с возможностью настройки...


icWasya   (2011-05-26 17:16:00) [6]

Человек спрашивал немного не про то. (Я ответ тоже не знаю).
Слева располагается список снандартных папок, и вопрос был "как добавить свою папку именно туда";


Rouse_   (2011-05-26 11:23:00) [7]

Ну например вот так.

Это RC файл:

SAVE_FILE_TEMPLATE DIALOG -1, -1, 304, 22
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
CAPTION ""
FONT 8, "MS Sans Serif"
{
CONTROL "Добавить дату и время к названию файла", 101, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 69, 0, 224, 21
}


Это код:

unit CustomOpenSaveDialog;

interface

uses
 Windows, Messages, CommDlg, Dialogs;

{$R 'savedlgcheck.res' 'savedlgcheck.rc'}

type
 TCheckedSaveDialog = class
 private
   FFileName, FInitialDir: String;
 public
   function Execute(Handle: THandle): Boolean;
   property FileName: String read FFileName;
   property InitialDir: String read FInitialDir write FInitialDir;
 end;

var
 CheckedSaveDialog: TCheckedSaveDialog = nil;

implementation

uses SysUtils;

const
 MultiSelectBufferSize = High(Word) - 16;

var
 OpenSaveFileName: TOpenFileName;
 SaveFilePath: array [0..MAX_PATH - 1] of Char;
 OpenFilePath: array [0..MultiSelectBufferSize - 1] of Char;

{ TCheckedSaveDialog }

function HookSaveDialog(Wnd: HWND; Msg: UINT;
 WParam: WPARAM; LParam: LPARAM): UINT stdcall;
var
 TempPath, ResultPath: String;
begin
 Result := 0;
 case Msg of
   WM_INITDIALOG:
     CheckDlgButton(Wnd, 101, BST_CHECKED);
   WM_NOTIFY:
   case
     POFNotify(lParam)^.hdr.code of
       CDN_FILEOK:
         if IsDlgButtonChecked(Wnd, 101) = BST_CHECKED then
         begin
           TempPath := OpenSaveFileName.lpstrFile;
           ResultPath := ExtractFilePath(TempPath);
           ResultPath := ResultPath + '(';
           ResultPath := ResultPath +
             StringReplace(DateTimeToStr(Now), ':', '-', [rfReplaceAll]) + ') ';
           ResultPath := ResultPath + ExtractFileName(TempPath);
           Move(ResultPath[1], OpenSaveFileName.lpstrFile[0], Length(ResultPath));
         end;
   end;
 end;
end;

function TCheckedSaveDialog.Execute(Handle: THandle): Boolean;
var
 StandartDialog: TSaveDialog;
begin
 ZeroMemory(@SaveFilePath[0], MAX_PATH);
 ZeroMemory(@OpenSaveFileName, SizeOf(TOpenFileName));

 OpenSaveFileName.lStructSize := SizeOf(TOpenFileName);
 OpenSaveFileName.hwndOwner := Handle;
 OpenSaveFileName.hInstance := hInstance;

 OpenSaveFileName.lpstrFilter :=  'Файлы пользовательских баз (*.gsd)'#0'*.gsd'#0#0;
 OpenSaveFileName.lpstrTitle := 'Выберите имя файла';
 OpenSaveFileName.lpstrFile := SaveFilePath;
 OpenSaveFileName.nMaxFile := MAX_PATH;
 OpenSaveFileName.lpTemplateName :='SAVE_FILE_TEMPLATE';
 OpenSaveFileName.lpfnHook := HookSaveDialog;
 OpenSaveFileName.Flags := OFN_EXPLORER or OFN_CREATEPROMPT or
   OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or
   OFN_PATHMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLETEMPLATE or
   OFN_ENABLESIZING;
 OpenSaveFileName.lpstrInitialDir := PChar(FInitialDir);
 OpenSaveFileName.lpstrDefExt := 'gsd';
 Result := GetSaveFileName(OpenSaveFileName);

 if not Result then
 begin
   if CommDlgExtendedError <> 0 then
   begin
     StandartDialog := TSaveDialog.Create(nil);
     try
       StandartDialog.Filter :=
         'Файлы пользовательских баз (*.gsd)|*.gsd';
       StandartDialog.Title := OpenSaveFileName.lpstrTitle;
       StandartDialog.InitialDir := OpenSaveFileName.lpstrInitialDir;
       StandartDialog.DefaultExt := OpenSaveFileName.lpstrDefExt;
       Result := StandartDialog.Execute;
       OpenSaveFileName.lpstrFile := PChar(StandartDialog.FileName);
     finally
       StandartDialog.Free;
     end;
   end;
 end;
 
 if Result then
   FFileName := OpenSaveFileName.lpstrFile
 else
   FFileName := '';
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо