Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.09.11;
Скачать: [xml.tar.bz2];

Вниз

Свои кнопки в OpenDialog   Найти похожие ветки 

 
Gu   (2011-05-26 01:14) [0]

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


 
Rouse_ ©   (2011-05-26 11:23) [1]

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

Это 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;


 
icWasya ©   (2011-05-26 17:16) [2]

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


 
Dennis I. Komarov ©   (2011-05-26 17:41) [3]


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

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


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


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

через реестр


 
Rouse_ ©   (2011-05-26 19:58) [5]


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

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


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

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

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

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

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


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1306132376
Tirael
2011-05-23 10:32
2011.09.11
где ehlib (MemtableEh) хранит временные данные


1-1265878460
Владимир З.
2010-02-11 11:54
2011.09.11
Что приходит в flash?


15-1305869509
Проходящий
2011-05-20 09:31
2011.09.11
Помогите народу обыграть шахматиста :)


1-1266036298
reqyz
2010-02-13 07:44
2011.09.11
Переходник между чужим приложением и его файлами


15-1305627810
Den
2011-05-17 14:23
2011.09.11
SQL запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский