![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Горизонтальная прокрутка в TTreeView
harisma © (2011-04-19 17:22:00)При помощи какого метода или свойства можно управлять горизонтальной прокруткой в TTreeView?
Проблема в том, что когда добавляется в дерево запись с названием большим, чем видимая часть дерева по ширине, то происходит горизонтальный скрол и дерево "уезжает" за левую границу.
Как запретить такое поведение?
harisma (2011-04-20 13:08:00) [1]Согласен, что Виртуал - лучше. Но мне надо стандартный.
Вариант с SetScrollRange мне подходит (если мин и мах поставить в 0) :)
KilkennyCat (2011-04-20 13:02:00) [2]но все равно, виртуал лучше :)
KilkennyCat (2011-04-20 13:02:00) [3]ага... ну да. в данном случае все просто. я просто особо не вникал :)
нужно осознать всего две вещи:
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
и элементарная логика не будет подсказывать отрицательные значения.
кстати, они все-таки могут быть отрицательными, если захотеть.
sniknik (2011-04-20 12:56:00) [4]я имею в виду, что ЗДЕСЬ ситуация явно не от нехватки чего то (функционала) в стандартных компонентах, а не умение работать с ними (да и вообще, не думаю что смена компонента ТУТ что нибудь изменила бы)
KilkennyCat (2011-04-20 12:49:00) [5]
> sniknik © (20.04.11 12:45) [14]
да нифига, виртуал тривью не настолько телепат... шаг в сторону - расстрел.
а вот про яичницу не понял... ты имеешь ввиду, что я слишком много захотел от стандартного?
sniknik (2011-04-20 12:45:00) [6]> новость для меня.
а я понял, это наверно то самое, что очень просто, и решаемо в "виртуал тривью". который видимо позволяет делать с ним что угодно и как угодно, задавать любые значения пусть и неправильные, но поймет он, видимо телепатически, только так как нужно...
> ну сделай многострочность в стандартном тривью.
ну, как бы, не путай "божий дар" с яичницей.
sniknik (2011-04-20 12:24:00) [7]> указывать отрицательные значения
у скролинга есть отрицательные позиции? новость для меня.
harisma (2011-04-20 12:11:00) [8]> а вправо, а не влево как тебе нужно потому что я так написал.
> и изменить это можно настолько элементарно, что даже говорить не о чем...
А вот и не элементарно. Элементарная логика подсказывает указывать отрицательные значения, однако такой вариант к сожалению результата не дает :( А другие варианты что-то не приходят в голову :(
KilkennyCat (2011-04-20 11:55:00) [9]
> sniknik © (20.04.11 02:06) [7]
> "такие" проблемы не решаются... ибо они в головах, а не
> компонентах. и соответственно от компонент не зависят, какие
> не выбери.
ну не всегда. ну сделай многострочность в стандартном тривью. если мне не изменяет память, высота итема там одна для всех. сколько займет времени и усилий сделать это "решаемо"?
виртуал тривью позволяет практически все и без усилий. так зачем их тратить? решать кучу времени с каким-то скроллингом, когда это время можно потратить на основную программу.
sniknik (2011-04-20 11:50:00) [10]> Ты не прав.
я прав, т.к.
> Не работает оно.
если бы не работало, то откуда ты узнал -
> Причем в твоем примере скролится вправо, а мне надо влево
что вправо ?
а вправо, а не влево как тебе нужно потому что я так написал.
и изменить это можно настолько элементарно, что даже говорить не, о чем если не понимаешь. это как "- научите умножать. нy например 2 * 3 будет шесть, т.е. 3 раза по 2. - не, мне не надо 2 * 3, мне надо 3 * 2..." это не научите, это сделайте точно то что мне надо, чтобы скропипастить.
brother (2011-04-20 11:23:00) [11]> Жаль, тут нельзя картинку прикрепить :( А то б я скрин прицепил.
а в инете можно, мне друзья рассказывали! ;)
harisma (2011-04-20 11:04:00) [12]2 sniknik © (20.04.11 02:06) [7]
Ты не прав. Не работает оно. Причем в твоем примере скролится вправо, а мне надо влево
Жаль, тут нельзя картинку прикрепить :( А то б я скрин прицепил.
А также программку саму, чтоб попробовали и убедились.
sniknik (2011-04-20 02:06:00) [13]> но решение различных таких вот проблем там в разы легче, проще, и главное - решаемо.
"такие" проблемы не решаются... ибо они в головах, а не компонентах. и соответственно от компонент не зависят, какие не выбери.
решил проверить, работает... и не один раз а как минимум 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;
проверь тоже.
у кого еще не работает?
KilkennyCat (2011-04-20 01:33:00) [14]я в результате всей этой фигни со стандартным тривью ушел на виртуал тривью.
чего и рекомендую, хоть и не знаю, подходит ли эта рекомендация... но решение различных таких вот проблем там в разы легче, проще, и главное - решаемо.
harisma (2011-04-19 19:41:00) [15]Увы, нет. :(
clickmaker (2011-04-19 19:12:00) [16]из-за TreeView1.SetFocus возможно
harisma (2011-04-19 18:56:00) [17]> 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 18:49:00) [18]TreeView1.TopItem := Selected;
SetScrollPos(TreeView1.Handle, SB_HORZ, 0, true)?
harisma (2011-04-19 17:37:00) [19]У нас в коде есть такая конструкция:
TreeView1.TopItem := Selected;
Если ее забрать, то проблема горизонтального скроллинга пропадает, но дело в том, что эта конструкция нам нужна и убирать ее нельзя. Так что жду помощи...