Главная страница
    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.076 c
4-1115644993
MakedoneZ
2005-05-09 17:23
2005.06.29
Рисование не на форме.


1-1117826024
km1
2005-06-03 23:13
2005.06.29
Помогите разобраться с проблемой


3-1116408719
_e_u_
2005-05-18 13:31
2005.06.29
Вредный, простой скуэль запрос:


3-1116234329
Maverick
2005-05-16 13:05
2005.06.29
Передача параметра в ADOStoredProc


1-1118040713
Кирилл
2005-06-06 10:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский