Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Как расположить окно выбора папки по центру экрана?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
8-80027
AAA111
2003-10-23 21:16
2004.02.25
Печать на принтер


14-80297
Alone
2004-02-03 11:26
2004.02.25
Глюки Windows не являются ошибками


3-79645
deadbitch
2004-01-28 16:07
2004.02.25
Пустые клетки в Excel через ADO


1-79722
Senator
2004-02-12 16:59
2004.02.25
ComboBox


1-80000
Checist [root]
2004-02-06 17:22
2004.02.25
Обращение к сылке