powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форма1 поверх формы2
37 сообщений из 37, показаны все 2 страниц
Форма1 поверх формы2
    #39990103
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызываю модальную форму 1, далее когда форма1 появилась на экране нужно сразу показать форму2 (также модальную).
Как сие сделать коллеги?
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #39990171
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visible
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #39990172
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

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

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

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

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

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


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


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


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

Одноразовый таймер 100мсек, повешенный на OnShow 1-й формы, хоть и не выглядит верхом совершенства, но решает все проблемы.
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131508
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось только выяснить, чем WM_TIMER так волшебно отличается от WM_USER + 1...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131538
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Форма1 поверх формы2
    #40131539
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тут придётся выяснять чем WM_USER+1 лучше, чем сам WM_ACTIVATE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131546
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

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

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

По опыту наблюдения за продуктовыми системами, количество таинственных AV, годами копящихся в багтрекерах, довольно очевидно коррелирует с количеством одноразовых 100мсек таймеров, решающих все проблемы.
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131572
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё оказалось намного проще, по крайней мере для моих целей.
Оказывается Application.CreateForm не только создает форму, но и показывает её, поэтому если между ней и Application.Run вставить показ нужной формы то оно замечательно работает.
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131574
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgik
Оказывается Application.CreateForm не только создает форму, но и показывает её

Ну-ну. Успехов проекту с такими открытиями.

P.S. А когда Application.CreateForm создаёт модуль данных - он его тоже показывает?
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131581
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
didgik
Оказывается Application.CreateForm не только создает форму, но и показывает её

Ну-ну. Успехов проекту с такими открытиями.

P.S. А когда Application.CreateForm создаёт модуль данных - он его тоже показывает?

Нет, он же не визуальный.

Вот чую, что меня хотели подъ..хм..колоть, но не понимаю где )))
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131584
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite
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;



А чего PostMessage() просто в OnShow не поместить?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type
  TForm2 = class(...)
    procedure FormShow(...);
  private
    procedure OnAfterShow(var aMsg: TMessage); message WM_USER + 1;
  end;
...
implementation
...

procedure TForm2.FormShow(...);
begin
   PostMessage(This.Handle, WM_USER + 1, 0, 0)
...
procedure TForm2.OnAfterShow(var aMsg: TMessage);
begin
  Form3.ShowModal()
...
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131590
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite> Потому что VCL еще не до конца обработала...
X-Cite> https://quality.embarcadero.com/browse/RSP-24519

Что именно? Условный долгий OnCreate или что?
Какой сценарий "неправильный"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131591
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

тема страниц на пять, не меньше...
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131641
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Гаджимурадов Рустам,

тема страниц на пять, не меньше...
+1.

А еще можно обсудить периодическое заваливание формы под главную, если OnShow долго выполняется (н-р длинный SQL запрос).
Приходится кликать на таскбаре, чтоб появилась. :)
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131702
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo

А еще можно обсудить периодическое заваливание формы под главную, если OnShow долго выполняется (н-р длинный SQL запрос).
Приходится кликать на таскбаре, чтоб появилась. :)

это происходит не только в OnShow, но и при выполнении длинного SQL по нажатию на кнопку, когда модальная форма давно открыта.
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131746
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ> тема страниц на пять, не меньше...

Я вообще-то не шучу. :) Какой из heavy-load
сценариев не решается простым флагом? :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131748
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo> Приходится кликать на таскбаре, чтоб появилась. :)

Можно же программного Foreground сделать, если я правильно понял.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131938
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
X-Cite> Потому что VCL еще не до конца обработала...
X-Cite> https://quality.embarcadero.com/browse/RSP-24519

Что именно? Условный долгий OnCreate или что?
Какой сценарий "неправильный"?


Понятия не имею что происходит после выхода за OnShow или OnActivate и какие там еще сообщения из очереди должны быть обработаны, но если в любом из этих двух обработчиков вызвать
Код: pascal
1.
TForm2.Create(Self).ShowModal();



То на TForm2 не будет работать событие OnKeyPress
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40131988
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Понятия не имею что происходит после выхода за OnShow или OnActivate и какие там еще сообщения из очереди должны быть обработаны
Дык разбираться надо в чём проблема и почему.
Вполне возможно (и скорее всего) дело не в бобине.


X-Cite
но если в любом из этих двух обработчиков вызвать
Код: pascal
1.
TForm2.Create(Self).ShowModal();


То на TForm2 не будет работать событие OnKeyPress
Только что проверил - корректно работает и вызывается.
...
Рейтинг: 0 / 0
Форма1 поверх формы2
    #40132125
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
L_argo> Приходится кликать на таскбаре, чтоб появилась. :)

Можно же программного Foreground сделать, если я правильно понял.
Подробностей не помню. Кажется пробовал такое. Стало реже пропадать. Но все равно были случаи.
Возможно надо запустить таймер и сделать Foreground по таймеру. :)

зы: цирк, кароче....
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форма1 поверх формы2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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