![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TTreeView принудительное обновление TTreeNode. [D6]
AlexanderSK © (2004-10-13 18:11:00)Подскажите, пожалуйста, как в TTreeView принудительно заставить перерисоваться один конкретный TTreeNode?
Проблема в том, что при определенном событии я меняю TTreeNode иконку, при этом эти изменения не всегда сразу становятся видны!
Подскажите, пожалуйста, как с этим бороться!
Заранее благодарен!!!
NAlexey (2004-10-14 15:08:00) [1]Всеравно не понятно о чем разговор, на пустом месте. Упрощенно так: TreeView у него Images. В котором 2 bmp - Checked и UnChecked.
procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
Node.SelectedIndex := Node.ImageIndex;
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
aImages: array[boolean] of Byte = (0, 1); //bmpUnchecked, bmpChecked
var
HitTest : THitTests;
Node: TTreeNode;
NodeRect: TRect;
begin
with Sender as TCustomTreeView do
begin
HitTest := GetHitTestInfoAt(X, Y);
if htOnIcon in HitTest then
begin
Node := GetNodeAt(X, Y);
if Node <> nil then
begin
Node.ImageIndex := aImages[Node.ImageIndex = 0];
NodeRect := Node.DisplayRect(False);
InvalidateRect(Handle, @NodeRect, False);
end;
end;
end;
end;
[lamer]Barmaglot (2004-10-14 13:45:00) [2]то Pentium133 © (14.10.04 13:31) [9]
Компьютер обрабатывает все данные которые содержатся в ТрееВиев при каждой перерисовке, но выводит только те которые видны... Совет не мой а микрософта, надеюсь ему ты веришь? В ВинАПИ есть специальные ф-ции позволяющие выводить только определенное количество ВИДИМЫХ нод, а остальное загружать по требованию...
Pentium133 (2004-10-14 13:31:00) [3]
> [lamer]Barmaglot © (14.10.04 13:30) [7]
Бред какойто....
Ясный пень, те которые не видны они и не выводятся...
[lamer]Barmaglot (2004-10-14 13:30:00) [4]Уменьшить количество нод... Тогда противно мигать не будет. Выводить в треевиев только ноды которые видны в данный момент...
Pentium133 (2004-10-14 13:30:00) [5]может TreeView.DoubleBuffered := true;
KSergey (2004-10-14 11:32:00) [6]> [5] NAlexey © (14.10.04 11:25)
> >KSergey © (14.10.04 11:21) [3]
> Почему это нельзя? А Items.BeginUpdate, Items.EndUpdate?
Это не то. Это чтобы не перерисовывал при обновлении. Но на Invalidate он все равно моргать будет.
Другое дело, что может после Items.EndUpdate перерисовка пройдет "красивее"? (в смысле может и Invalidate не понадобится в явном виде). Но маловероятно.
NAlexey (2004-10-14 11:25:00) [7]>KSergey © (14.10.04 11:21) [3]
Почему это нельзя? А Items.BeginUpdate, Items.EndUpdate?
AlexanderSK (2004-10-14 11:23:00) [8]ясно!
а можно сделать так чтобы напротив некоторых листьев были чекбоксы?
KSergey (2004-10-14 11:21:00) [9]> [2] AlexanderSK (14.10.04 11:05)
> Можно ли этого избежать?
Нет
AlexanderSK (2004-10-14 11:05:00) [10]>при изминении иконки вызови Invalidate;
У TTreeNode Invalidate нет.
а ежли вызывать Invalidate у TTreeView он противно мигает...
Можно ли этого избежать?
Pentium133 (2004-10-13 18:15:00) [11]при изминении иконки вызови Invalidate;