Add(MainForm,13496199,182,140)
{
Width=560
Height=385
Caption="Главная форма"
}
Add(Button,1875975,238,140)
{
Left=135
Top=130
Width=260
Height=40
Caption="Открыть дочернее окно"
link(onClick,14474557:doShowModal,[])
}
Add(ChildFormEx,14474557,315,140)
{
link(onClick,12190338:doShowModal,[])
}
BEGIN_SDK
Add(EditMultiEx,7301879,21,21)
{
WorkCount=#11:doShowModal|
EventCount=#7:onClick|
Width=587
Height=431
link(doShowModal,14415229:doShowModal,[(87,27)(87,160)])
}
Add(MainForm,14415229,154,126)
{
Left=35
Top=105
Width=335
Height=251
Visible=1
Caption="Первая дочерняя"
Point(doShowModal)
}
Add(Button,13300658,203,126)
{
Left=25
Top=85
Width=260
Height=60
Caption="Открыть второе дочернее окно"
link(onClick,7301879:onClick,[(421,132)(421,27)])
}
END_SDK
Add(ChildFormEx,12190338,385,140)
{
}
BEGIN_SDK
Add(EditMultiEx,6593503,21,21)
{
WorkCount=#11:doShowModal|
Width=587
Height=431
link(doShowModal,3794323:doShowModal,[(87,27)(87,160)])
}
Add(MainForm,3794323,154,126)
{
Left=35
Top=105
Width=278
Height=197
Visible=1
Caption="Вторая дочерняя"
Point(doShowModal)
}
Add(Label,6111778,133,210)
{
Width=262
Height=158
Align=5
Caption="Теперь закрыть два дочерних окна"
Alignment=2
VerticalAlign=0
}
END_SDK
Виной код в function THIMainForm._onClose;
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;
Не понял для какого случая такие навороты, если достаточно проверить окно на модальность. Могу ошибаться, но вот такая правка избавляет от этой ошибки:
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;



Поиск
Друзья
Администрация