Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форма1 поверх формы2 / 25 сообщений из 37, страница 1 из 2
15.08.2020, 19:20
    #39990103
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Вызываю модальную форму 1, далее когда форма1 появилась на экране нужно сразу показать форму2 (также модальную).
Как сие сделать коллеги?
...
Рейтинг: 0 / 0
16.08.2020, 00:15
    #39990171
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Visible
...
Рейтинг: 0 / 0
16.08.2020, 00:32
    #39990172
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
wsnet,

А что ShowModal в OnShow в данном случае не канает?
По-моему был не так уж давно похожий вопрос.
...
Рейтинг: 0 / 0
16.08.2020, 08:56
    #39990188
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Можно использовать TThread.Queue(nil, ShowForm2, True), где ShowForm2 это метод, в котором можно написать код Form2.ShowModal.
...
Рейтинг: 0 / 0
16.08.2020, 23:00
    #39990227
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Мимопроходящий, можно пример привести?
...
Рейтинг: 0 / 0
17.08.2020, 00:38
    #39990230
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
wsnet
Мимопроходящий, можно пример привести?
ты сперва расскажи что получить хочешь.
ибо возможны варианты.
...
Рейтинг: 0 / 0
17.08.2020, 01:14
    #39990233
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Мимопроходящий, открыли окно модальное(окно1), и при определенном условии открываем поверх окна1 модальное окно2.
Окно2 открывается нажимаем кнопочки в нем и закрываем,остается окна1.
...
Рейтинг: 0 / 0
17.08.2020, 07:32
    #39990241
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Пропишите открытие второго окна в OnActivate
...
Рейтинг: 0 / 0
17.08.2020, 09:56
    #39990266
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
DimaBr, прописал, но идет утечка памяти, не пойму откуда.
...
Рейтинг: 0 / 0
17.08.2020, 10:50
    #39990279
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
wsnet
DimaBr, прописал, но идет утечка памяти, не пойму откуда.

Ошибка в 17 строке
...
Рейтинг: 0 / 0
17.08.2020, 12:18
    #39990302
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
DimaBr
Пропишите открытие второго окна в OnActivate
модальное окно "рождается" активным.
нахера так сделано в VCL - х.з.
...
Рейтинг: 0 / 0
17.08.2020, 12:42
    #39990313
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Я обычно делаю через SetTimer в OnShow() с интервалом где-то 100 мс.
Главное потом его прибить не забыть.
...
Рейтинг: 0 / 0
17.08.2020, 19:56
    #39990385
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
wsnet
Как сие сделать коллеги?

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

Vlad F
А что ShowModal в OnShow в данном случае не канает?

Нет. В этом случае будет "наоборот" - первая форма появится как только закроется вторая. А что, сложно проверить? А вообще стоит помнить: OnShow срабатывает непосредственно перед тем, как окно становится видимым.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.02.2022, 03:52
    #40131404
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Не придумали как сделать? А то мне тоже нада.
Вывести один раз сразу после onShow.
...
Рейтинг: 0 / 0
03.02.2022, 14:26
    #40131488
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
didgik,
Код: pascal
1.
2.
WM_AFTERACTIVATE = WM_USER + 1;
PostMessage(Handle, WM_AFTERACTIVATE, 0, 0);


В обработчике WM_AFTERACTIVATE открываете форму
...
Рейтинг: 0 / 0
03.02.2022, 15:58
    #40131504
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
X-Cite
didgik,
Код: pascal
1.
2.
WM_AFTERACTIVATE = WM_USER + 1;
PostMessage(Handle, WM_AFTERACTIVATE, 0, 0);


В обработчике WM_AFTERACTIVATE открываете форму


Не очень понятно куда надо вставить PostMessage() чтоб он вызвался один раз и почему там нельзя сразу открыть форму?
...
Рейтинг: 0 / 0
03.02.2022, 16:09
    #40131507
Makar4ik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
didgik
Не очень понятно куда надо вставить PostMessage() чтоб он вызвался один раз и почему там нельзя сразу открыть форму?

Одноразовый таймер 100мсек, повешенный на OnShow 1-й формы, хоть и не выглядит верхом совершенства, но решает все проблемы.
...
Рейтинг: 0 / 0
03.02.2022, 16:10
    #40131508
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Осталось только выяснить, чем WM_TIMER так волшебно отличается от WM_USER + 1...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.02.2022, 19:05
    #40131538
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
didgik,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
TForm1 = class(TCustomForm)
private
  const
    WM_AFTERACTIVATE = WM_USER + 1;
  var
    FInitialized: Boolean;
private
  procedure WMAfterActivate(var Message: TWMNoParams); message WM_AFTERACTIVATE;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FInitialized := False;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  if not FInitialized then
  begin
    FInitialized := True;
    if not PostMessage(Handle, WM_AFTERACTIVATE, 0, 0) then
      RaiseLastOSError();
  end;
end;

procedure TForm1.WMAfterActivate(var Message: TWMNoParams);
begin
  ....
end;
...
Рейтинг: 0 / 0
03.02.2022, 19:07
    #40131539
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
А вот тут придётся выяснять чем WM_USER+1 лучше, чем сам WM_ACTIVATE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.02.2022, 19:44
    #40131546
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Dimitry Sibiryakov,

После выхода из обработчика FormActivate что-то еще может происходить в недрах VCL до следующего круга обработки сообщений, а так гарантировано все компоненты будут загружены, активированы и т.д. и т.п.
...
Рейтинг: 0 / 0
03.02.2022, 20:42
    #40131557
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Сорри, а чем OnActivate (с проверкой, если нужно только один раз) не подходит?
...
Рейтинг: 0 / 0
03.02.2022, 20:55
    #40131561
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Гаджимурадов Рустам,

Потому что VCL еще не до конца обработала...
https://quality.embarcadero.com/browse/RSP-24519
...
Рейтинг: 0 / 0
03.02.2022, 21:05
    #40131562
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Makar4ik
Одноразовый таймер 100мсек, повешенный на OnShow 1-й формы, хоть и не выглядит верхом совершенства, но решает все проблемы.

По опыту наблюдения за продуктовыми системами, количество таинственных AV, годами копящихся в багтрекерах, довольно очевидно коррелирует с количеством одноразовых 100мсек таймеров, решающих все проблемы.
...
Рейтинг: 0 / 0
03.02.2022, 21:51
    #40131572
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма1 поверх формы2
Всё оказалось намного проще, по крайней мере для моих целей.
Оказывается Application.CreateForm не только создает форму, но и показывает её, поэтому если между ней и Application.Run вставить показ нужной формы то оно замечательно работает.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форма1 поверх формы2 / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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