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

Вниз

Мигание элемента в TTreeView   Найти похожие ветки 

 
WondeRu ©   (2004-01-19 15:41) [0]

Здравствуйте! Подскажите, пожалуйста, как изменять цвет шрифта конкретного дерева по таймеру (4 раза в сек.)? При стандартной реализации картинка мигает!
Вот мой код:

var
flash: Boolean;

procedure TfmMain.TreeView1AdvancedCustomDrawItem(
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
begin
if Flash and (Stage = cdPrePaint) and Assigned(node.Data) and (TObject(node.Data) is TBasicGraphic)
then
TreeView1.Canvas.Font.Color := clRed;
end;

а в таймере:
flash := not flash;


 
Amoeba ©   (2004-01-19 15:44) [1]

А если DoubleBuffered
+ F1


 
Семен Сорокин ©   (2004-01-19 15:45) [2]

а что ты хочешь чтобы 4 раза в секунду и не мигала? :)
я непойму зачем это?


 
WondeRu ©   (2004-01-19 16:19) [3]

>Amoeba © (19.01.04 15:44) [1]
все равно он будет жрать проц как сволочь!))

>Семен Сорокин © (19.01.04 15:45) [2]

Необходимо отображать состояния устройств в реальном времени


 
NAlexey ©   (2004-01-19 16:23) [4]

>Необходимо отображать состояния устройств в реальном времени
А причем здесь цвет всего компонента? Изменяй значения узлов, перед этим делая BeginUpdate а после EndUpdate. Никакого мигания.


 
WondeRu ©   (2004-01-19 16:31) [5]

>NAlexey © (19.01.04 16:23) [4]
>Изменяй значения узлов, перед этим делая BeginUpdate а после >EndUpdate. Никакого мигания.
А можно примерчик? У меня с фантазией туговато)))


 
NAlexey ©   (2004-01-19 16:41) [6]

Хм... Ну вопервых попробуй на события таймера:

TreeView1.Items.BeginUpdate;
try
Flash := not Flash;
TreeView1.Refresh;
finally
TreeView1.Items.EndUpdate;
end;

Будет ли мерцание?


 
Семен Сорокин ©   (2004-01-19 16:56) [7]

а может InvalidateRect поможет?


 
WondeRu ©   (2004-01-19 17:07) [8]

попробовал

>TreeView1.Items.BeginUpdate;
> try
> Flash := not Flash;
> TreeView1.Refresh;
> finally
> TreeView1.Items.EndUpdate;
> end;

не помогает

Twincontrol(TreeView1).DoubleBuffered := True;
+
InvalidateRect(TreeView1.Handle,nil,false);
не мигает, зато проц жрет в двое больше((


 
AKul ©   (2004-01-19 17:09) [9]

InvalidateRect тут не при чем!
Если мне не изменяет память, то InvalidateRect "говорит" Windows"у, что переданный ей в параметрах "кусок" окна содержит неправильную информацию и его следует перерисовать (OnPaint)
А вот DoubleBuffered := True это другое дело!


 
WondeRu ©   (2004-01-20 09:37) [10]

Добрый день!
Хотелось бы перерисовывать только название узла, а не всю канву!


 
Erik ©   (2004-01-20 10:17) [11]

Наверное надо логику поменять. Заведи переменую где будеш определять было ли изменения в устройствах. Если было то
Flash := not Flash;
TreeView1.Refresh;
А если небыло, то ничего делать ненужно.


 
WondeRu ©   (2004-01-20 10:55) [12]

>Наверное надо логику поменять
Сейчас я так и делаю. Проблема в том, чтобы моргать постоянно, если произоло определенное событие!


 
WondeRu ©   (2004-01-20 12:53) [13]

Откланиваюсь!)) Хоть проблема и не решена, зато пообщался с хорошими людьми!
Всем СПАСИБО!



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
4-2410
Doomin
2003-11-25 15:55
2004.02.02
Запус процесса от имени другого пользователя


1-2114
Shtukos
2004-01-19 08:02
2004.02.02
Надо узнатьразделитель разрядов


1-2125
Ascan
2004-01-19 14:06
2004.02.02
Кто такой NMFast40 ?


1-2107
Hose
2004-01-19 15:00
2004.02.02
Торможу. Запросить интерфейс через TSocketConnection


1-2217
kiril-
2004-01-20 16:56
2004.02.02
OleVariant