Конференция "Прочее" » Align: К вопросам на засыпку.
 
  • DayGaykin © (09.08.16 20:45) [0]
    Ответьте без подглядывания на следующие 2 вопроса.

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

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

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


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

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

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

  • Германн © (09.08.16 20:55) [1]
    Зависит от порядка создания панелей.
  • iop © (09.08.16 21:38) [2]
    от порядка присвоения значений алайна.
  • MsGuns © (10.08.16 00:29) [3]
    A
  • Тимохов Дима © (10.08.16 01:09) [4]
    Я когда-то серьезно копал исходники.
    И вроде как вариант А гарантируется.

    "Практика - критерий истины" (с) Игорь Шевченко.
  • Германн © (10.08.16 01:45) [5]

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


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

    Кем гарантируется и в каких случаях?
  • Kilkennycat © (10.08.16 01:56) [6]
    гарантия обеспечивается брингом на фронт или бак.
  • Германн © (10.08.16 02:10) [7]

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

    Брингом на фронт или бак чего?
  • Kilkennycat © (10.08.16 02:11) [8]

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

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

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


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

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

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

    ЗЫ. Не проверял. Автор же предлагал без подглядывания ответить.
  • Kilkennycat © (10.08.16 02:20) [11]

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

    вполне возможно, что мы оба правы. уже не помню.
    по крайней мере, два одинаковых дока точно определяются ордером
  • Германн © (10.08.16 02:35) [12]

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

    Ну не проверял реакцию Align на BringtoFront/SendToBack. Возможно ты и прав. Только при чем тут гарантии?
  • Тимохов Дима © (10.08.16 02:37) [13]

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

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

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

    ЗЗЫ. Опираюсь на исходники от Delphi2007.
  • Тимохов Дима © (10.08.16 02:48) [14]

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


    У Delphi традиционно слабая справка - явно не написано.
    Но код указанного мною выше метода говорит, что гарантии есть.
  • Kilkennycat © (10.08.16 03:26) [15]

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

    возьмем два топа. какой будет первый? получается, только ордер тут определит.
  • Тимохов Дима © (10.08.16 03:32) [16]

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

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

    Исходно вопрос автора был о взаимодействии топа, райта и киента.
    Я до недавнего времени считал, что будет бардак в этом случае. Но потом код поизучал, оказало, что ребята из Дельфи тут все продумали)))
  • Kilkennycat © (10.08.16 04:33) [17]
    ну вот в C# WinForms по-другому продумали. Там только Z и работает, в результате можно хоть по спирали задоковать (заалигнить).
  • KSergey © (10.08.16 14:19) [18]
    Если устанавливаются алигны именно в указанной последовательности - то А
  • KSergey © (10.08.16 14:20) [19]
    только не понятно где это можно подглядеть.
  • KSergey © (10.08.16 14:22) [20]
    > Kilkennycat ©   (10.08.16 02:13) [9]
    > Если уж говорить точнее, то конфигурация зависит от ZOrder панелей

    Нет. Если панели имеют одного родителя - то зависит только от прядка присвоения алигнов.
    Во всяком случае я с вариантом зависимости от чего-ибо другого не встречался никогда.
  • DayGaykin © (10.08.16 14:30) [21]
    Удивительно, что несколько лет посвятив Delphi я никогда не задавался этим вопросом. Я делал сначала две формы top и client, а потом внутри второй делал client и right.

    Причем я помню точно, что на взаимное положение двух панелей alRight влияет их свойство left. Если мышкой переместить более правую панель влево, то он встанет слева.
    Front, Back не влияют.
  • Kilkennycat © (10.08.16 16:56) [22]
    А, значит, я это откуда-то из другой среды почерпнул, да в голове перемешалось...
  • Inovet © (10.08.16 19:12) [23]
    Вроде бы всегда считал, что будет вариант А.
    Но я так не делаю. Делаю две панели - первую топ вторую клиент, на вторую ещё две - райт и клиент. Просто потом так с этим удобнее работать, сплитеры там добавить проще, ну и не только 3 их может быть, может и сложнее что-то, и ещё какие-то соображения были, сходу не вспомню.
  • Тимохов Дима © (11.08.16 00:36) [24]
    Коллеги, предлагаю все же включить дельфи и применить принцип Игоря Шевченко, а именно - практика критерий истины.

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

    ЗЫ. Я тоже всегда считал, что в Align все как-то тухло - не поймешь, как оно будет. И тоже всегда для Panel2 и Panel3 делал родителя с alClient. Полез неск. лет назад изучать исходники VCL. Оказалось, что в дельфи клевые программисты и избавили меня от родителя для Panel2 и Panel3.
  • Sha © (11.08.16 00:56) [25]
    > Тимохов Дима ©   (11.08.16 00:36) [24]

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

    Карл, ты слышишь, Карл)
  • Германн © (11.08.16 01:15) [26]

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

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

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

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

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

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

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

    Да ладно тебе, Дим. Вполне терпимая справка.
  • Тимохов Дима © (11.08.16 02:00) [29]

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


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

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

    как-то раз я их такую кучу наиспользовал, что форма нехило так тормозить начала :)
  • Тимохов Дима © (11.08.16 03:45) [31]

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


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

    "бабло побеждает зло" (с) Умные люди.
  • Kilkennycat © (11.08.16 03:55) [32]

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

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

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

    Мой принцип простой - комп разработчика д.б. хуже, чем у заказчика.
    тогда, если немного хоть пооптимизируешь у себя, то у заказчика летать будет.
  • L_G © (11.08.16 08:10) [34]
    А вот если несколько контролов алигнятся к одному краю и важен их порядок, то, по крайней мере в семерке-классике имел значение не зет-ордер, и даже не порядок назначения проперти "алигн", а одна из координат контрола в момент назначения ему алигна к краю (например, для верхнего края - свойство "топ").
    То есть, если по координате верха он выше каких-то контролов, уже приалигненых к верху и ниже других, то встрянет между первыми и вторыми.
    (поди-ка догадайся об этом без подсматривания в исходник)
  • Sha © (11.08.16 10:24) [35]
    > Тимохов Дима ©   (11.08.16 01:34) [27]
    > Чот я не готов воспринимать философию так глубоко)))

    На самом деле и я тоже.
    Но цитата в свое время была одной из популярнейших.
  • L_G © (11.08.16 15:16) [36]

    > KSergey ©   (10.08.16 14:22) [20]
    > ...от прядка присвоения алигнов.
    > Во всяком случае я с вариантом зависимости от чего-ибо другого
    > не встречался никогда.
    Это потому, что при присвоении контролу алигна, скажем, к топу, его топ-координата обычно становится меньше топ-координаты того, который приалигнят следующим. Но если этого не произойдет - следующий контрол после приалигнивания таки окажется ближе к краю родителя.
    Присвойте свойству топ контрола число меньше нуля перед приалигниванием - и он гарантированно окажется в самом верху. (Проверить можно и в дизайнтайме.)
  • DayGaykin © (15.08.16 11:20) [37]
    Кстати, еще вопрос: что такое alCustom? Кто-нибудь этим пользовался и как?
  • Игорь Шевченко © (15.08.16 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 © (16.08.16 21:12) [39]
    Спасибо за ответ! Умеете удивлять!
 
Конференция "Прочее" » Align: К вопросам на засыпку.
Есть новые Нет новых   [134431   +14][b:0][p:0.002]