Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизМигание элемента в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c