Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.03.25;
Скачать: CL | DM;

Вниз

Align: К вопросам на засыпку.   Найти похожие ветки 

 
DayGaykin ©   (2016-08-09 20:45) [0]

Ответьте без подглядывания на следующие 2 вопроса.

Дана форма, на ней три панели.

Устанавливаем свойства таким образом:
Panel1.Align = alTop;
Panel2.Align = alRight;
Panel3.Align = alClient;

Вопрос какая из нижеприведенных конфигураций получится? Гарантировано ли такое поведение?


a)
=========================
.........Panel1..........
=========================
...............|.........
...............|.........
....Panel3.....|.Panel2..
...............|.........
...............|.........
...............|.........

б)
===============|.........
....Panel1.....|.........
===============|.........
...............|.........
...............|.Panel2..
....Panel3.....|.........
...............|.........
...............|.........
...............|.........

в) С пересечением:
===============+=========
........Panel1.|..........
===============+=========
...............|.........
...............|.Panel2..
....Panel3.....|.........
...............|.........
...............|.........
...............|.........


 
Германн ©   (2016-08-09 20:55) [1]

Зависит от порядка создания панелей.


 
iop ©   (2016-08-09 21:38) [2]

от порядка присвоения значений алайна.


 
MsGuns ©   (2016-08-10 00:29) [3]

A


 
Тимохов Дима ©   (2016-08-10 01:09) [4]

Я когда-то серьезно копал исходники.
И вроде как вариант А гарантируется.

"Практика - критерий истины" (с) Игорь Шевченко.


 
Германн ©   (2016-08-10 01:45) [5]


> MsGuns ©   (10.08.16 00:29) [3]
>
> A
>


> Тимохов Дима ©   (10.08.16 01:09) [4]
>
> Я когда-то серьезно копал исходники.
> И вроде как вариант А гарантируется.
>

Кем гарантируется и в каких случаях?


 
Kilkennycat ©   (2016-08-10 01:56) [6]

гарантия обеспечивается брингом на фронт или бак.


 
Германн ©   (2016-08-10 02:10) [7]


> Kilkennycat ©   (10.08.16 01:56) [6]
>
> гарантия обеспечивается брингом на фронт или бак.

Брингом на фронт или бак чего?


 
Kilkennycat ©   (2016-08-10 02:11) [8]


> Германн ©   (10.08.16 02:10) [7]

панелей, разумеется.


 
Kilkennycat ©   (2016-08-10 02:13) [9]

Если уж говорить точнее, то конфигурация зависит от ZOrder панелей


 
Тимохов Дима ©   (2016-08-10 02:16) [10]


> Если уж говорить точнее, то конфигурация зависит от ZOrder
> панелей


зуб не дам, конечно, но, когда изучал, пришел к выводу, что

топ всегда сверху
боттом всегда снизу

лефт, клиент, райт - уже живут между ними.

ЗЫ. Не проверял. Автор же предлагал без подглядывания ответить.


 
Kilkennycat ©   (2016-08-10 02:20) [11]


> Тимохов Дима ©   (10.08.16 02:16) [10]

вполне возможно, что мы оба правы. уже не помню.
по крайней мере, два одинаковых дока точно определяются ордером


 
Германн ©   (2016-08-10 02:35) [12]


> Kilkennycat ©   (10.08.16 02:11) [8]
>
>
> > Германн ©   (10.08.16 02:10) [7]
>
> панелей, разумеется.
>

Ну не проверял реакцию Align на BringtoFront/SendToBack. Возможно ты и прав. Только при чем тут гарантии?


 
Тимохов Дима ©   (2016-08-10 02:37) [13]


> по крайней мере, два одинаковых дока точно определяются
> ордером

Имхо, на вопрос отвечает код метода TWinControl.AlignControls.
В частности, код вложенной процедуры DoAlign.
Сначала топ, потом боттом, а потом все остальные.

ЗЫ. Может, тут и ордер работает. Не знаю.

ЗЗЫ. Опираюсь на исходники от Delphi2007.


 
Тимохов Дима ©   (2016-08-10 02:48) [14]


> Германн ©   (10.08.16 02:35) [12]
>  ... Только при чем тут гарантии?


У Delphi традиционно слабая справка - явно не написано.
Но код указанного мною выше метода говорит, что гарантии есть.


 
Kilkennycat ©   (2016-08-10 03:26) [15]


> Тимохов Дима ©   (10.08.16 02:37) [13]
> Может, тут и ордер работает. Не знаю.

возьмем два топа. какой будет первый? получается, только ордер тут определит.


 
Тимохов Дима ©   (2016-08-10 03:32) [16]


> возьмем два топа. какой будет первый? получается, только
> ордер тут определит.

Ну ясен пень)))

Исходно вопрос автора был о взаимодействии топа, райта и киента.
Я до недавнего времени считал, что будет бардак в этом случае. Но потом код поизучал, оказало, что ребята из Дельфи тут все продумали)))


 
Kilkennycat ©   (2016-08-10 04:33) [17]

ну вот в C# WinForms по-другому продумали. Там только Z и работает, в результате можно хоть по спирали задоковать (заалигнить).


 
KSergey ©   (2016-08-10 14:19) [18]

Если устанавливаются алигны именно в указанной последовательности - то А


 
KSergey ©   (2016-08-10 14:20) [19]

только не понятно где это можно подглядеть.


 
KSergey ©   (2016-08-10 14:22) [20]

> Kilkennycat ©   (10.08.16 02:13) [9]
> Если уж говорить точнее, то конфигурация зависит от ZOrder панелей

Нет. Если панели имеют одного родителя - то зависит только от прядка присвоения алигнов.
Во всяком случае я с вариантом зависимости от чего-ибо другого не встречался никогда.


 
DayGaykin ©   (2016-08-10 14:30) [21]

Удивительно, что несколько лет посвятив Delphi я никогда не задавался этим вопросом. Я делал сначала две формы top и client, а потом внутри второй делал client и right.

Причем я помню точно, что на взаимное положение двух панелей alRight влияет их свойство left. Если мышкой переместить более правую панель влево, то он встанет слева.
Front, Back не влияют.


 
Kilkennycat ©   (2016-08-10 16:56) [22]

А, значит, я это откуда-то из другой среды почерпнул, да в голове перемешалось...


 
Inovet ©   (2016-08-10 19:12) [23]

Вроде бы всегда считал, что будет вариант А.
Но я так не делаю. Делаю две панели - первую топ вторую клиент, на вторую ещё две - райт и клиент. Просто потом так с этим удобнее работать, сплитеры там добавить проще, ну и не только 3 их может быть, может и сложнее что-то, и ещё какие-то соображения были, сходу не вспомню.


 
Тимохов Дима ©   (2016-08-11 00:36) [24]

Коллеги, предлагаю все же включить дельфи и применить принцип Игоря Шевченко, а именно - практика критерий истины.

В результате вы увидите, что:
1. Порядок присвоения Align не важен. Всегда будет вариант А.
2. А потом надо залезть в метод, обозначенный мною выше, и сделать вывод, что всегда будет А.

ЗЫ. Я тоже всегда считал, что в Align все как-то тухло - не поймешь, как оно будет. И тоже всегда для Panel2 и Panel3 делал родителя с alClient. Полез неск. лет назад изучать исходники VCL. Оказалось, что в дельфи клевые программисты и избавили меня от родителя для Panel2 и Panel3.


 
Sha ©   (2016-08-11 00:56) [25]

> Тимохов Дима ©   (11.08.16 00:36) [24]

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

Карл, ты слышишь, Карл)


 
Германн ©   (2016-08-11 01:15) [26]


> Тимохов Дима ©   (11.08.16 00:36) [24]
>
> Коллеги, предлагаю все же включить дельфи и применить принцип
> Игоря Шевченко, а именно - практика критерий истины.
>
> В результате вы увидите, что:

Действительно увидел.
Но я как и Inovet ©   (10.08.16 19:12) [23]
всегда использовал дополнительные панели.


 
Тимохов Дима ©   (2016-08-11 01:34) [27]


> Sha ©   (11.08.16 00:56) [25]

Чот я не готов воспринимать философию так глубоко)))

Лично мне приятно, что на вопрос автора у меня получилось дать правильный ответ без запуска Delphi, причем аргументированный (со ссылкой на исх. код VCL).

ЗЫ Расстраивает слабость справки к Дельфи(((


 
Германн ©   (2016-08-11 01:52) [28]


> ЗЫ Расстраивает слабость справки к Дельфи(((
>

Да ладно тебе, Дим. Вполне терпимая справка.


 
Тимохов Дима ©   (2016-08-11 02:00) [29]


> Германн ©   (11.08.16 01:52) [28]
>
> > ЗЫ Расстраивает слабость справки к Дельфи(((
> >
>
> Да ладно тебе, Дим. Вполне терпимая справка.


Я не фанат МС, но могу сказать (уверенно), что формат MSDN: about, using, reference - идеален. Вернее, БЫЛ идеален. Сейчас (через internet) не могу найти, как справка была в MSDN раньше. Но именно раньше было круче всего - about, using, reference.


 
Kilkennycat ©   (2016-08-11 03:34) [30]


> всегда использовал дополнительные панели.

как-то раз я их такую кучу наиспользовал, что форма нехило так тормозить начала :)


 
Тимохов Дима ©   (2016-08-11 03:45) [31]


> Kilkennycat ©   (11.08.16 03:34) [30]
>
> > всегда использовал дополнительные панели.
>
> как-то раз я их такую кучу наиспользовал, что форма нехило
> так тормозить начала :)


у меня вообще надстройка (фреймворк некий свой) над VCL.
так он тааак тормозит из-за этих доп. панелей.
рекомендация простая - купи машинку побыстрее.
был недавно у заказчика поразился, почему они не ропщут - десктопы как сервера, да еще и мониторы в метр шириной)))
сам то сижу на чем-то допотопном...  

"бабло побеждает зло" (с) Умные люди.


 
Kilkennycat ©   (2016-08-11 03:55) [32]


> Тимохов Дима ©   (11.08.16 03:45) [31]

ну, требуй у них такой же себе, скажи, что не можешь нормально делать для них прогу, так как твой комп круче на порядок, и ты боишься, что программа у них будет тормозить :)


 
Тимохов Дима ©   (2016-08-11 03:57) [33]


> Kilkennycat ©   (11.08.16 03:55) [32]
>
> > Тимохов Дима ©   (11.08.16 03:45) [31]
>
> ну, требуй у них такой же себе, скажи, что не можешь нормально
> делать для них прогу, так как твой комп круче на порядок,
>  и ты боишься, что программа у них будет тормозить :)

Мой принцип простой - комп разработчика д.б. хуже, чем у заказчика.
тогда, если немного хоть пооптимизируешь у себя, то у заказчика летать будет.


 
L_G ©   (2016-08-11 08:10) [34]

А вот если несколько контролов алигнятся к одному краю и важен их порядок, то, по крайней мере в семерке-классике имел значение не зет-ордер, и даже не порядок назначения проперти "алигн", а одна из координат контрола в момент назначения ему алигна к краю (например, для верхнего края - свойство "топ").
То есть, если по координате верха он выше каких-то контролов, уже приалигненых к верху и ниже других, то встрянет между первыми и вторыми.
(поди-ка догадайся об этом без подсматривания в исходник)


 
Sha ©   (2016-08-11 10:24) [35]

> Тимохов Дима ©   (11.08.16 01:34) [27]
> Чот я не готов воспринимать философию так глубоко)))

На самом деле и я тоже.
Но цитата в свое время была одной из популярнейших.


 
L_G ©   (2016-08-11 15:16) [36]


> KSergey ©   (10.08.16 14:22) [20]
> ...от прядка присвоения алигнов.
> Во всяком случае я с вариантом зависимости от чего-ибо другого
> не встречался никогда.
Это потому, что при присвоении контролу алигна, скажем, к топу, его топ-координата обычно становится меньше топ-координаты того, который приалигнят следующим. Но если этого не произойдет - следующий контрол после приалигнивания таки окажется ближе к краю родителя.
Присвойте свойству топ контрола число меньше нуля перед приалигниванием - и он гарантированно окажется в самом верху. (Проверить можно и в дизайнтайме.)


 
DayGaykin ©   (2016-08-15 11:20) [37]

Кстати, еще вопрос: что такое alCustom? Кто-нибудь этим пользовался и как?


 
Игорь Шевченко ©   (2016-08-15 15:18) [38]

В случае alCustom используются функции WinControl
   function CustomAlignInsertBefore(C1, C2: TControl): Boolean; virtual;
   procedure CustomAlignPosition(Control: TControl; var NewLeft, NewTop, NewWidth,
     NewHeight: Integer; var AlignRect: TRect; AlignInfo: TAlignInfo); virtual;

и, соответственно, события
FOnAlignInsertBefore
FOnAlignPosition

Поэтому и custom, что можно перекрывать методы и устанавливать пользовательские (custom) обработчики событий

Это на вопрос: "что такое".
Пользоваться не пользовался, нужды не было, хватало стандратного Align


 
DayGaykin ©   (2016-08-16 21:12) [39]

Спасибо за ответ! Умеете удивлять!



Страницы: 1 вся ветка

Текущий архив: 2018.03.25;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.005 c
15-1470764730
DayGaykin
2016-08-09 20:45
2018.03.25
Align: К вопросам на засыпку.


6-1220778660
Lamer666
2008-09-07 13:11
2018.03.25
Подскажите как отправить письмо используя сокеты?


4-1286460623
OlegSkal
2010-10-07 18:10
2018.03.25
Имя пользователя


4-1287656966
Zheksonz
2010-10-21 14:29
2018.03.25
Как определить находится ли Windows в режим выбора пользователя.


2-1459726395
Погроммист
2016-04-04 02:33
2018.03.25
Отправка файла post запросом, вместо параметра вопросы