Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.24;
Скачать: CL | DM;

Вниз

Горизонтальная прокрутка в 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.005 c
2-1303016731
Kirill
2011-04-17 09:05
2011.07.24
Подключить внешний файл как строковое значение переменной


15-1302032335
IPranker
2011-04-05 23:38
2011.07.24
Чем отличаются Дельфийские дженерики от C++ шаблонов?


2-1302930981
mefodiy
2011-04-16 09:16
2011.07.24
Как отключить F12 в Delphi 2010


2-1302772191
Учусь
2011-04-14 13:09
2011.07.24
Inno Setup и папки юзера


4-1249279630
DevilDevil
2009-08-03 10:07
2011.07.24
Выделен текст в ComboBox