Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
ВнизПроблеммы с двумя TSpliter Найти похожие ветки
← →
atruhin © (2006-10-05 17:08) [0]Как использовать на форме 2 TSpliter расположенных в одном направлении?
Если расположить просто, то происходят глюки при перемещении первого за второй.
Пробовал разделить компонент|панель, а на панели еще компоненты 2|3. Работает лучше, но сплитер находящийся на панели исчезает с экрана, если ограничить верхний компонент (Constraints), то происходят станные глюки с размером формы.
← →
palva © (2006-10-05 17:45) [1]Нужно расположить панель, выровнять влево, расположить сплиттер, выровнять влево, расположить панель, выровнять влево расположить сплиттер, выровнять влево, расположить панель выровнять по клиенту. Следить, чтобы сплиттер попал на форму а не внутрь панели.
← →
atruhin © (2006-10-05 18:25) [2]Это я в хелпе могу прочитать, а ты попробуй, сделай по рецепту, потом надвинь правый сплитер на левый, и раздвинь. Центральная панель скроется навсегда.
← →
palva © (2006-10-05 23:10) [3]Открыть групповое свойство Constraints центральной панели и выставить ненулевой MinWidth
← →
atruhin © (2006-10-06 07:54) [4]Все спасибо помогло: у левой и центральной панели выставить Constraints.MinWidth, у правой оставить = 0. Только в таком варианте работает, во всех остальных глюки.
← →
atruhin © (2006-10-06 21:28) [5]Все таки возникло продолжение.
С вертикальными панелями и сплитерами все работает, с горизонтальными нормальной работы добиться не удалось, установка Constraints.MinHeight, не помогает.
← →
Korneley © (2006-10-07 12:35) [6]На форму:
панель1 - влево, сплиттер - влево, панель2 - клиент.
На панель2:
панель3 - влево, сплиттер - влево, панель4 - клиент.
Ну и с Constraints можно поварьировать, хотя и без этоо работает.
Наверно :)
← →
Korneley © (2006-10-07 12:45) [7]Еще мнение (ИМХО естественно):
Не надо создавать на контейнере больше двух элементов. Один - вправо, влево, вверх, вниз, второй - клиент. А вот на этом клиенте опять два элемента... и т.д.
← →
atruhin © (2006-10-07 14:56) [8]> Еще мнение (ИМХО естественно):
Это понятно и внимательно прочитай вопрос, там именно такой вариант описан. Просто прежде чем советовать попробуй.
Во вторых:
> С вертикальными панелями и сплитерами все работает, с горизонтальными
> нормальной работы добиться не удалось
← →
Virgo_Style © (2006-10-07 15:51) [9]atruhin © (07.10.06 14:56) [8]
Как делал? У меня MinHeight действует как надо.
← →
atruhin © (2006-10-07 16:06) [10]Кинул панель Aligh=alBottom, cплитер Aligh=alBottom,
панель Aligh=alBottom, cплитер Aligh=alBottom,
панель Aligh=alClient.
Далее для первой и второй панели (у которых Aligh=alBottom) устанавливаю MinHeight=40.
Запукаем верхний сплитер надвигем на нижний, получаем глюк.
PS. Если все сделать аналогично на с вертикальными элементами, все работает нормально, как видимо глюк Delphi 7.
← →
Korneley © (2006-10-12 20:06) [11]Заранее приношу извинения за многословность, но если задание не состоит в том чтобы устранить глюк исключительно установками свойств компонент в дизайн-тайме, то можно конролировать сплиттеры на событии OnCanResize, чтобы они не "ездили" больше положенного.
Например вариант:
Panel1 - alBottom
Splitter1 - alBottom
Panel2 - alClient
На Panel2:
Panel3 - alBottom
Splitter2 - alBottom
Panel4 - alClient
!!!Все панели кроме Panel2 имеют ненулевой MinHeight!!!
//Для Splitter1
procedure TForm1.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
// считаем высоты всех компонент, которые сдвигает сплиттер
Accept := ((Panel4.Constraints.MinHeight + 1 +
// без +1 форма все-таки чуть-чуть "едет" (?)
Splitter2.Height +
Panel3.Height +
Splitter1.Height +
NewSize) // предпологаемая высота Panel1
<
Form1.ClientHeight) // область расположения
end;
// Аналогично для Splitter2
procedure TForm1.Splitter2CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
Accept := ((Panel4.Constraints.MinHeight + 1 +
Splitter2.Height +
NewSize)
<
Panel2.ClientHeight)
end;
Для пущего "плезиру" можно сделать равными Panel1.Constraints.MinHeight и Splitter1.MinSize, а также Panel3.Constraints.MinHeight и Splitter2.MinSize. Это на работу вроде не влияет, но зато сплиттер останавливается там, где он будет после отпускания мыши. Думаю, что и без Panel2 работать будет, хотя не пробовал.
Глюк по-моему происходит из-за того, что сплиттер меняет размер одной только нижней (т.к. alBottom) панели, не обращая внимание на MinHeight верхней и на высоту всех, кто между ними. После отпускания мыши, высота верхней все равно становится MinHeight, у других остается прежней, у нижней - новой. Бац! И форма "плывет". Уверенно глючит даже с одним сплиттером и двумя панелями. Ну а больше панелей - ...
Зы: я по-наивности думал, что вертикальный элемент, это _раздвигающий_ вертикально ;)
← →
Korneley © (2006-10-12 20:13) [12]Да, если у Panel2.BorderWidth > 0 то его тоже учитывать надо, короче считаем все, что двигаем
← →
Korneley © (2006-10-13 07:41) [13]> // без +1 форма все-таки чуть-чуть "едет" (?)
>
Для Splitter1
Accept := ((Panel4.Constraints.MinHeight +
Splitter2.Height +
Panel3.Height +
Splitter1.Height +
Panel2.BorderWidth * 2 +
integer(Panel2.BevelInner <> bvNone) * 2 * Panel2.BevelWidth +
integer(Panel2.BevelOuter <> bvNone) * 2 * Panel2.BevelWidth +
(Panel2.Height - Panel2.ClientHeight) +
NewSize)
<
Form1.ClientHeight);
для Splitter2
Accept := ((Panel4.Constraints.MinHeight +
Splitter2.Height +
Panel2.BorderWidth * 2 +
integer(Panel2.BevelInner <> bvNone) * 2 * Panel2.BevelWidth +
integer(Panel2.BevelOuter <> bvNone) * 2 * Panel2.BevelWidth +
NewSize)
<
Panel2.ClientHeight);
Вроде все учел
← →
atruhin © (2006-10-13 08:21) [14]Большое спасибо!!!
Кстати не разбирался, почему с вертикальными сплитерами все работает, а с горизонтальными глюки? Ошибки VCL?
← →
Korneley © (2006-10-13 14:38) [15]Дык, там тоже глючит. Только иначе. Вот тот же вариант, только с alLeft при установке у 4-й панели MinWidth приводит к именениям размера формы, но вправо. Без установки - сплиттеры уезжают за клиентскую часть, при сдвижке всего вправо - сплиттеры слипаются и разлепить их весьма проблематично. Правда сами сплиттеры отображаются исправно. Азия-с...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.511 c