Форум: "Начинающим";
Текущий архив: 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