Страница 1 из 1

ColorDialog

Добавлено: 19 дек 2005, 13:09
Viktor Zull
Можно ли встроить ColorDialog в форму, чтобы он не открывался в отдельном окне. В каком файле находится его окно. Если встроить его нельзя, подскажите, как можно задать его положение на экране (left,top).

Добавлено: 15 янв 2006, 00:36
Naeel Maqsudov
см функцию ChooseColor в справке по Win32.

Суть в следующем. Все стандартные диалоги Windows (выбор цвета, выбор шрифта и пр.) могут быть вызваны с передачей им некой CallBack-функции.

Надо написать CallBack функцию, которая обработает сообщение WM_INITDIALOG
Затем вызвать ChooseColor и в аргументе LPCCHOOKPROC передать указатель на эту вашу CallBack-функцию.

При инициализации диалогового окна Windows вызовет вашу функцию, а уж в ней то и будет установка позиции окна.

Внимательно читайте справку. Там все рассказано, но примеров нет. :(

Добавлено: 16 янв 2006, 23:33
Blood_Magic
В поставке Delphi, точно не помню какой версии (5,6,7) есть пример встраивания в OpenDialog или SaveDialog (опять же точно не помню) CheckBox, я думаю кое-что можно там подглядеть.

Добавлено: 17 янв 2006, 13:05
Eugie
Вопрос был, можно ли встроить ColorDialog в форму (т.е. как фрейм).
Ответ: нельзя. Если бы это был немодальный диалог, можно было бы динамически заменить тип окна на дочернее, и задать в качестве родителя целевую форму. Даже в этом случае не уверен, что заработает.

Добавлено: 17 янв 2006, 17:30
Duncon
Таки, а почему не залесть в модуль, посмотреть как он создается и написать нечто под себя...

Добавлено: 18 янв 2006, 12:36
Eugie
Дык, проблематично залезть внутрь API-шного ChooseColor :)
Насчет нач.позиции: можно через callback, как предложил Наиль, а можно сразу после создания найти окно (FindWindow) и задать его положение (SetWindowPos или MoveWindow).

Добавлено: 20 янв 2006, 12:14
Duncon
Ну на самом деле ColorDialog не такая уж сложная штука, я бы ее для себя написал как надо...

А как решение - можно создать видимось, так сказать зрительный обман что он в форме...