Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2012-02-12 01:12:51 ЛС | профиль | цитата
Помогите, пожалуйста, сам не смог разобраться со слоями. Пересмотрел уроки, попробовал, но ничего не выходит, не понимаю логику их работы.

Интерфейс:
code_26832.txt
Надо растягивать, но чтобы выглядел он так же, растягивались тольлко поле ввода, и список строк. Кнопки просто пропорционально передвигались.
карма: 0

0
файлы: 1code_26832.txt [1KB] [140]
Ответов: 3889
Рейтинг: 362
#2: 2012-02-12 01:36:06 ЛС | профиль | цитата
login, что-то слоёв у Вас там не видно. Используйте панели, если не хотите отдельно с каждой кнопкой работать.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#3: 2012-02-12 02:40:50 ЛС | профиль | цитата
Я даже не могу понять сложная это задача или простая. Не понимаю сколько должно быть этих слоёв, и как надо мыслить при их составлении, чтобы решить мою задачку. Любые мои попытки ведут себя непредсказуемо и неадекватно.

Мне понравился элемент Layout Spacer. Я думал я могу придавить им обьект со всех сторон и он никуда не денется, но нет. Layout Spacer почему-то работает всегда только с одной стороны, по одной оси.

Даже если в панели попрятать кнопки, то панели тоже не могу зафиксировать.
------------ Дoбавленo в 02.40:
Возможно я должен создать схему рассчетов координат вывода. И математикой всё это двигать.
Просто я думал, что layouts сделаны именно для того чтобы обходится без математики.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#4: 2012-02-12 02:53:42 ЛС | профиль | цитата
login, подсказка: слои могут вкладываться друг в друга:

Add(Button,15072821,378,28)
{
Left=10
Top=15
Width=125
Height=50
Layout="TopH1"
Caption="размер не меняется"
}
Add(Button,16091945,427,28)
{
Left=550
Top=15
Width=195
Height=50
Layout="TopH1"
Caption="размер не меняется"
}
Add(LayoutSpacer,3739621,378,70)
{
Left=140
Top=20
Width=405
Layout="TopH1"
WidthScale=100
HeightScale=50
}
Add(HBoxLayout,2680084,427,70)
{
Name="TopH1"
Layout="TopV1"
}
Add(VBoxLayout,56801,427,112)
{
Name="TopV1"
}


карма: 1

0
Ответов: 1429
Рейтинг: 50
#5: 2012-02-12 02:59:16 ЛС | профиль | цитата
1nd1g0, эх, ладно, фиг с ним.
Это слишком сложно получается. Сделаю математикой в отдельной панельке весь интерфейс.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#6: 2012-02-12 03:04:39 ЛС | профиль | цитата
login писал(а):
Это слишком сложно получается

Ничего сложного, "математика" делается за Вас, просто грамотно распределить проценты между элементами, а те, что не должны менять размер, получают коэффициэнт 0 по тем измерениям, которые должны сохраняться. Я же Вам показал, как две кнопки подстраиваются под форму за счёт LayoutSpacer, сохраняя при этом размеры.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#7: 2012-02-12 04:37:36 ЛС | профиль | цитата
Подскажите, как сделать размер Sizeble-формы не менее чем определенный?
карма: 0

0
Ответов: 3889
Рейтинг: 362
#8: 2012-02-12 04:52:30 ЛС | профиль | цитата
login писал(а):
сделать размер Sizeble-формы не менее чем определенный

Собственной логикой после onResize, принудительно выставляя размер при попытке его уменьшить.
карма: 1

1
Голосовали:login
Гость
Ответов: 17029
Рейтинг: 0
#9: 2012-02-12 10:38:40 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 16:11:31
карма: 0

0
Ответов: 2270
Рейтинг: 677
#10: 2012-02-12 21:52:05 ЛС | профиль | цитата
login, вот вам с использованием слоев: code_26840.txt, добавил в схему подсказки чтоб можно было разобраться.
login писал(а):
Кнопки просто пропорционально передвигались.

По мне так лучше чтоб их размер изменялся под размер формы (можно сделать).
карма: 11

0
файлы: 1code_26840.txt [3KB] [189]
Ответов: 16884
Рейтинг: 1239
#11: 2012-02-12 22:20:43 ЛС | профиль | цитата
sla8a, по горизонтали. А по вертикали ?
hraz.png

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1hraz.png [60.5KB] [296]
Ответов: 2270
Рейтинг: 677
#12: 2012-02-12 22:42:36 ЛС | профиль | цитата
Tad, вы надпись на кнопках читали?
И вот это:
login писал(а):
растягивались тольлко поле ввода, и список строк

И повторюсь:
login писал(а):
Кнопки просто пропорционально передвигались.

и
sla8a писал(а):
По мне так лучше чтоб их размер изменялся под размер формы (можно сделать).

Вот для вас сделал: code_26844.txt
карма: 11

1
файлы: 1code_26844.txt [3KB] [193]
Голосовали:login
Ответов: 1429
Рейтинг: 50
#13: 2012-02-13 07:48:30 ЛС | профиль | цитата
sla8a, нереально круто! Спасибо!
наконец-то я с этими элементами разберусь.
------------ Дoбавленo в 07.48:
Увы.. Я, совершенно, не понимаю.. Чтобы я не добавлял, как бы я не вкладывал слои друг в друга, нафиг уничтожается всё, что я сделал до этого. И чем дальше тем сильнее, космо-эквилибристически, раскорячивает всё, что на форме. Я не могу.
[offtop]



Возможно есть какая-то последовательная логика работы с ними, которую я не знаю и:
1. Мне не понятно почему именно "слои".

2. Если это слои, то почему в одном слое нельзя зафиксировать элемент, и пойти работать с другим слоем не влияя на предыдущий.(как в фотошопе)

3. Математика рассчета координат, в принципе, довольно, примитивная, чтобы просто поставить в свойства визуального компонета: "прилипнуть к форме=true" "растягиваться по вертикали=true" "растягиваться по горизонтали=false" "менять свой размер=false" 4 опций достаточно, чтобы построить интерфейс любой сложности, учитывая, что все пропорции уже заданы юзером в Редакторе Форм, ему даже не пришлось бы париться если надо что-то изменить. Мышкой подвинул и всё.

(еще и не удивлюсь, если можно не кодить это каждому элементу, а засунуть 4 опции в родительский класс, и все его будут автоматом наследовать)

Но сейчас слои - это нереально, сложная, для понимания, штуковина



Вот, примерно, такая простая логика:

Add(MainForm,2953706,245,182)
{
Width=643
Height=492
Position=1
Point(Left)
Point(Top)
Point(Width)
Point(Height)
Point(onResize)
link(onCreate,2070804:doEvent1,[(285,202)(285,244)])
link(onResize,7849091:doEvent1,[(499,209)(499,265)])
}
Add(Button,11801326,1029,259)
{
Left=215
Top=185
Width=225
Height=55
Caption="Визуальный элемент"
Point(Left)
Point(Top)
Point(Width)
Point(Height)
Point(doLeft)
Point(doTop)
Point(doWidth)
Point(doHeight)
}
Add(StyleXP,13242098,245,140)
{
}
Add(FastMathParse,118560,602,259)
{
DataCount=3
MathStr="((1 / %2) * %1) * %3"
link(onResult,1669216:in1,[(843,265)(843,377)])
link(X1,9772278:Var1,[(608,241)(482,241)])
link(X2,12419805:Var1,[(615,247)(489,247)])
link(X3,15474224:Var3,[(622,229)])
}
Add(CheckBox,11660752,756,378)
{
Left=85
Top=45
Width=70
Caption="Left"
link(onCheck,3244774:doCase,[])
}
Add(CheckBox,16705669,756,427)
{
Left=85
Top=70
Width=70
Caption="Top"
link(onCheck,13899302:doCase,[])
}
Add(CheckBox,1360993,756,476)
{
Left=85
Top=95
Width=70
Caption="Width"
link(onCheck,441754:doCase,[])
}
Add(CheckBox,929621,756,525)
{
Left=85
Top=120
Width=70
Caption="Height"
link(onCheck,5307391:doCase,[])
}
Add(Memory,15794732,378,238)
{
@Color=170
Default=Integer(0)
Point(Data)
link(onData,14552538:doValue,[])
link(Data,15474224:Var2,[])
}
Add(Hub,2070804,294,238)
{
OutCount=5
link(onEvent1,15794732:doValue,[])
link(onEvent2,14637018:doValue,[(361,251)(361,335)])
link(onEvent3,15096014:doValue,[(352,258)(352,468)])
link(onEvent4,1700656:doValue,[(342,265)(342,531)])
link(onEvent5,5236301:doValue,[(330,272)(330,664)])
}
Add(GetDataEx,15474224,378,224)
{
Angle=3
link(Data,16009068:Var3,[])
}
Add(Memory,15096014,378,462)
{
@Color=170
Default=Integer(0)
Point(Data)
link(Data,4384005:Var2,[])
}
Add(Memory,14552538,441,238)
{
@Color=5614165
Default=Integer(0)
Point(Data)
link(Data,11801326:Left,[(447,198)(1075,198)(1075,303)(1035,303)])
}
Add(FastMathParse,2962089,623,413)
{
DataCount=3
MathStr="((1 / %2) * %1) * %3"
link(onResult,2789038:in1,[(846,419)(846,426)])
link(X1,10709406:Var2,[])
link(X2,5948693:Var3,[(636,377)(425,377)(425,502)])
link(X3,4384005:Var1,[(643,386)(384,386)])
}
Add(Memory,14637018,441,329)
{
@Color=5614165
Default=Integer(0)
Point(Data)
link(Data,11801326:Top,[(447,321)(1042,321)])
}
Add(Hub,7849091,532,259)
{
OutCount=4
link(onEvent1,118560:doCalc,[])
link(onEvent2,2962089:doCalc,[(593,272)(593,419)])
link(onEvent3,8558933:doCalc,[(585,279)(585,594)])
link(onEvent4,15321686:doCalc,[(573,286)(573,671)])
}
Add(GetDataEx,4384005,378,434)
{
Angle=3
link(Data,3444159:Var3,[])
}
Add(FastMathParse,8558933,595,588)
{
DataCount=3
MathStr="((1 / %2) * %1) * %3"
link(onResult,4462138:in1,[(793,594)(793,475)])
link(X1,1283222:Var2,[])
link(X2,12419805:Var3,[(608,306)])
link(X3,16009068:Var2,[(615,569)(265,569)])
}
Add(Memory,1700656,441,525)
{
@Color=5614165
Default=Integer(0)
Point(Data)
link(Data,11801326:Width,[(447,511)(1049,511)])
}
Add(GetDataEx,12419805,483,301)
{
Angle=3
link(Data,15794732:Value,[(384,306)])
}
Add(GetDataEx,16009068,259,224)
{
link(Data,2953706:Width,[])
}
Add(FastMathParse,15321686,595,665)
{
DataCount=3
MathStr="((1 / %2) * %1) * %3"
link(onResult,8596033:in1,[(836,671)(836,524)])
link(X1,3708405:Var1,[(601,645)(489,645)])
link(X2,5948693:Var2,[(608,638)(384,638)])
link(X3,3444159:Var2,[(615,628)(276,628)(272,628)])
}
Add(Memory,5236301,441,658)
{
@Color=5614165
Default=Integer(0)
Point(Data)
link(Data,11801326:Height,[(447,653)(1056,653)])
}
Add(GetDataEx,5948693,378,497)
{
link(Data,15096014:Value,[])
}
Add(GetDataEx,3444159,266,434)
{
link(Data,2953706:Height,[])
}
Add(InlineCode,1669216,854,371)
{
@Hint=#19:Switcher (из макса)|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|13: i:integer;|9: public|29: out1:THI_Event; //выход 1|29: out2:THI_Event; //выход 2|3: |55: procedure in1(var Data:TData; index:word); // Вход 1|3: |64: procedure doSelect1(var DataS1:TData; index:word); // select1|64: procedure doSelect2(var DataS2:TData; index:word); // select2|3: |5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.in1; // Вход 1|4: |5:begin|21: if i = 0 then|31: _hi_OnEvent(out1, Data)|8: else|32: _hi_OnEvent(out2, Data);|4:end;|4: |51: procedure THiAsmClass.doSelect1; // select1|30: begin i := 0; end;|12: |51: procedure THiAsmClass.doSelect2; // select2|30: begin i := 1; end;|0:|4:end.|
link(out1,4422299:doWork3,[(893,377)])
link(out2,15677796:doData,[])
}
Add(Case,3244774,798,378)
{
Value=Integer(1)
link(onNextCase,1669216:doSelect2,[(842,384)(842,391)])
link(onTrue,1669216:doSelect1,[(842,391)(842,384)])
}
Add(DoData,15677796,903,378)
{
link(onEventData,4422299:doWork1,[(947,384)(947,356)])
link(Data,9772278:Var3,[(909,299)])
}
Add(Timer,4585124,630,462)
{
Interval=75
AutoStop=1
link(onTimer,5216328:doData,[])
}
Add(DoData,5216328,672,462)
{
Data=String()
link(onEventData,10831187:doEvent1,[])
}
Add(Hub,10831187,714,462)
{
OutCount=4
link(onEvent1,11660752:doCheck,[(736,468)(736,384)])
link(onEvent2,16705669:doCheck,[(742,475)(742,433)])
link(onEvent3,1360993:doCheck,[])
link(onEvent4,929621:doCheck,[(742,489)(742,531)])
}
Add(InlineCode,2789038,854,420)
{
@Hint=#19:Switcher (из макса)|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|13: i:integer;|9: public|29: out1:THI_Event; //выход 1|29: out2:THI_Event; //выход 2|3: |55: procedure in1(var Data:TData; index:word); // Вход 1|3: |64: procedure doSelect1(var DataS1:TData; index:word); // select1|64: procedure doSelect2(var DataS2:TData; index:word); // select2|3: |5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.in1; // Вход 1|4: |5:begin|21: if i = 0 then|31: _hi_OnEvent(out1, Data)|8: else|32: _hi_OnEvent(out2, Data);|4:end;|4: |51: procedure THiAsmClass.doSelect1; // select1|30: begin i := 0; end;|12: |51: procedure THiAsmClass.doSelect2; // select2|30: begin i := 1; end;|0:|4:end.|
link(out1,16598265:doWork2,[])
link(out2,13371142:doData,[])
}
Add(Case,13899302,798,427)
{
Value=Integer(1)
link(onNextCase,2789038:doSelect2,[(842,433)(842,440)])
link(onTrue,2789038:doSelect1,[(842,440)(842,433)])
}
Add(DoData,13371142,903,427)
{
link(onEventData,16598265:doWork3,[(942,433)])
link(Data,10709406:Var3,[(909,369)])
}
Add(HubEx,16598265,938,420)
{
link(onEvent,11801326:doTop,[(965,426)(965,272)])
}
Add(HubEx,4422299,889,350)
{
Angle=3
link(onEvent,11801326:doLeft,[(893,265)])
}
Add(InlineCode,4462138,854,469)
{
@Hint=#19:Switcher (из макса)|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|13: i:integer;|9: public|29: out1:THI_Event; //выход 1|29: out2:THI_Event; //выход 2|3: |55: procedure in1(var Data:TData; index:word); // Вход 1|3: |64: procedure doSelect1(var DataS1:TData; index:word); // select1|64: procedure doSelect2(var DataS2:TData; index:word); // select2|3: |5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.in1; // Вход 1|4: |5:begin|21: if i = 0 then|31: _hi_OnEvent(out1, Data)|8: else|32: _hi_OnEvent(out2, Data);|4:end;|4: |51: procedure THiAsmClass.doSelect1; // select1|30: begin i := 0; end;|12: |51: procedure THiAsmClass.doSelect2; // select2|30: begin i := 1; end;|0:|4:end.|
link(out1,11574508:doWork2,[])
link(out2,13182158:doData,[])
}
Add(Case,441754,798,476)
{
Value=Integer(1)
link(onNextCase,4462138:doSelect2,[(842,482)(842,489)])
link(onTrue,4462138:doSelect1,[(842,489)(842,482)])
}
Add(DoData,13182158,903,476)
{
link(onEventData,11574508:doWork3,[(942,482)])
link(Data,1283222:Var1,[(909,464)(601,464)])
}
Add(HubEx,11574508,938,469)
{
link(onEvent,11801326:doWidth,[(974,475)(974,279)])
}
Add(InlineCode,8596033,854,518)
{
@Hint=#19:Switcher (из макса)|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|13: i:integer;|9: public|29: out1:THI_Event; //выход 1|29: out2:THI_Event; //выход 2|3: |55: procedure in1(var Data:TData; index:word); // Вход 1|3: |64: procedure doSelect1(var DataS1:TData; index:word); // select1|64: procedure doSelect2(var DataS2:TData; index:word); // select2|3: |5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.in1; // Вход 1|4: |5:begin|21: if i = 0 then|31: _hi_OnEvent(out1, Data)|8: else|32: _hi_OnEvent(out2, Data);|4:end;|4: |51: procedure THiAsmClass.doSelect1; // select1|30: begin i := 0; end;|12: |51: procedure THiAsmClass.doSelect2; // select2|30: begin i := 1; end;|0:|4:end.|
link(out1,15609206:doWork2,[])
link(out2,3256343:doData,[])
}
Add(Case,5307391,798,525)
{
Value=Integer(1)
link(onNextCase,8596033:doSelect2,[(842,531)(842,538)])
link(onTrue,8596033:doSelect1,[(842,538)(842,531)])
}
Add(DoData,3256343,903,525)
{
link(onEventData,15609206:doWork3,[(942,531)])
link(Data,3708405:Var3,[(909,516)(893,516)(893,705)])
}
Add(HubEx,15609206,938,518)
{
link(onEvent,11801326:doHeight,[(984,524)(984,286)])
}
Add(GetDataEx,9772278,476,294)
{
Angle=3
link(Data,14552538:Value,[(447,299)])
}
Add(GetDataEx,10709406,623,364)
{
Angle=3
link(Data,14637018:Value,[(447,369)])
}
Add(GetDataEx,1283222,595,567)
{
Angle=3
link(Data,1700656:Value,[(447,572)])
}
Add(GetDataEx,3708405,483,700)
{
Angle=3
link(Data,5236301:Value,[(447,705)])
}
Add(Label,12747105,203,140)
{
Left=85
Top=25
Width=66
Height=17
Caption="Что менять:"
}


(ну, понятно, это упрощенный вариант, с Редактора Форм нужно снимать все данные, отступ от краев формы, и т.д..)[/offtop]
карма: 0

0
Ответов: 2270
Рейтинг: 677
#14: 2012-02-13 23:08:24 ЛС | профиль | цитата
login писал(а):
Увы.. Я, совершенно, не понимаю..

Вот добавил разъяснений: code_26861.txt
карма: 11

0
файлы: 1code_26861.txt [5.6KB] [206]
Ответов: 1429
Рейтинг: 50
#15: 2012-02-14 07:23:19 ЛС | профиль | цитата
sla8a, спасибо, сижу изучаю..
карма: 0

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