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

Вниз

Наследники TOpenPictureDialog не дружат с сообщениями   Найти похожие ветки 

 
Gepard   (2004-05-21 12:49) [0]

Добрый день! Может кто подскажет, почему наследники от TOpenPictureDialog с добавленными контролами работают некоректно. К примеру, добавил TEdit под панель Preview, а он рисуется не 3D. TMaskEdit не получает сообщение CM_EXIT и, соответсвенно, не делает ValidateEdit. В чем проблема?


 
Shkut ©   (2004-05-21 13:15) [1]

Без исходников этого наследника сказать что-либо трудно.
Нечего проанализировать.


 
Юрий Зотов ©   (2004-05-21 17:48) [2]

Диалоговые компоненты Delphi только вызывают функции API, которые уже и показывают само окно диалога. Соответственно, это окно есть именно окно Windows (а не форма Delphi) и содержит оно тоже контролы Windows (а не компоненты Delphi).

Ни о какой Delphi это окно и его контролы не имеют ни малейшего понятия - поэтому вполне естественно, что они не получают и не обрабатывают сообщения CM_xxx и CN_xxx, механизмы рассылки и обработки которых реализованы на уровне VCL, а не Windows.

Но никто не запрещает сделать для диалога любую свою форму, а в наследнике диалога перекрыть метод Execute:

function TMyDialog.Execute: boolean
begin
 with TMyDialogForm.Create(Self) do
 try
   ... // Настройка формы (если требуется)
   DoShow;
   Result := ShowModal = mrOK;
   DoClose;
   if Result then
   begin
     ... // Берем из формы данные
   end
 finally
   Free
 end
end;


 
Gepard ©   (2004-05-24 12:14) [3]

2Юрий Зотов

Или я чего-то не понял или.. При такой реализации нужно самому на TMyDialogForm лепить просмотр директорий, выбор файлов и т.д. Форма появляется, но никаким TOpenPictureDialogEx(наследник от TOpenPictureDialog) не пахнет.

Мож я не так идею понял?


 
Igorek ©   (2004-05-28 17:50) [4]


> Юрий Зотов ©   (21.05.04 17:48) [2]


>      ... // Берем из формы данные

Можно уточнить, как именно метод, который вызовет Execute возьмет данные?


 
Gepard ©   (2004-06-01 17:49) [5]

Я, конечно же, дико извиняюсь, но хотелось бы услышать версию решения проблемы с сообщениями :)
Некрасивый получается отпрыск TOpenPictureDialog"a
Подскажите решение, плиз


 
Igorek ©   (2004-06-07 11:31) [6]


> Можно уточнить, как именно метод, который вызовет Execute
> возьмет данные?

Возьму на себя смелость предложить callback вариант:

TDialogReceiveProc = procedure(Dialog: TMyDialog); of object;

function TMyDialog.Execute(ReceiveProc: TDialogReceiveProc): boolean;
begin
 ...
 ReceiveProc(Self)
 ...
end;


 
Юрий Зотов ©   (2004-06-24 14:09) [7]

> Igorek ©   (28.05.04 17:50) [4]

> Можно уточнить, как именно метод, который вызовет Execute
> возьмет данные?

Как и обычно - через свойства самого компонента. В методе Execute берутся данные из формы и присваиваются свойствам самого компонента (скажем, FileName := Edit1.Text) - в результате они становятся доступными вызвавшему методу.

В общем-то, я удивлен. Это же самая обычная работа с модальной формой, простейший, голимый стандарт - неужели в ЭТОЙ конференции нужно объяснять ТАКИЕ вещи?


 
Igorek ©   (2004-06-24 14:27) [8]


> Юрий Зотов ©   (24.06.04 14:09) [7]

Упс. Мой проезд. Недосмотрел, что у вас:
> function TMyDialog.Execute: boolean
> begin
>  with TMyDialogForm.Create(Self) do

Разные классы.


 
GrayFace ©   (2004-06-27 08:37) [9]

Создай форму и делай Windows.SetParent(DialogHandle, FormHandle).



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
4-1114770645
Sour Smile
2005-04-29 14:30
2005.06.29
Работа с сетью из-под сервиса


4-1115260119
Naumov
2005-05-05 06:28
2005.06.29
Непонятная проблема с окнами


11-1101251566
XProger
2004-11-24 02:12
2005.06.29
Прокрутка в Memo


1-1117635667
Aleksandr.
2005-06-01 18:21
2005.06.29
Есть какие-то готовые технологии для градиента цветов?


3-1116323300
Ana-Tolik
2005-05-17 13:48
2005.06.29
Баг при открытии запроса в Sysbase ASA 8.0.1