Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
Мне нужно когда любая форма показывается модально делать некие одинаковые действия
Как это лучше сделать?
Я понял что коллбека OnModal нет, можно ли в OnShow узнать модально ли открыта форма или нет
6 ноя 18, 16:33    [21725496]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 54229
Блог
фываенг
Как это лучше сделать?

Через базовый класс формы.

фываенг
можно ли в OnShow узнать модально ли открыта форма или нет

Можно.
6 ноя 18, 17:34    [21725615]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
softwarer,

softwarer
Можно.

Спасибо большое, как это можно узнать?

На счёт первого вопроса
Я наверное не так объяснил
Есть форма в обработчиках событий которой показывается некоторое количество модальных окон (они разные)
Вот мне, перед тем как эти модальные окна показываются нужно делать некие действия
Как это лучше сделать?
6 ноя 18, 17:49    [21725644]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46095

фываенг
Вот мне, перед тем как эти модальные окна показываются нужно делать некие действия
Как это лучше сделать?

Вместо XXX.ShowModal вызывай какую-нибудь процедуру YYY(XXX), которая проделает нужные
действия, а потом вызовет XXX.ShowModal.

Posted via ActualForum NNTP Server 1.5

6 ноя 18, 18:52    [21725730]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2885
фываенг,

сделай некие действия перед показом. в чем вопрос?
6 ноя 18, 18:52    [21725731]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
Dimitry Sibiryakov, makhaon

дело в том что модальных показов разных форм много (более 20)
И получается есть только способ просто перед каждым показом вызывать процедуру?
Никак объединить это нельзя? К примеру
Если у нас показывается любая форма, определяем модально ли она показывается, и если да то выполняем некие действия

Какой-то общий для всех форм show так сказать
7 ноя 18, 11:28    [21726332]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24486
фываенг
Какой-то общий для всех форм show так сказать

http://docwiki.embarcadero.com/Libraries/Tokyo/en/Vcl.Forms.TApplication.OnModalBegin
7 ноя 18, 11:29    [21726336]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 75
фываенг
...Как это лучше сделать?

Все формы наследуй от одной, в которой этот самый код, выполняющий общие для всех действия (например, в конструкторе).
7 ноя 18, 12:32    [21726546]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
DimaBr
Member

Откуда:
Сообщений: 10744
фываенг
дело в том что модальных показов разных форм много (более 20)

Вам трудно заменить 20 вызовов Form1.ShowModal на MyShowModal(Form1) ? На это тратится 5 минут.
7 ноя 18, 12:39    [21726571]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
wadman,

Спасибо
Вроде бы всё работает
Но тут возникает один баг

Некие действия - это деактивация всех окон перед модальным показом
То есть на форме1 показывается модальная форма
Форма1 деактивирована (теперь, с Application.OnModalBegin)
Всё как и надо
Но стоит только переключиться на другое приложение
Допустим на браузер
А потом опять переключится на приложение
Так у форм1 вызовется OnActivate!!!
Хотя программа ещё выполняет ShowModal

Так вот получается вместо этого - Application.OnModalBegin мне придётся использовать Application.OnActivate
Чтобы если активация срабатывает у модальной формы деактивировать остальные окна
Только как в этом случае в этом методе понять модально ли показывается форма или нет?

Только вот я сейчас задумался ведь может быть такое активация модальной формы пройдёт раньше чем скажем активация форм1
И тогда этот способ не сработает
И придётся видимо отключать коллбек FormActivate у форм1 на время модального показа
7 ноя 18, 12:54    [21726608]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24486
фываенг
Но тут возникает один баг

Это не баг, а криво поставленная задача.
Show один, а активаций может быть сколько угодно.
7 ноя 18, 12:56    [21726609]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46095

фываенг
Некие действия - это деактивация всех окон перед модальным показом
Вообще-то это "действие" модальная форма производит самостоятельно, так что
непонятно зачем тебе это делать ещё раз вручную.

Posted via ActualForum NNTP Server 1.5

7 ноя 18, 13:08    [21726646]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
Dimitry Sibiryakov,

Нифига подобного!
7 ноя 18, 13:11    [21726652]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
wadman,

Это да
Так вот получается нужна активация
А не шоу

Только походу это не сработает
Но всё равно, если знаешь, напиши ответ на этот вопрос, мне интересно
Как узнать модально ли показывается форма или нет?
7 ноя 18, 13:14    [21726662]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 75
фываенг
Dimitry Sibiryakov,

Нифига подобного!

Значит, ты под словами "активация" и "деактивация" подразумеваешь что-то свое.
7 ноя 18, 13:14    [21726664]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1549
фываенг
в OnShow узнать модально ли открыта форма или нет

procedure TForm2.FormShow(Sender: TObject);
begin
  if fsModal in FormState then
    Caption := 'Мадальна';
end;
7 ноя 18, 13:15    [21726666]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
softwarer
Можно.

softwarer знает но молчит
7 ноя 18, 13:16    [21726672]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 75
фываенг
...Как узнать модально ли показывается форма или нет?


Несложно. Но ты наверняка скажешь, что и там какой-то баг.

Ты лучше расскажи, ради чего все эти телодвижения.
7 ноя 18, 13:18    [21726675]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
Фэйтл Эра,

деактивация это вызов FormDeactivate
По ссылке если перейти описано почему не происходит этого вызова

LG
Все дело в том, что открытии модальной формы = открытие например MessageBox. И пока тот кто вызывал модальную форму не получит mrResult не сработает OnDeactivate.
7 ноя 18, 13:20    [21726679]     Ответить | Цитировать Сообщить модератору
 Re: Одни действия для модального показа разных форм  [new]
фываенг
Member

Откуда:
Сообщений: 38
roschinspb,

Спасибо!
7 ноя 18, 13:21    [21726682]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить