Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#16: 2007-07-18 22:27:54 ЛС | профиль | цитата
Редактор форм - твой
Прозрачность - моя. Не вдруг конечно
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#17: 2007-07-18 22:42:18 ЛС | профиль | цитата
А вот прошу пояснить при чем тут редактор формы. По всем параметрам панели выравненные по одному краю с Top позициями 0 10 20 30... должны разместиться на форме строго в определенной последовательности. Без вариантов.
карма: 26
0
Ответов: 9906
Рейтинг: 351
#18: 2007-07-18 23:26:45 ЛС | профиль | цитата
Тогда все будет как есть

100 раз это все уже обсасывали
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#19: 2007-07-18 23:51:07 ЛС | профиль | цитата
не помню чем все окончилось
карма: 26
0
Ответов: 9906
Рейтинг: 351
#20: 2007-07-19 03:08:52 ЛС | профиль | цитата
А я тоже не помню

Но, не вспоминая, могу сходу сказать примерно такое:

  • Про "без вариантов": их может быть сколько угодно
  • Подозреваю (точного знания не имею), что сегодняшнее поведение редактора форм для Align - это вариант VCL. И нет никаких оснований считать, что это догма во все времена
  • Не думаю, что цифирьки 0 10 20 30... - Вячеслав писал ручками. Это сделала среда. И она же сделала "выстраиваются в непредсказуемом порядке"
  • В варианте KOL последовательность привязки определяется не координатами, а порядком создания.
  • Могут существовать и иные св-ва, определяющие размеры/положение контрола на паренте, кроме сегодняшних пяти. В том числе, не следует нам ограничивать творчество автора конкретного элемента, у которого может попасть возжа под хвост, чтобы сделать размеры контрола как квадратный корень из размеров парента. Не говоря уже о том, что в KOL для нашего Win есть заготовленные anchor-ы, к примеру. Да и св-во border тоже на привязку работает уже сегодня (в отличие от VCL, насколько я понимаю)
  • Точно так же, не думаю, что нам следует ограничивать авторов пакета. Ну предположим мы договорились с колегой tsdima, что пусть будет все по возможности одинаково. Было у нас в его форуме длинное обсуждение, какие порядки в схеме у нас существуют, и как нам к ним лучше привязываться. Но мне кажется, было бы правильно, чтобы и он имел право и на свое видение, отличное как от VCL, так и от KOL. Другой разговор: надо ли, чтобы было по разному - но право пусть имеет...
  • А такой пример я уже и не помню сколько раз (да и где - тоже) выкладывал:
    Add(ChildPanel,8274163,98,105)
    {
    }
    BEGIN_SDK
    Add(EditMulti,10085832,21,21)
    {
    }
    Add(Panel,13673908,35,105)
    {
    Width=135
    Height=266
    Align=1
    BorderWidth=20
    BevelInner=0
    BevelWidth=0
    Point(doColor)
    }
    Add(Button,5120866,98,35)
    {
    Left=10
    Top=10
    Width=115
    Align=2
    Caption="1"
    }
    Add(Button,10199695,98,77)
    {
    Left=10
    Top=30
    Width=115
    Align=2
    Caption="2"
    }
    Add(Button,4427141,98,119)
    {
    Left=10
    Top=50
    Width=115
    Align=2
    Caption="3"
    }
    Add(Button,2596789,98,168)
    {
    Left=10
    Top=70
    Width=115
    Align=2
    Caption="4"
    }
    END_SDK

  • А есть еще и сплитеры со своими ненулевыми размерами
  • карма: 9

    0
    Администрация
    Ответов: 15294
    Рейтинг: 1518
    #21: 2007-07-19 10:26:14 ЛС | профиль | цитата
    Galkov писал(а):
    Про "без вариантов": их может быть сколько угодно

    не вижу ничего более логичного, чем VCL расположение контролов в соответствие с их координатами. У кого меньше, тот и выше. Во всяком случае понятно, как влиять на это. Да и в Windows Explorer скажем при автовыравнивание можно взять иконку и впихнуть между двумя любыми файлами. Собственно не могу вот так сходу привести пример где бы была иная логика.

    Galkov писал(а):
    В варианте KOL последовательность привязки определяется не координатами, а порядком создания.

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

    Права на другое видиние разработчик безусловно имеет. Однако какой уж есть редактор такой есть... За неимением лучшего нужно адаптироваться под то, что есть - иначе так и будут такие вопросы всплывать.
    карма: 26
    0
    Ответов: 9906
    Рейтинг: 351
    #22: 2007-07-19 14:07:23 ЛС | профиль | цитата
    Dilma писал(а):
    не вижу ничего более логичного

    Есть люди, которые видят.
    И у меня нет ни малейшего настроения объяснять Кладову его "нелогичность"


    Dilma писал(а):
    За неимением лучшего нужно адаптироваться под то, что есть - иначе так и будут такие вопросы всплывать

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


    Dilma писал(а):
    Убить их все и создать заного

    А не факт, что:
    а) это дороже по кодам
    б) нельзя создать специального метода в KOL, меняющего порядок. Очень маленького и простого.

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

    Либо мы делаем "свой KOL", считая себя умнее Кладова.
    И, как следствие: выход постоянную поддержку последней их версии становится несбыточной мечтой.
    Что мне не улыбается абсолютно. Хотя бы потому, что не считаю себя умнее.
    карма: 9

    0
    Администрация
    Ответов: 15294
    Рейтинг: 1518
    #23: 2007-07-19 14:55:21 ЛС | профиль | цитата
    Galkov писал(а):
    Есть люди, которые видят.

    видимо эта логика держится в строжайшем секрете

    Galkov писал(а):
    б) нельзя создать специального метода в KOL, меняющего порядок. Очень маленького и простого.

    хех

    Ну а мне видится все примерно так:
    создавая некую среду с элементами где-то в чем-то мы обязательно имеем список их всех ввиде одного массива. Как только перед нами становится задача сделать Align, то не долго думая достаточно забацать примерно такую логику:
     top := 0;
    for i := 0 to Controls.Count-1 do
    if Controls[i].Align = caTop then
    begin
    Controls[i].top := top;
    top := top + Controls[i].Height;
    end;
    вот и всего делов-то. А вот чтобы сделать нормальное выравнивание тут извините нужно постоянной сортировкой элементов заниматься по координатам, соответствающим направлению выравнивания.

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

    Galkov писал(а):
    И единственный способ никогда не обсуждать такие вопросы - сделать зеркальные обработчики для Resize, с возможностью запустить из зеркал это же событие как для парента, так и для чайлдов.

    а кто будет заниматься собственно выравниванием?
    карма: 26
    0
    Ответов: 9906
    Рейтинг: 351
    #24: 2007-07-19 15:59:55 ЛС | профиль | цитата
    Dilma писал(а):
    видимо эта логика держится в строжайшем секрете

    Да бог с ней с логикой.
    Из всего этого я могу сделать только один вывод: существуют разные подходы, спорить с любым - бессмысленно. Например:
    Кладов писал(а):
    И не надо мне говорить, что в VCL таких проблем нет. Там другие проблемы есть. Например, неожиданное изменение визуального порядка выровненных визуальных элементов после включения Visible в свойство true. Особенно неприятное, когда свое положение на неправильное меняет, например, сплиттер. Там для борьбы с подобным глюком приходится своим кодом менять значения свойств Left/Top проблемных контролов, и это решение ничуть не менее обходное, чем использование Global_Align в KOL.

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


    Dilma писал(а):
    Ну а мне видится все примерно так

    Это на первый взгляд.
    А не второй, и на третий получается код ~1К в PAS версии, и 600 байт в ASM
    И ни одного слова из песни не выкинешь.
    Мне известен уже смысл каждого слова по этому поводу (в KOL)


    Dilma писал(а):
    а кто будет заниматься собственно выравниванием?

    Мне думается, что это мог бы быть один из методов DLL-к из папки draw
    Если автоматически искать этот метод для предка (WIN) при отсутствии персонального (который для вышеупомянутого сумашедшего) - могло бы получиться компактно и универсально.

    Т.е., мне думается, что не следует пристегивать VCL-ские обработчики, а всякие там WM_SIZE и WM_MOVE передать на обработку в соответствующие методы draw-dll-ек
    И предоставить интерфейс для послать эти WM_SIZE и WM_MOVE (или их аналоги) другим контролам.
    Впрочем, интерфейс среды с dll-кой заслуживает отдельного обсуждения.
    карма: 9

    0
    Администрация
    Ответов: 15294
    Рейтинг: 1518
    #25: 2007-07-19 17:06:27 ЛС | профиль | цитата
    ну так в этом случае можно попробовать и вовсе избавиться от редактора форм и предаставлять только Handle от Parent окна, на которое нужно положить контейнер. tsdima вроде демонстрировал приличную работу инжектированных форм в среде, так почему бы и весь редактор так не сделать...
    карма: 26
    0
    Ответов: 9906
    Рейтинг: 351
    #26: 2007-08-21 13:15:16 ЛС | профиль | цитата
    Ну я-то - хоть к пчелам в улей...

    [size=-2]------ Добавлено в 12:46
    nesco писал(а):
    а ты прозрачность у Label'a убери и посмотри. Все адекватно будет работать.

    А вот разобрался немного...
    Это KOL виноват, а не я, однако

    В нашем KOL такое:
    procedure DoDrawChildrenDblBuffered( DC: HDC; WndParent: HWnd; const RectParent: TRect;
    ....
    var R, CR: TRect;
    Save: Integer;
    P, P0: TPoint;
    begin
    while W <> 0 do
    begin
    if IsWindowVisible( W ) then
    begin
    ....
    DoDrawChildrenDblBuffered( DC, W, CR, GetWindow( W, GW_CHILD ) );
    RestoreDC( DC, Save );
    end;
    W := GetWindow( W, GW_HWNDNEXT );
    end;
    end;
    А в последних KOL-ах уже правильно:
    function WndProcTransparent( Sender: PControl; var Msg: TMsg;
    ....
    case Msg.message of
    WM_ERASEBKGND: Result := TRUE;
    WM_PAINT:
    .....
    Wnd := GetWindow( Sender.fHandle, GW_CHILD );
    Wnd := GetWindow( Wnd, GW_HWNDLAST);
    while Wnd <> 0 do begin
    if IsWindowVisible(Wnd) then begin
    ....
    end;
    Wnd := GetWindow( Wnd, GW_HWNDPREV );
    end;
    ....
    И чего теперь делать - фиг его знает ...

    карма: 9

    0
    Администрация
    Ответов: 15294
    Рейтинг: 1518
    #27: 2007-08-21 13:43:23 ЛС | профиль | цитата
    KOL обновлять вероятно
    карма: 26
    0
    Ответов: 9906
    Рейтинг: 351
    #28: 2007-08-21 14:50:47 ЛС | профиль | цитата
    Встряска еще та будет

    [size=-2]------ Добавлено в 14:50
    Может даже разумно будет выпустить альтернативный пакет с новой парой компиляторов, и постоянной поддержкой последних версий KOL

    Не один день нестыковки будем выскребать....
    Выскребем - первый анулируем.
    карма: 9

    0
    Администрация
    Ответов: 15294
    Рейтинг: 1518
    #29: 2007-08-21 14:56:23 ЛС | профиль | цитата
    можно и так.
    карма: 26
    0
    Разработчик
    Ответов: 26066
    Рейтинг: 2120
    #30: 2007-08-21 15:01:35 ЛС | профиль | цитата
    Galkov, а поддержка FPC, народ возмущаться будет и вопросов немеренно задавать.
    карма: 22

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