Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизКак расположить окно выбора папки по центру экрана? Найти похожие ветки
← →
Well (2004-02-13 00:20) [0]Создаю окно выбора папки с помощью функции selectdirectory, но оно появляется где то справа внизу, как сделать чтобы по центру экрана появлялось это окно?
← →
Defunct (2004-02-13 01:53) [1]гхм..
(Окно.Handle as TControl).Top := ...
(Окно.Handle as TControl).Left := ...
Если это форма
(Окно as TForm).Position := poScreenCenter;
А откуда такая функция?
← →
Babay (2004-02-13 06:20) [2]То Defunct
Эта функция есть в Д7, в Д6 незнаю не юзал. Является оболочкой к стандартной SHBrowseDialog (кажись не ошибся).
Д5 то же была но была реализована дядей борманом и выглядела совсем не так.
вариант
(Окно.Handle as TControl).Top := ...
(Окно.Handle as TControl).Left := ...
не пройдет т.к. функция ждет пока закроется окно диалога и прога соответственно тоже ждет.
для решения проблемы берем бормановскую реализацию и чуток подправляем (kexit наверное это в отдельный модуль сунуть и пользовать оттуда)
function SelectDirectory( handle:THandle;const Caption: string; const Root: WideString;
var Directory: string): Boolean;
.......
.......
with BrowseInfo do
begin
hwndOwner := Handle;
pidlRoot := RootItemIDList;
......
при вызове передаем Handle формы и диалог будет показываться над формой.
← →
Well (2004-02-13 08:42) [3]А есть какие нибудь другие диалоги для выбора папки?
← →
Babay (2004-02-13 09:20) [4]Делай сам ручками и будет любая функциональность.
← →
Dimka Maslov (2004-02-13 09:26) [5]http://www.endimus.com/oldcontent/files/index_en.php?page=tbrowseforfolder.htm
В компоненте задаёшь обработчик события OnSetPosition в которой перемещаешь диалог куда захочешь
← →
Юрий Зотов (2004-02-13 09:48) [6]> Defunct (13.02.04 01:53) [1]
Значит, Handle as TControl, говорите?
Извините, а Вы не могли бы пояснить, каким образом эта конструкция вообще может сработать?
← →
Babay (2004-02-13 10:50) [7]БРАВО Юрий Зотов © [6]
Пришлось мне покраснеть от стыда.
Я понял что человек имел ввиду, но совершенно не обратил внимание на то, как он это имел ввиду....
Еще раз браво Юрий.
← →
PVOzerski (2004-02-13 11:18) [8]Ну нельзя же с хэндлами работать как с объектами... А рецепт я бы предложил такой. Сцапал бы хэндл окна из параллельного thread"а и задал ему координаты через MoveWindow. А чтобы поймать хэндл, перед вызовом selectdirectory запустил бы этот самый поток, который покрутил бы в себе цикл со sleep, пока класс верхнего окошка ни стал бы соответствовать классу, свойственному диалогу вызова папок (GetForegroundWindow, GetClassName), затем вызвал бы MoveWindow и терминировался.
← →
Defunct (2004-02-13 20:00) [9]Юрий Зотов © (13.02.04 09:48) [6]
> Значит, Handle as TControl, говорите?
В 2 часа ночи можно и не такое написать.
хотел вначале предложить Handle окна отыскать с помощью GetWindow() и изменить его координаты, потом забыл стереть, вот и получилось то что получилось.
Babay © (13.02.04 10:50) [2]
Хорошо хоть кто-то в этой конференции не ставит своей целью кого-то подловить.
← →
Юрий Зотов (2004-02-13 20:07) [10]> Defunct (13.02.04 20:00) [9]
Говорить нужно о "подлове" человека, задавшего вопрос. Он же не виноват, что ему отвечали в 2 часа ночи.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c