Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Центрирование диалога открытия/сохранения файлов
Посл.ответ Сообщение

Ранг: 10.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 10 декабря 2007 18:06
· Личное сообщение · #1

Назрел один вопросец. Собственно как центрировать диалог открытия/сохранения файлов на WinAPI.
То есть например есть код вида:

*****
type
TOpenFileName = packed record
lStructSize : DWORD;
hWndOwner : hWnd;
hInstance : HINST;
lpstrFilter : PAnsiChar;
lpstrCustomFilter : PAnsiChar;
nMaxCustFilter : DWORD;
nFilterIndex : DWORD;
lpstrFile : PAnsiChar;
nMaxFile : DWORD;
lpstrFileTitle : PAnsiChar;
nMaxFileTitle : DWORD;
lpstrInitialDir : PAnsiChar;
lpstrTitle : PAnsiChar;
Flags : DWORD;
nFileOffset : Word;
nFileExtension : Word;
lpstrDefExt : PAnsiChar;
lCustData : LPARAM;
lpfnHook : function(Wnd: hWnd;
Msg: UINT;
wParam: WPARAM;
lParam: LPARAM): UINT stdcall;
lpTemplateName : PAnsiChar;
end;

const
OFN_LONGNAMES = $00200000;
OFN_EXPLORER = $00080000;
OFN_FILEMUSTEXIST = $00001000;
OFN_PATHMUSTEXIST = $00000800;
OFN_HIDEREADONLY = $00000004;

*****

procedure OpenFileDialog;
var
OpenFile : TOpenFileName;
begin
FillChar(OpenFile, SizeOf(TOpenFileName), 0);
with OpenFile do
begin
lStructSize := SizeOf(TOpenFileName);
hInstance := Inst;
hWndOwner := hWnd;
lpstrFilter := 'All Files (*.*)'+#0+'*.*'+#0+#0;
nFilterIndex := 1;
nMaxFile := SizeOf(FileName);
lpstrTitle := PChar(String_TitleOpen);
lpstrFile := FileName;
lpstrInitialdir := PChar(paramstr(0));
Flags := OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY;
if GetOpenFileNameA(OpenFile) = True then
begin
Наш код;
end
end;
end;

*****

Гм, вроде достаточно кода привел.
Центрирую диалог обычно так:

*****
x,y : Integer;
*****
x := GetSystemMetrics(SM_CXSCREEN);
y := GetSystemMetrics(SM_CYSCREEN);
MoveWindow(Хэндл, (x div 2) - (ширина div 2), (y div 2) - (высота div 2), ширина, высота, true);
*****

Только вот с хэндлом диалога открытия файлов проблема. Как центрировать такой диалог в своей программе, учитывая что по умолчанию он отображается по верхней координате родительского.



Ранг: 10.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 10 декабря 2007 23:30 · Поправил: Exception
· Личное сообщение · #2

Блин сам отвечаю на свой вопрос.
Тока щас доперло...
Пример в аттаче.
Тему можно закрывать.
P.S. На глаз указал размеры, хотя в системной библиотеке у шаблона они другие. Подправьте плиз код для изменения метрик диалога, а то при изменении оформления размеры иногда меняются и диалог может получиться обрезанным что не гуд.

8bfd_10.12.2007_CRACKLAB.rU.tgz - CenterDialog.rar



Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 11 декабря 2007 15:35
· Личное сообщение · #3

Ты не в том форуме топик создал. Такие темы создаются в форуме "Программирование".



Ранг: 10.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 18 декабря 2007 17:04
· Личное сообщение · #4

SeaMan пишет:
Ты не в том форуме топик создал. Такие темы создаются в форуме "Программирование".

У раздела описание про низкоуровневое мол так и так. А тут максимум хук на функцию. Так что по идее в этом разделе...


 eXeL@B —› Вопросы новичков —› Центрирование диалога открытия/сохранения файлов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати