Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с OnDeactivate !!!! / 25 сообщений из 30, страница 1 из 2
19.03.2003, 12:59
    #32122851
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Есть некая форма. С этой формы неким действием открывается другая форма причем модально.
Проблема в том что при этом в первой форме не срабатывает триггер
OnDeactivate!! А очень нужно чтоб сработал!
(При открытии второй формы не модально - OnDeactivate работает)

Как бороться?
...
Рейтинг: 0 / 0
19.03.2003, 13:12
    #32122868
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Все дело в том, что открытии модальной формы = открытие например MessageBox. И пока тот кто вызывал модальную форму не получит mrResult не сработает OnDeactivate.
...
Рейтинг: 0 / 0
19.03.2003, 13:19
    #32122879
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
А можно ли как нибудь ( в общем случае ) из формы которая открылась модально добраться до формы которая вызвало это модальное окно
( имеется в виду вот что в моем проекте все формы созданы на основе одной - шаблонной ) и в шаблонной форме обрабатываются события ( OnActivate и OnDeactivate) таким образом если открыть какую то форму модально и на этой форме добраться до вызвавшей ее формы ( не зная в design-time что это будет за форма) то можно наверно ручками вызвать это событие OnDeactivate
...
Рейтинг: 0 / 0
19.03.2003, 13:32
    #32122897
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Проблем с доступом из модальной формы в вызвавшую ее форму (равно как и в любую другую) нет. Когда явно вызываешь - все нормально.

Можно вообще обойтись без модальных окон: Form1.Enable := False/True
...
Рейтинг: 0 / 0
19.03.2003, 13:36
    #32122901
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Можно сделать все.
В твоем случае я использовал бы механизм сообщений.
Т.е. при открытии модальной формы передавал бы нэндл предка (того, который открыл). Дальше все просто, из модальной формы шлеш сообщение, а в предке обрабатываеш.
Есть вариант с COM, но он сложнее.
...
Рейтинг: 0 / 0
19.03.2003, 13:37
    #32122902
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Вопрос был в том как определить какая форма вызвала эту модальную форму если заранее не знаешь?
...
Рейтинг: 0 / 0
19.03.2003, 13:40
    #32122909
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
LG:
У меня в проекте туева кучя форм из некоторых форм так же туева куча может открываться модально и мне что каждый раз при вызове передавать хэндл? Более универсального способа нет?
...
Рейтинг: 0 / 0
19.03.2003, 13:46
    #32122913
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Не как ответ, а как направление поиска решения (одно из возможных):
при закрутии модальной формы фокус получает вызвавшая форма.
Может посмотреть куда должен вернуться фокус ввода?
...
Рейтинг: 0 / 0
19.03.2003, 13:53
    #32122918
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
eNose:
Интересно и как это сделать в общем случае?
Вообще то я полагал что события OnActivate и OnDeactivate соответствуют событиям прихода/ухода фокуса на данную форму
...
Рейтинг: 0 / 0
19.03.2003, 14:03
    #32122929
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
При модальном вызове OnDeactivate не работает...

Я сам не пробовал, но у Application должен где-то храниться порядок вызова форм. Или посмотри Parent у модальной формы.
...
Рейтинг: 0 / 0
19.03.2003, 15:08
    #32123000
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
>>Вопрос был в том как определить какая форма вызвала эту модальную форму если заранее не знаешь?

Исходя из вопроса:
1. Получаем HWND GetTopWindow(HWND hWnd // handle of parent window);
2. Получаем HWND GetNextWindow(
HWND hWnd, // handle of current window
UINT wCmd // direction flag
);
3. Имеем нэндл нужного окна. Дальше делаем, что хотим ...

Но я бы пересмотрел логику работы с
>>туева кучя форм из некоторых форм так же туева куча может открываться модально
...
Рейтинг: 0 / 0
19.03.2003, 15:08
    #32123001
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
eNoise:

>> Application должен где-то храниться порядок вызова форм.

Не нашел я там такого

>>Или посмотри Parent у модальной формы.

Parent =nil
...
Рейтинг: 0 / 0
19.03.2003, 16:01
    #32123046
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
GetWindow(Handle, GW_HWNDNEXT) дает HWND вызвавшей формы. (здесь Handle - ModalForm.Handle)
...
Рейтинг: 0 / 0
19.03.2003, 16:11
    #32123064
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Можно и так ...
...
Рейтинг: 0 / 0
19.03.2003, 16:20
    #32123073
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
А вот и неправда!

При обычном вызове формы (show ) тут вы правы

А при showmodal обнаружил странную штуку - хендл модального окна - тот же что и хендл вызвавшего его окна!!!
...
Рейтинг: 0 / 0
19.03.2003, 16:21
    #32123076
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Этого не может быть. Проверь еще раз.
...
Рейтинг: 0 / 0
19.03.2003, 16:23
    #32123083
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Прошу прощения...поторопился с выводами

при еще одной попытке протестировать получились совсем другие значения

т.е.
При обычном вызове формы (show ) всё работает

А при showmodal хендл вызвавшего его окна и хендл, возвращаемый
GetWindow(Handle, GW_HWNDNEXT) не одинаковы!
...
Рейтинг: 0 / 0
19.03.2003, 16:28
    #32123088
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Как выяснилось при showmodal GetWindow(Handle, GW_HWNDNEXT) выдает хэндл главной (MDI) формы!!!
...
Рейтинг: 0 / 0
19.03.2003, 17:09
    #32123139
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
М-да, грустно.

Если у тебя все формы наследуются от одной, есть еще вариант :))

...
TXXX = class(TForm)
private
FParentHandle: THandle;
...
public
...
property GetParentHandle: THandle read FParentHandle;
procedure ShowModal(AParentHandle: THandle); reintroduce;
...
end;
...
procedure TXXX.ShowModal(AParentHandle: THandle);
begin
FHandle := AParentHandle;
inherited ShowModal;
end;
...
Тут в предке имеем хендл того, кто вызвал.
Соответственно во ВСЕХ !!! вызовах ShowModal надо поменять на ShowModal(self.Handle)
...
Рейтинг: 0 / 0
19.03.2003, 17:18
    #32123148
Oleg Romantsev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
А как быть не смоими окнами ( например стандартное окно диалога отарытия файла)???
...
Рейтинг: 0 / 0
19.03.2003, 19:08
    #32123223
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Чего-то понаворотили, блин.

Все просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TMyForm.ShowModalForm;
begin
ModalForm := TModalForm.Create(Self) --вот тут и зарыта собака;
 
ModalForm.ShowModal;
....
end;
......

procedure TModalForm.FormShow(Sender: TObject);
begin
 TBaseMyForm(Owner).FormDeactivate(TBaseMyForm(Owner))
......;
end;
...
Рейтинг: 0 / 0
20.03.2003, 07:57
    #32123328
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
Tygra, я сейчас пришел на работу, как раз ночью до меня дошло тоже самое, что ты написал.
Просто я никогда не догадаюсь закинуть 500 форм в автокриэйт...
Поэтому я и отвечал "со своей колокольни"
...
Рейтинг: 0 / 0
20.03.2003, 10:40
    #32123465
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
А при чем тут autocreate?
...
Рейтинг: 0 / 0
20.03.2003, 10:45
    #32123475
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
>> А как быть не смоими окнами ( например стандартное окно диалога отарытия файла)???
...
Рейтинг: 0 / 0
20.03.2003, 11:39
    #32123551
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с OnDeactivate !!!!
2 Tygra: а при том, что если создавать формы руками, таких проблем (получение предка) обычно не возникает, так как явно его указываешь (create(Form1)).
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с OnDeactivate !!!! / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]