Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.002 c
2-1459514237
Макака
2016-04-01 15:37
2018.03.25
Подсветка кода


2-1459952023
eh
2016-04-06 17:13
2018.03.25
Сообщение WM_DeviceChange


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


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


15-1470764730
DayGaykin
2016-08-09 20:45
2018.03.25
Align: К вопросам на засыпку.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский