Вверх ↑
Ответов: 2324
Рейтинг: 681
#1: 2025-03-12 12:43:32 ЛС | профиль | цитата
Всплыла проблема (в этой теме: https://forum.hiasm.com/topic/68134/9) что слои налазят друг на друга.
Тестовые схемы

Add(VBoxLayout,2368616,322,217)
{
Name="ver_01"
Space=33
Padding=5
Layout="ver_02"
}
Add(Memo,13841878,406,420)
{
Left=175
Top=180
Width=115
Color=12639424
Layout="ver_02"
HeightScale=100
}
Add(MainForm,2953706,231,406)
{
Width=575
Height=583
Position=1
link(onCreate,3155327:doResize,[])
}
Add(VBoxLayout,3155327,322,420)
{
Name="ver_02"
}
Add(Edit,6116337,406,329)
{
Left=245
Top=140
Height=25
Layout="ver_01"
}
Add(Edit,15850007,406,280)
{
Left=255
Top=100
Height=25
Layout="ver_01"
}
Add(Edit,3410316,406,231)
{
Left=255
Top=70
Height=25
Layout="ver_01"
}
Add(Edit,4471230,406,182)
{
Left=255
Top=40
Height=25
Layout="ver_01"
}

Add(Memo,13841878,497,315)
{
Left=175
Top=180
Width=115
Color=12639424
Layout="ver"
HeightScale=100
}
Add(MainForm,1019016,294,301)
{
Width=461
Height=538
Position=1
link(onCreate,978984:doResize,[])
}
Add(VBoxLayout,978984,420,315)
{
Name="ver"
WidthScale=100
Layout="hor"
}
Add(GridLayout,13403536,301,140)
{
Name="mtrx_r"
Space=20
Padding=10
Layout="ver"
Rows=3
Cols=3
AddMode=1
}
Add(Edit,4508963,388,188)
{
Left=170
Top=45
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,3047672,371,140)
{
Left=170
Top=5
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,7575744,416,139)
{
Left=170
Top=25
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,383787,486,188)
{
Left=200
Top=45
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,5386374,469,140)
{
Left=200
Top=5
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,1328770,514,139)
{
Left=195
Top=25
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,1809522,584,188)
{
Left=240
Top=45
Width=75
Layout="mtrx_r"
}
Add(Edit,3334707,567,140)
{
Left=245
Top=5
Width=75
Layout="mtrx_r"
WidthScale=33
}
Add(Edit,7243612,612,139)
{
Left=245
Top=25
Width=75
Layout="mtrx_r"
WidthScale=33
}


Посмотрев код заметил следующие, что когда у слоя спрашивают о его высоте, то выдается максимальное высота одного из элементов в слои. Точно так же обстоит дело и с шириной. Почему сделано так, так и не понял.
Есть вариант который нужно протестировать. Заменить в файле WinLayout.ini две функции (ориентировочно 186 строка в файле):

function TWinLayout.getHeight:integer;
var i,d:integer;
begin
Result := 0;
d := Result;
for i := 0 to FList.Count-1 do
begin
case PBoxRecord(FLIst.Objects[i]).otype of
OBJ_CONTROL: d := PControl(PBoxRecord(FList.Objects[i]).obj).Top + PControl(PBoxRecord(FLIst.Objects[i]).obj).Height;
OBJ_LAYOUT : d := TWinLayout(PBoxRecord(FList.Objects[i]).obj).Top + TWinLayout(PBoxRecord(FLIst.Objects[i]).obj).Height;
OBJ_SPACER : d := THILayoutSpacer(PBoxRecord(FList.Objects[i]).obj)._prop_Top + THILayoutSpacer(PBoxRecord(FLIst.Objects[i]).obj)._prop_Height;
end;
if d › Result then
Result := d;
end;
inc(Result, 2*_prop_Padding);
end;

function TWinLayout.getWidth:integer;
var i,d:integer;
begin
Result := 0;
d := Result;
for i := 0 to FList.Count-1 do
begin
case PBoxRecord(FLIst.Objects[i]).otype of
OBJ_CONTROL: d := PControl(PBoxRecord(FList.Objects[i]).obj).Left + PControl(PBoxRecord(FLIst.Objects[i]).obj).Width;
OBJ_LAYOUT : d := TWinLayout(PBoxRecord(FList.Objects[i]).obj).Left + TWinLayout(PBoxRecord(FLIst.Objects[i]).obj).Width;
OBJ_SPACER : d := THILayoutSpacer(PBoxRecord(FList.Objects[i]).obj)._prop_Left + THILayoutSpacer(PBoxRecord(FLIst.Objects[i]).obj)._prop_Width;
end;
if d › Result then
Result := d;
end;
inc(Result, 2*_prop_Padding);
end;
карма: 11

1
Голосовали:strannik_nebes
Редактировалось 2 раз(а), последний 2025-03-12 12:45:34