Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Наследники 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
14-1117603804
BiN
2005-06-01 09:30
2005.06.29
С Днем Защиты Детей, что ли


3-1116842790
Cat
2005-05-23 14:06
2005.06.29
Поле Date 01.01.2005


14-1117709898
GolNec
2005-06-02 14:58
2005.06.29
компонент для просмотра Анимированных Gif ok


14-1117951008
Гарри Поттер
2005-06-05 09:56
2005.06.29
Костя проиграл бой.


4-1115042621
Rambo
2005-05-02 18:03
2005.06.29
Права доступа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский