Вверх ↑
Этот топик читают: Гость
Ответов: 34
Рейтинг: 0
#1: 2018-07-10 10:07:38 ЛС | профиль | цитата
Сделал в программке изменение окна на весь экран, в зависимости от текущего разрешения.
Как сделать так что бы все элементы на экране размещались по центру при любом разрешении? НАшел способ как один элемент можно прилепить по центру сверху или снизу, но как сделать так что бы группа элементов была по центру, в том состоянии в котором она была изначально, просто немного сдвинута.

Если выделить все элементы и попробовать их прицепить например к верху, то они все распадаются на хаотичные размещения кнопок)

Есть ли способ объединить элементы как бы в 1 нераздельный и его центрировать уже?)
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 2193
Рейтинг: 673
#2: 2018-07-10 11:06:23 ЛС | профиль | цитата
Используйте компоненты Слои, примеры есть.
карма: 10

0
Ответов: 8887
Рейтинг: 823
#3: 2018-07-10 12:16:47 ЛС | профиль | цитата
ZloiDed, или просто подсчитать
Считаем положение


Add(MainForm,2953706,147,105)
{
Point(Width)
Point(Height)
Point(onResize)
link(onCreate,7556638:doEvent1,[])
link(onResize,11599988:doWork1,[(187,132)])
}
Add(ChildGroupBox,5859214,238,119)
{
}
BEGIN_SDK
Add(EditMulti,1419228,21,21)
{
WorkCount=2
VarCount=2
Height=214
link(doWork1,4872526:doFor,[(49,27)(49,76)])
link(doWork2,8572893:doSplit,[(39,34)(39,181)])
link(Var1,7684188:Width,[(27,215)(111,215)])
link(Var2,7684188:Height,[(34,222)(118,222)])
}
Add(GroupBox,7684188,105,175)
{
Left=55
Top=40
Width=260
Height=160
Caption=""
Point(doLeft)
Point(doTop)
Point(Width)
Point(Height)
}
Add(Edit,10083082,147,28)
{
Left=20
Top=25
}
Add(ComboBox,7772686,196,28)
{
Left=75
Top=25
Width=105
Height=21
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|
}
Add(Button,2824454,252,28)
{
Left=190
Top=25
}
Add(StringTable,13301582,252,105)
{
Left=20
Top=55
Width=220
Height=95
Columns=#4:1=50|4:2=50|4:3=50|4:4=50|
Grid=0
Point(Matrix)
}
Add(For,4872526,63,70)
{
End=19
link(onEvent,3642601:doEvent1,[])
}
Add(Random,12548400,189,112)
{
Min=101
Max=999
link(onRandom,3524653:doWrite,[(242,118)(242,188)])
}
Add(For,13548476,147,112)
{
End=3
link(onEvent,12548400:doRandom,[])
}
Add(MatrixRW,3524653,266,175)
{
link(Matrix,13301582:Matrix,[])
link(X,13548476:Position,[(286,159)(153,159)])
link(Y,4872526:Position,[(293,166)(69,166)])
}
Add(Hub,3642601,112,70)
{
link(onEvent1,13987110:doData,[])
link(onEvent2,13548476:doFor,[(137,83)(137,118)])
}
Add(DoData,13987110,147,70)
{
Data=String(;;;)
link(onEventData,13301582:doAdd,[(242,76)(242,111)])
}
Add(MultiStrData,8572893,56,175)
{
link(onPart1,7684188:doLeft,[])
link(onPart2,7684188:doTop,[])
}
END_SDK
Add(MultiElement,8855278,147,175)
{
link(onEvent1,5859214:doWork2,[(230,181)(230,132)])
link(Data1,2953706:Width,[])
link(Data2,2953706:Height,[])
link(Data3,5859214:Var1,[(167,159)(244,159)])
link(Data4,5859214:Var2,[(174,166)(251,166)])
}
BEGIN_SDK
Add(EditMulti,15150773,21,21)
{
EventCount=1
WorkCount=1
DataCount=4
Width=216
Height=102
VOffset=42
HOffset=49
link(doWork1,7662616:doCalc,[])
}
Add(MathParse,7662616,70,63)
{
MathStr="(%1-15 - %2)/2"
ResultType=0
link(onResult,7308815:doCalc,[])
link(X1,15150773:Data1,[])
link(X2,15150773:Data3,[(83,40)(90,40)])
}
Add(MathParse,7308815,126,63)
{
MathStr="(%1-40 - %2)/2"
ResultType=0
link(onResult,1611447:doString,[])
link(X1,15150773:Data2,[(132,33)(83,33)])
link(X2,15150773:Data4,[(139,26)(97,26)])
}
Add(FormatStr,1611447,182,63)
{
Mask="%1;%2"
link(onFString,15150773:onEvent1,[])
link(Str1,7662616:Result,[(188,54)(174,54)(174,103)(76,103)])
}
END_SDK
Add(Hub,7556638,196,119)
{
link(onEvent1,5859214:doWork1,[])
link(onEvent2,11599988:doWork2,[(221,132)(221,146)])
}
Add(HubEx,11599988,183,140)
{
Angle=2
link(onEvent,8855278:doWork1,[(137,146)(137,181)])
}

карма: 19

0
Ответов: 34
Рейтинг: 0
#4: 2018-07-10 13:26:35 ЛС | профиль | цитата
sla8a писал(а):
Используйте компоненты Слои, примеры есть.

из тех примеров что с программой идет, немного не понял как работать, допустим объединил все элементы в одну форму, как сделать что бы форма элементов не менялась, а просто скопом передвигалась в центр экрана? у меня либо все расходится
Леонид писал(а):
ZloiDed, или просто подсчитать
Считаем положение

А поподробнее что вы за компоненты используете? у меня около 20 элементов на форме, можно это сделать одним махом?
карма: 0

0
Ответов: 2193
Рейтинг: 673
#5: 2018-07-10 13:54:45 ЛС | профиль | цитата
Работа с слоями:
1. Добавить на схему элементы слоя: Горизонтальный, Вертикальный и четыре Отступ в слоях.
2. В свойстве Name элемента Горизонтальный пишем: gor, у Вертикального пишем: ver.
3. Выделяем все интерфейсные элементы которые должны быть выровнены по центру сразу или поодиночке и в свойстве Слой(Layout) выбираем (там должен быть в списке) слой ver.
4. Переходим в редактор формы (иконка в меню с карандашиком) и ставим один элемент Отступ в слоях сверху интерфейсных элементов, другой снизу. Размер элементов отступа сделайте по минимальному размеру интерфейсного элемента.
5. Выходим из редактора формы и задаем этим двум элементам в свойствах: Layout= ver (выбрать в списке), а HeightScale = 50.( 50 это проценты в которые верхний и нижний отступ получат, от всего что останется после установки интерфейсных элементов.)
6. В Вертикальном слое в свойствах Layout выбираем gor.
7. Переходим в редактор формы и третий и четвертый элементы Отступы ставим слева и справа от интерфейсных элементов.
8. Выходим из редактора формы и в свойствах третьего и четвертого отступа выставляем: Layout = gor (выбрать в списке), WidthScale = 50.

Вот что должно получится:

Add(MainForm,2953706,21,105)
{
Width=860
Height=575
Position=1
}
Add(Edit,12607367,525,91)
{
Left=335
Top=50
Width=75
Layout="ver"
}
Add(Edit,15987521,525,133)
{
Left=255
Top=75
Width=130
Layout="ver"
}
Add(Edit,14333144,525,189)
{
Left=290
Top=100
Width=70
Layout="ver"
}
Add(Edit,6989709,525,231)
{
Left=310
Top=125
Width=185
Layout="ver"
}
Add(Edit,11422441,525,301)
{
Left=245
Top=150
Width=140
Layout="ver"
}
Add(Edit,6637786,525,343)
{
Left=335
Top=175
Width=125
Layout="ver"
}
Add(LayoutSpacer,14078018,448,406)
{
Left=325
Top=220
Width=120
Height=25
Layout="ver"
HeightScale=50
}
Add(HBoxLayout,2629070,105,420)
{
Name="gor"
}
Add(VBoxLayout,4389918,448,455)
{
Name="ver"
Layout="gor"
}
Add(LayoutSpacer,11757714,441,21)
{
Left=310
Top=20
Height=20
Layout="ver"
HeightScale=50
}
Add(LayoutSpacer,1018386,105,231)
{
Left=135
Top=100
Layout="gor"
WidthScale=50
}
Add(LayoutSpacer,15037703,784,217)
{
Left=550
Top=85
Layout="gor"
WidthScale=50
}
карма: 10

0
Ответов: 34
Рейтинг: 0
#6: 2018-07-10 17:13:28 ЛС | профиль | цитата
sla8a писал(а):
Работа с слоями:
1. Добавить на схему элементы слоя: Горизонтальный, Вертикальный и четыре Отступ в слоях.



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

Add(MainForm,4802695,0,84)
{
Width=860
Height=575
Position=1
}
Add(Edit,12607367,504,70)
{
Left=290
Top=105
Width=75
Layout="ver"
Text="пунк 1"
}
Add(Edit,15987521,503,112)
{
Left=350
Top=195
Width=45
Layout="ver"
Text="Поле 2"
}
Add(Edit,14333144,504,168)
{
Left=420
Top=105
Width=70
Layout="ver"
Text="пункт 2"
}
Add(Edit,6989709,504,210)
{
Left=355
Top=150
Width=40
Layout="ver"
Text="Поле 1"
}
Add(Edit,11422441,504,280)
{
Left=350
Top=240
Width=60
Layout="ver"
Text="поле 3"
}
Add(Edit,6637786,504,322)
{
Left=331
Top=295
Width=125
Layout="ver"
Text="Итог"
}
Add(LayoutSpacer,14078018,427,385)
{
Left=345
Top=350
Width=120
Height=25
Layout="ver"
HeightScale=50
}
Add(HBoxLayout,2629070,84,399)
{
Name="gor"
}
Add(VBoxLayout,4389918,427,434)
{
Name="ver"
Layout="gor"
}
Add(LayoutSpacer,11757714,420,0)
{
Left=310
Top=20
Height=20
Layout="ver"
HeightScale=50
}
Add(LayoutSpacer,1018386,84,210)
{
Left=130
Top=140
Layout="gor"
WidthScale=50
}
Add(LayoutSpacer,15037703,763,196)
{
Left=580
Top=140
Layout="gor"
WidthScale=50
}
Add(UpDown,1297184,378,70)
{
Left=395
Top=195
Height=25
Layout="ver"
}
Add(UpDown,5062521,371,147)
{
Left=395
Top=240
Layout="ver"
}
Add(UpDown,16325913,483,119)
{
Left=395
Top=150
Width=25
Layout="ver"
}
Add(Label,8714414,413,35)
{
Left=340
Top=65
Width=96
Height=18
Layout="ver"
Caption="Текст бла бла бла"
}
Add(Label,11188188,329,161)
{
Left=360
Top=170
Width=38
Height=18
Layout="ver"
Caption="Поле 1"
}
Add(Label,1232406,343,210)
{
Left=355
Top=215
Width=38
Height=18
Layout="ver"
Caption="Поле 2"
}
Add(Label,9097447,273,259)
{
Left=350
Top=260
Width=38
Height=18
Layout="ver"
Caption="Поле 3"
}


Редактировалось 2 раз(а), последний 2018-07-10 17:14:38
карма: 0

0
Ответов: 8887
Рейтинг: 823
#7: 2018-07-10 17:31:50 ЛС | профиль | цитата
ZloiDed писал(а):
что вы за компоненты используете
Скопируйте выложенную схему в HiAsm, там все компоненты и есть
Ещё раз


Add(MainForm,9192624,350,49)
{
Width=304
Height=370
Point(Width)
Point(Height)
Point(onResize)
link(onCreate,11413284:doWork1,[(397,69)])
link(onResize,11413284:doWork2,[])
}
Add(ChildGroupBox,5859214,441,63)
{
}
BEGIN_SDK
Add(EditMulti,1419228,21,21)
{
WorkCount=2
VarCount=2
Width=419
Height=305
link(doWork1,8572893:doSplit,[(32,27)(32,41)])
link(Var1,7684188:Width,[(27,215)(97,215)])
link(Var2,7684188:Height,[(34,222)(104,222)])
}
Add(GroupBox,7684188,91,35)
{
Left=55
Top=40
Width=221
Height=294
WinStyle=1
Caption=""
Flat=0
Point(doLeft)
Point(doTop)
Point(Width)
Point(Height)
}
Add(MultiStrData,8572893,42,35)
{
link(onPart1,7684188:doLeft,[])
link(onPart2,7684188:doTop,[])
}
Add(Edit,12607367,217,126)
{
Left=5
Top=65
Width=75
Layout="ver"
Text="пунк 1"
}
Add(Edit,15987521,216,168)
{
Left=65
Top=155
Width=45
Layout="ver"
Text="Поле 2"
}
Add(Edit,14333144,259,119)
{
Left=135
Top=65
Width=70
Layout="ver"
Text="пункт 2"
}
Add(Edit,6989709,301,126)
{
Left=70
Top=110
Width=40
Layout="ver"
Text="Поле 1"
}
Add(Edit,11422441,266,168)
{
Left=65
Top=200
Width=60
Layout="ver"
Text="поле 3"
}
Add(Edit,6637786,308,168)
{
Left=46
Top=255
Width=125
Layout="ver"
Text="Итог"
}
Add(UpDown,1297184,259,77)
{
Left=110
Top=155
Height=25
Layout="ver"
}
Add(UpDown,5062521,210,77)
{
Left=110
Top=200
Layout="ver"
}
Add(UpDown,16325913,301,77)
{
Left=110
Top=110
Width=25
Layout="ver"
}
Add(Label,8714414,168,217)
{
Left=55
Top=25
Width=96
Height=18
Layout="ver"
Caption="Текст бла бла бла"
}
Add(Label,11188188,161,77)
{
Left=75
Top=130
Width=38
Height=18
Layout="ver"
Caption="Поле 1"
}
Add(Label,1232406,168,126)
{
Left=70
Top=175
Width=38
Height=18
Layout="ver"
Caption="Поле 2"
}
Add(Label,9097447,168,168)
{
Left=65
Top=220
Width=38
Height=18
Layout="ver"
Caption="Поле 3"
}
END_SDK
Add(MultiElement,8855278,350,119)
{
link(onEvent1,5859214:doWork1,[(403,125)(403,69)])
link(Data1,9192624:Width,[])
link(Data2,9192624:Height,[])
link(Data3,5859214:Var1,[(370,103)(447,103)])
link(Data4,5859214:Var2,[(377,110)(454,110)])
}
BEGIN_SDK
Add(EditMulti,15150773,21,21)
{
EventCount=1
WorkCount=1
DataCount=4
Width=216
Height=102
VOffset=42
HOffset=49
link(doWork1,7662616:doCalc,[])
}
Add(MathParse,7662616,70,63)
{
MathStr="(%1-15 - %2)/2"
ResultType=0
link(onResult,7308815:doCalc,[])
link(X1,15150773:Data1,[])
link(X2,15150773:Data3,[(83,40)(90,40)])
}
Add(MathParse,7308815,126,63)
{
MathStr="(%1-40 - %2)/2"
ResultType=0
link(onResult,1611447:doString,[])
link(X1,15150773:Data2,[(132,33)(83,33)])
link(X2,15150773:Data4,[(139,26)(97,26)])
}
Add(FormatStr,1611447,182,63)
{
Mask="%1;%2"
link(onFString,15150773:onEvent1,[])
link(Str1,7662616:Result,[(188,54)(174,54)(174,103)(76,103)])
}
END_SDK
Add(HubEx,11413284,393,70)
{
Angle=1
link(onEvent,8855278:doWork1,[(397,90)(340,90)(340,125)])
}

карма: 19

0
Ответов: 2193
Рейтинг: 673
#8: 2018-07-10 17:39:43 ЛС | профиль | цитата
ZloiDed, какой вопрос, такой ответ. Хотели элементы в центре, получили. Откуда мне было знать какой у вас там интерфейс, сколько элементов и на каком расстоянии друг от друга.
Один из простых способов, думаю для вас подойдет. Запихать все в панель и выровнять только её.

Add(MainForm,4802695,273,140)
{
Width=860
Height=575
Position=1
}
Add(LayoutSpacer,14078018,280,336)
{
Left=330
Top=380
Width=120
Height=25
Layout="ver"
HeightScale=50
}
Add(HBoxLayout,2629070,196,378)
{
Name="gor"
}
Add(VBoxLayout,4389918,280,378)
{
Name="ver"
Layout="gor"
}
Add(LayoutSpacer,11757714,280,294)
{
Left=310
Top=20
Height=20
Layout="ver"
HeightScale=50
}
Add(LayoutSpacer,1018386,238,378)
{
Left=130
Top=140
Layout="gor"
WidthScale=50
}
Add(LayoutSpacer,15037703,322,378)
{
Left=580
Top=140
Layout="gor"
WidthScale=50
}
Add(ChildPanelEx,14587797,329,140)
{
}
BEGIN_SDK
Add(EditMultiEx,13077454,21,21)
{
Width=874
Height=536
}
Add(Panel,11793772,35,105)
{
Left=275
Top=75
Width=213
Height=272
Layout="parent.ver"
BevelInner=0
}
Add(Edit,12607367,581,203)
{
Left=5
Top=45
Width=75
Text="пунк 1"
}
Add(Edit,15987521,580,245)
{
Left=65
Top=135
Width=45
Text="Поле 2"
}
Add(Edit,14333144,581,301)
{
Left=135
Top=45
Width=70
Text="пункт 2"
}
Add(Edit,6989709,581,343)
{
Left=70
Top=90
Width=40
Text="Поле 1"
}
Add(Edit,11422441,581,413)
{
Left=65
Top=180
Width=60
Text="поле 3"
}
Add(Edit,6637786,581,455)
{
Left=46
Top=235
Width=125
Text="Итог"
}
Add(UpDown,1297184,455,203)
{
Left=110
Top=135
Height=25
}
Add(UpDown,5062521,448,280)
{
Left=110
Top=180
}
Add(UpDown,16325913,560,252)
{
Left=110
Top=90
Width=25
}
Add(Label,8714414,490,168)
{
Left=55
Top=5
Width=96
Height=18
Caption="Текст бла бла бла"
}
Add(Label,11188188,406,294)
{
Left=75
Top=110
Width=38
Height=18
Caption="Поле 1"
}
Add(Label,1232406,420,343)
{
Left=70
Top=155
Width=38
Height=18
Caption="Поле 2"
}
Add(Label,9097447,350,392)
{
Left=65
Top=200
Width=38
Height=18
Caption="Поле 3"
}
END_SDK

Но не что не мешает, выровнять все интерфейсные элементы с помощью дополнительных слоев.

Редактировалось 1 раз(а), последний 2018-07-10 17:41:10
карма: 10

0
Ответов: 5227
Рейтинг: 586
#9: 2018-07-15 20:03:38 ЛС | профиль | цитата
опять слои , есть у меня рабочий вариант win.pas который добавляет такие свойства из делфи как Anchors, Margin, Consraints. (работает и под FPC) Так что ZloiDed, если интересно про свойства гугл в помощь. Про геморой со слоями можно будет забыть.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)