Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1302199698
Xalexo
2011-04-07 22:08
2011.07.24
Копирование файла по маске


15-1302120074
Игорь Шевченко
2011-04-07 00:01
2011.07.24
McSimm, с днем рождения!


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


8-1214048535
Al
2008-06-21 15:42
2011.07.24
Как сделать в функции динамическую переменную?


2-1302880220
loki3d
2011-04-15 19:10
2011.07.24
передача большого файла через Socket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский