Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
ВнизГоризонтальная прокрутка в TTreeView Найти похожие ветки
← →
harisma © (2011-04-19 17:22) [0]При помощи какого метода или свойства можно управлять горизонтальной прокруткой в TTreeView?
Проблема в том, что когда добавляется в дерево запись с названием большим, чем видимая часть дерева по ширине, то происходит горизонтальный скрол и дерево "уезжает" за левую границу.
Как запретить такое поведение?
← →
harisma © (2011-04-19 17:37) [1]У нас в коде есть такая конструкция:
TreeView1.TopItem := Selected;
Если ее забрать, то проблема горизонтального скроллинга пропадает, но дело в том, что эта конструкция нам нужна и убирать ее нельзя. Так что жду помощи...
← →
clickmaker © (2011-04-19 18:49) [2]TreeView1.TopItem := Selected;
SetScrollPos(TreeView1.Handle, SB_HORZ, 0, true)?
← →
harisma © (2011-04-19 18:56) [3]> SetScrollPos(TreeView1.Handle, SB_HORZ, 0, true)
Ну, что то похожее получается, правда почему то только один раз. :(
Я набросал тестовый проектик. Пустая форма. На ней компонента TTreeView с несколькими предустановлеными items, скажем с числами от 1 до 6.
Также на форме кнопка. В обработчике OnClick этой кнопки имеем следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
LNode: TTreeNode;
begin
LNode := TreeView1.Items.Add(nil, "dfsdfsdfsd sfgdfrger frrerr ererter cgdfgdegrer fdddghger");
TreeView1.Selected := LNode;
TreeView1.TopItem := TreeView1.Selected;
SetScrollPos(TreeView1.Handle, SB_HORZ, 0, True);
TreeView1.SetFocus;
end;
← →
clickmaker © (2011-04-19 19:12) [4]из-за TreeView1.SetFocus возможно
← →
harisma © (2011-04-19 19:41) [5]Увы, нет. :(
← →
KilkennyCat © (2011-04-20 01:33) [6]я в результате всей этой фигни со стандартным тривью ушел на виртуал тривью.
чего и рекомендую, хоть и не знаю, подходит ли эта рекомендация... но решение различных таких вот проблем там в разы легче, проще, и главное - решаемо.
← →
sniknik © (2011-04-20 02:06) [7]> но решение различных таких вот проблем там в разы легче, проще, и главное - решаемо.
"такие" проблемы не решаются... ибо они в головах, а не компонентах. и соответственно от компонент не зависят, какие не выбери.
решил проверить, работает... и не один раз а как минимум 200...procedure TForm1.Button1Click(Sender: TObject);
var
LNode: TTreeNode;
i: integer;
begin
LNode := TreeView1.Items.Add(nil, "dfsdfsdfsd sfgdfrger frrerr ererter cgdfgdegrer fdddghger");
TreeView1.Selected:= LNode;
TreeView1.TopItem := TreeView1.Selected;
TreeView1.SetFocus;
for i:= 0 to 199 do begin
SetScrollPos(TreeView1.Handle, SB_HORZ, i, True);
Application.ProcessMessages;
Sleep(10);
end;
end;
проверь тоже.
у кого еще не работает?
← →
harisma © (2011-04-20 11:04) [8]2 sniknik © (20.04.11 02:06) [7]
Ты не прав. Не работает оно. Причем в твоем примере скролится вправо, а мне надо влево
Жаль, тут нельзя картинку прикрепить :( А то б я скрин прицепил.
А также программку саму, чтоб попробовали и убедились.
← →
brother © (2011-04-20 11:23) [9]> Жаль, тут нельзя картинку прикрепить :( А то б я скрин прицепил.
а в инете можно, мне друзья рассказывали! ;)
← →
sniknik © (2011-04-20 11:50) [10]> Ты не прав.
я прав, т.к.
> Не работает оно.
если бы не работало, то откуда ты узнал -
> Причем в твоем примере скролится вправо, а мне надо влево
что вправо ?
а вправо, а не влево как тебе нужно потому что я так написал.
и изменить это можно настолько элементарно, что даже говорить не, о чем если не понимаешь. это как "- научите умножать. нy например 2 * 3 будет шесть, т.е. 3 раза по 2. - не, мне не надо 2 * 3, мне надо 3 * 2..." это не научите, это сделайте точно то что мне надо, чтобы скропипастить.
← →
KilkennyCat © (2011-04-20 11:55) [11]
> sniknik © (20.04.11 02:06) [7]
> "такие" проблемы не решаются... ибо они в головах, а не
> компонентах. и соответственно от компонент не зависят, какие
> не выбери.
ну не всегда. ну сделай многострочность в стандартном тривью. если мне не изменяет память, высота итема там одна для всех. сколько займет времени и усилий сделать это "решаемо"?
виртуал тривью позволяет практически все и без усилий. так зачем их тратить? решать кучу времени с каким-то скроллингом, когда это время можно потратить на основную программу.
← →
harisma © (2011-04-20 12:11) [12]> а вправо, а не влево как тебе нужно потому что я так написал.
> и изменить это можно настолько элементарно, что даже говорить не о чем...
А вот и не элементарно. Элементарная логика подсказывает указывать отрицательные значения, однако такой вариант к сожалению результата не дает :( А другие варианты что-то не приходят в голову :(
← →
sniknik © (2011-04-20 12:24) [13]> указывать отрицательные значения
у скролинга есть отрицательные позиции? новость для меня.
← →
sniknik © (2011-04-20 12:45) [14]> новость для меня.
а я понял, это наверно то самое, что очень просто, и решаемо в "виртуал тривью". который видимо позволяет делать с ним что угодно и как угодно, задавать любые значения пусть и неправильные, но поймет он, видимо телепатически, только так как нужно...
> ну сделай многострочность в стандартном тривью.
ну, как бы, не путай "божий дар" с яичницей.
← →
KilkennyCat © (2011-04-20 12:49) [15]
> sniknik © (20.04.11 12:45) [14]
да нифига, виртуал тривью не настолько телепат... шаг в сторону - расстрел.
а вот про яичницу не понял... ты имеешь ввиду, что я слишком много захотел от стандартного?
← →
sniknik © (2011-04-20 12:56) [16]я имею в виду, что ЗДЕСЬ ситуация явно не от нехватки чего то (функционала) в стандартных компонентах, а не умение работать с ними (да и вообще, не думаю что смена компонента ТУТ что нибудь изменила бы)
← →
KilkennyCat © (2011-04-20 13:02) [17]ага... ну да. в данном случае все просто. я просто особо не вникал :)
нужно осознать всего две вещи:
http://msdn.microsoft.com/en-us/library/bb787599%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/bb787597%28v=vs.85%29.aspx
и элементарная логика не будет подсказывать отрицательные значения.
кстати, они все-таки могут быть отрицательными, если захотеть.
← →
KilkennyCat © (2011-04-20 13:02) [18]но все равно, виртуал лучше :)
← →
harisma © (2011-04-20 13:08) [19]Согласен, что Виртуал - лучше. Но мне надо стандартный.
Вариант с SetScrollRange мне подходит (если мин и мах поставить в 0) :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c