Форум: "Компоненты";
Текущий архив: 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.042 c