Вверх ↑
Этот топик читают: Гость
Ответов: 279
Рейтинг: 1
#1: 2026-05-08 16:51:31 ЛС | профиль | цитата
Почему, если вызвать модальную дочернюю форму по проводу из другой модальной формы, то потом главная форма недоступна становится? Я конечно понимаю, что нужно по правильному бы все дочерние формы закрыть перед открытием того последнего окна, но мне нужно бы именно так, .. Непонятно да, сам перечитываю и не понимаю. См гифку ))))

Гиф



Add(MainForm,2953706,616,532)
{
Width=510
Height=362
Position=1
}
Add(Button,11205765,693,532)
{
Left=190
Top=140
Caption="нажми"
link(onClick,1245568:doWork1,[])
}
Add(ChildForm,1245568,742,532)
{
link(onEvent1,2376677:doWork1,[])
}
BEGIN_SDK
Add(EditMulti,2655893,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,3711324:doShowModal,[(81,27)(81,97)])
}
Add(MainForm,3711324,140,63)
{
Left=35
Top=105
Width=356
Height=289
Visible=1
Position=1
Point(doShowModal)
}
Add(ChildForm,11744649,196,140)
{
link(onEvent1,2655893:onEvent1,[(274,146)(274,27)])
}
BEGIN_SDK
Add(EditMulti,2395673,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,3537016:doShowModal,[(81,27)(81,97)])
}
Add(MainForm,3537016,140,63)
{
Left=35
Top=105
Width=339
Height=246
Visible=1
Position=1
Point(doShowModal)
}
Add(Button,11245833,238,119)
{
Left=195
Top=115
Width=95
Caption="Теперь сюда"
link(onClick,2395673:onEvent1,[(296,125)(296,27)])
}
END_SDK
Add(Button,2477239,70,140)
{
Left=60
Top=145
Width=155
Caption="теперь сюда"
link(onClick,11744649:doWork1,[])
}
END_SDK
Add(ChildForm,2376677,791,532)
{
}
BEGIN_SDK
Add(EditMulti,2028744,21,21)
{
WorkCount=1
Height=375
link(doWork1,1433516:doShowModal,[(81,27)(81,97)])
}
Add(MainForm,1433516,140,63)
{
Left=35
Top=105
Width=621
Height=462
Visible=1
Position=1
Point(doShowModal)
}
Add(VisualShape,2878883,140,140)
{
Left=15
Top=60
Width=740
Height=595
}
Add(Label,8469994,77,196)
{
Left=20
Top=30
Width=680
Caption="А теперь после закрытия этого окна главная форма будет недоступна"
}
END_SDK

карма: 1

0
Ответов: 2482
Рейтинг: 698
#2: 2026-05-11 00:40:52 ЛС | профиль | цитата
Тут ответ: Модальные окна блокируют основное окно

Редактировалось 1 раз(а), последний 2026-05-11 00:41:36
карма: 11

0
Ответов: 279
Рейтинг: 1
#3: 2026-05-11 03:22:33 ЛС | профиль | цитата
sla8a писал(а):
Тут ответ: Модальные окна блокируют основное окно

Спасибо, отлично!
Единственное что я от туда понял, что nesco пофиксил это на SVN. Но у меня не подключается этот SVN хоть убей... И с впн пробовал и так и сяк..

Может что нибудь можно сделать без SVN с этой долбаной проблемой модальности?

пс.
исправил это
function THIMainForm._onClose;
var i:integer;
p:PControl;
begin
Result := true;

if Accept and(ToIntegerEvent(_data_Close)<>0) then exit;
for i := 0 to Control.ChildCount-1 do
with Control.Children[i]{$ifndef F_P}^{$endif} do
if isForm then Perform(WM_CLOSE,0,1);
if CurForm <> nil then
PostMessage(CurForm.Handle,WM_ACTIVATE,WA_ACTIVE,0 );
CurForm := nil;

if isMain then
begin
Result := false;
_hi_OnEvent(_event_onClose);
// EventOff;
end
else
begin
p := FParent;
{$ifndef SUPER_PARENT}
while not p.isForm do p := p.Parent;
{$endif}
if p.ModalForm <> Control then
Control.Hide
else Control.ModalResult := -1;
end;
SavePosition;
Showed := False;
end;

на это
function THIMainForm._onClose;
var i:integer;
//p:PControl;
begin
Result := true;

if Accept and(ToIntegerEvent(_data_Close)‹›0) then exit;
for i := 0 to Control.ChildCount-1 do
with Control.Children[i]{$ifndef F_P}^{$endif} do
if isForm then Perform(WM_CLOSE,0,1);
if CurForm ‹› nil then
PostMessage(CurForm.Handle,WM_ACTIVATE,WA_ACTIVE,0 );
CurForm := nil;

if isMain then
begin
Result := false;
_hi_OnEvent(_event_onClose);
// EventOff;
end
else
begin
//Fix 09.11.2025 sla8a
if Control.Modal then
Control.ModalResult := -1
else
Control.Hide;
//p := FParent;
//{$ifndef SUPER_PARENT}
//while not p.isForm do p := p.Parent;
//{$endif}
//if p.ModalForm ‹› Control then
// Control.Hide
//else Control.ModalResult := -1;
end;
SavePosition;
Showed := False;
end;




И теперь у меняя ваще схема не стартует)))



Всё, разобрался)) Надо было поменять только последнее на это:
    begin
//Fix 09.11.2025 sla8a
if Control.Modal then
Control.ModalResult := -1
else
Control.Hide;
end;

а не всю function THIMainForm._onClose

Редактировалось 3 раз(а), последний 2026-05-11 04:12:48
карма: 1

0
Разработчик
Ответов: 26345
Рейтинг: 2149
#4: 2026-05-11 13:40:53 ЛС | профиль | цитата
Все файлы SVN пакета есть на зеркале SVN по ссылке в этом посте -- https://forum.hiasm.com/post/310440. Актуальность этой ссылки будет действовать до 3-го июня.

Редактировалось 1 раз(а), последний 2026-05-11 13:41:55
карма: 23

0
Ответов: 279
Рейтинг: 1
#5: 2026-05-11 15:43:21 ЛС | профиль | цитата
nesco писал(а):
Все файлы SVN пакета есть на зеркале SVN по ссылке в этом посте -- https://forum.hiasm.com/post/310440. Актуальность этой ссылки будет действовать до 3-го июня.

Спасибо.
Нужно просто ctrl-c ctrl-v в папку с Hiasm?
карма: 1

0
Разработчик
Ответов: 26345
Рейтинг: 2149
#6: 2026-05-12 03:14:17 ЛС | профиль | цитата
Gitarist писал(а):
Нужно просто ctrl-c ctrl-v в папку с Hiasm?

Да, просто копируешь поверх. Но так можно делать не для всех файлов. Некоторые требуют замены еще нескольких модулей. Но вроде как последних таких пока что еще не было. Я, к примеру, использую для таких целей TC в режиме синхронизации каталогов. Он показывает файлы с отличием.
карма: 23

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)