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

Вниз

TreeView   Найти похожие ветки 

 
Ann ©   (2003-05-19 11:08) [0]

Добрый день! Подскажите пожалуйста, могу ли я записи помечать разными цветами в TreeView?


 
Skier ©   (2003-05-19 11:15) [1]

OnAdvancedCustomDrawItem


 
Ann ©   (2003-05-19 11:34) [2]

помечает все одним цветом, а нужно как в гриде можно делать разными


 
Skier ©   (2003-05-19 11:38) [3]

>Ann © (19.05.03 11:34)
бррррррр...в каком таком гриде ?
И потом, посмотри ещё OnCustomDrawItem, оно с примером...


 
Ann ©   (2003-05-19 11:58) [4]

Пишу так, а все красным цветом рисует
with DBSTreeView1.Canvas do
begin
if (dm.FDS_gr_kont["delete_pr"]=True) then
begin
Font.Color := clRed;
end
else
if Focused then Font.Color := clWhite;
Font.Color := clBlack;
end;
Почему не могу понять :(


 
Skier ©   (2003-05-19 12:02) [5]

пример по TCustomTreeView.OnCustomDrawItem смотрела ?


 
Ann ©   (2003-05-19 12:07) [6]

нет, я его не нашла :(


 
Ann ©   (2003-05-19 12:08) [7]

извиняюсь, нашла :)
сейчас посмотрю. Спасибо


 
Виктор Щербаков ©   (2003-05-19 12:10) [8]


> Пишу так, а все красным цветом рисует


> Почему не могу понять :(

Очевидно потому, что логическое выражение

> (dm.FDS_gr_kont["delete_pr"]=True)

всегда принимает значение True


 
Ann ©   (2003-05-19 12:14) [9]

нет... там false есть


 
VMcL ©   (2003-05-19 14:13) [10]

>Ann © (19.05.03 11:58)

Сравнивать булево выражение с булевой константой - это новая шутка для Delphi? :))


 
Ann ©   (2003-05-19 14:34) [11]


> VMcL

не пойму что тебя смущает? проверяется значение поля. в чем проблема то?


 
evvcom ©   (2003-05-19 14:39) [12]


> if (dm.FDS_gr_kont["delete_pr"]=True) then

Достаточно написать
if dm.FDS_gr_kont["delete_pr"] then ...


 
Ann ©   (2003-05-19 14:48) [13]

да ладно вам издеваться то :( я же помощь просила


 
Roma ©   (2003-05-19 15:30) [14]

> Ann © (19.05.03 11:08)

Чисто просто пример:

procedure TForm1.TreeViewCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if {нужно красным} then
Sender.Canvas.Font.Color := clRed
else
Sender.Canvas.Font.Color := clBlack;
with Node.DisplayRect(True) do
Sender.Canvas.TextOut(Left, Top, Node.Text);
end;


 
Roma ©   (2003-05-19 15:35) [15]

Да, там бы еще надо проверять cdsSelected in State...


 
evvcom ©   (2003-05-19 15:42) [16]


> Ann © (19.05.03 14:48)
> да ладно вам издеваться то :( я же помощь просила

Я не издевался. До этого был еще вопрос

> Ann © (19.05.03 14:34)
>
> > VMcL
>
> не пойму что тебя смущает? проверяется значение поля. в
> чем проблема то?

Вот на него и было разъяснение. Просто действительно глаз режет код if BoolValue = True then ...


 
_Narayan_   (2003-05-19 21:04) [17]

2 Roma
Ты сам-то свой пример пробовал ?


 
Song ©   (2003-05-19 21:13) [18]

Надо сначала FillRect() сделать, чтобы очистить рабочую область. А потом - хоть чёрта с рогами.


 
Roma ©   (2003-05-20 10:44) [19]

Удалено модератором
Примечание: Если "Ну да забыл" не стоит пальцы гнуть


 
Ann ©   (2003-05-20 13:08) [20]


> Roma

да вопрос-то казалось бы простой. Пишу так же как ты написал, но проблема вот в чем.
Когда переходишь на тот элемент где выполняется условие, помечается и тот на который перешла и тот с которого перешла.
Может подскажешь как с этим бороться?
Заранее благодарна



 
Ann ©   (2003-05-20 14:02) [21]

help!!! :(


 
Roma ©   (2003-05-20 14:33) [22]

Если можно, приведи код своего обработчика OnCustomDrawItem...


 
Ann ©   (2003-05-20 14:37) [23]

procedure TFr_gr_kont.DBSTreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
Вот:


begin
if dm.FDS_gr_kont["delete_pr"] then
if Fr_gr_kont.DBSTreeView1.Selected.Text=dm.FDS_gr_kont["name"] then
Sender.Canvas.Font.Color := clRed
else
if not (cdsSelected in State) then Sender.Canvas.Font.Color := clBlack
else Sender.Canvas.Font.Color := clWhite;

end;


вроде ж все правильно, но почему "раскрашивает парами"..


 
Skier ©   (2003-05-20 14:48) [24]

А если так : ?

begin

if dm.FDS_gr_kont["delete_pr"] then begin
if Fr_gr_kont.DBSTreeView1.Selected.Text=dm.FDS_gr_kont["name"] then
Sender.Canvas.Font.Color := clRed;
end //if
else begin
if cdsSelected in State then Sender.Canvas.Font.Color := clWhite
else Sender.Canvas.Font.Color := clBlack;
end; //else

end;



 
Ann ©   (2003-05-20 14:51) [25]


> Skier

неа... все равно помечает красным и тот с которого перешла (без признака)


 
Skier ©   (2003-05-20 14:53) [26]

begin

if dm.FDS_gr_kont["delete_pr"] then begin
if Fr_gr_kont.DBSTreeView1. Node.Text=dm.FDS_gr_kont["name"] then
Sender.Canvas.Font.Color := clRed;
end //if
else begin
if cdsSelected in State then Sender.Canvas.Font.Color := clWhite
else Sender.Canvas.Font.Color := clBlack;
end; //else

end;


 
Ann ©   (2003-05-20 14:56) [27]

а он на Node ругается.


 
Skier ©   (2003-05-20 14:59) [28]

>а он на Node ругается.
Извини, ошибся.

1)

begin

if dm.FDS_gr_kont["delete_pr"] then begin
if Node.Text=dm.FDS_gr_kont["name"] then
Sender.Canvas.Font.Color := clRed;
end //if
else begin
if cdsSelected in State then Sender.Canvas.Font.Color := clWhite
else Sender.Canvas.Font.Color := clBlack;
end; //else

end;






 
Ann ©   (2003-05-20 15:09) [29]

спасибо! :) а то давно мучалась.. никак не получалось..
вот только получается что помечаются записи красным цветом при подсветке, а как сделать чтобы нужные записи даже не ввыбранном состоянии были помечены?


 
Skier ©   (2003-05-20 15:21) [30]

>Ann © (20.05.03 15:09)

> , а как сделать чтобы нужные записи даже не ввыбранном состоянии
> были помечены?

Что значит "нужные" и что значит "помечены" ?


 
Ann ©   (2003-05-20 15:27) [31]

ну в данный момент в красный цвет окрашивается запись тогда, когда на ней стоит курсор, как только перемещаем курсор на другую запись пометки красным цветом почему-то уже нет.
"нужные" записи, это я так просто обозвала те записи у который delete_pr=true, их я помечаю красным цветом, а остальные черным.
Так вот не получается то, чтобы при активизации формы записи были либо красного цвета (если delete_pr= true) либо черного (delete_pr=false) и не зависили от того, стоит на них курсор или нет.


 
Skier ©   (2003-05-20 15:30) [32]

>Ann © (20.05.03 15:27)
А не "краснеют" записи из-за того что не выполняются
условия
или if dm.FDS_gr_kont["delete_pr"] then, или
if Node.Text=dm.FDS_gr_kont["name"] then


 
Ann ©   (2003-05-20 15:32) [33]

а почему "краснеют" на момент подсветки курсор? почему без нее теряют красноту? :)


 
Skier ©   (2003-05-20 15:34) [34]

>Ann © (20.05.03 15:32)
А условия красноты при при активизации формы выполняются ? Проверяла ?


 
Ann ©   (2003-05-20 15:41) [35]

а процедура CustomDrawItem в момент "прорисовки" элементов дерева разве не срабатывает?
И еще вопрос, почему, при перемещении курсора не сохраняется красный цвет у записи которая была только что активна и имела красный цвет?


 
Ann ©   (2003-05-20 15:48) [36]

:) и спасибо тебе большое за то что помогаешь:)


 
Skier ©   (2003-05-20 15:57) [37]

>Ann © (20.05.03 15:41)
срабатывает...но видимо не выполняются условия красноты (у тебя их 2). Тебе нужно это проверить ! Прогони в отладчике...что будет
в dm.FDS_gr_kont["delete_pr"] и в dm.FDS_gr_kont["name"] ?


 
Ann ©   (2003-05-20 16:03) [38]

прогнала в отладчике.. он гоняет там только первую запись.
Добавила при активизации формы
dm.FDS_gr_kont.first;
while not (dm.FDS_gr_kont.eof) do begin
dm.FDS_gr_kont.next;
end;
после этого стал помечать только одну последнюю запись. А помечена красным цветом должна быть не одна..


 
Ann ©   (2003-05-20 16:10) [39]


> dm.FDS_gr_kont.first;
> while not (dm.FDS_gr_kont.eof) do begin
> dm.FDS_gr_kont.next;
> end;

это не помогло, потому что он сначала прогнал датасет, а уж потом зашел в CustomDrawItem


 
Ann ©   (2003-05-20 16:12) [40]

ура! получилось
написала так
dm.FDS_gr_kont.first;
while not (dm.FDS_gr_kont.eof) do begin
if dm.FDS_gr_kont["delete_pr"] then begin
if Node.Text=dm.FDS_gr_kont["name"] then
Sender.Canvas.Font.Color := clRed;
end //if
else
begin
if cdsSelected in State then Sender.Canvas.Font.Color := clWhite
else Sender.Canvas.Font.Color := clBlack;
end; //else }
dm.FDS_gr_kont.next;
end;

И все работает!!
Спасибо тебе ОГРОМНОЕ, за то что помогал мне :)



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

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

Наверх




Память: 0.56 MB
Время: 0.023 c
6-3032
A.R.T.K.O.
2003-04-01 08:28
2003.06.02
Нужно сканировать доступность расшаренного ресурса в ЛВС. Как?


1-2897
dtm
2003-05-22 17:41
2003.06.02
Показать при перетаскивании значения в Hint на курсоре


1-2921
Андрей
2003-05-23 09:11
2003.06.02
Как избежать такой ошибки? Abstract Error


3-2788
me2
2003-05-14 14:02
2003.06.02
Использование сетевого ресурса в строке подключения БД


8-3016
Garry_Dorado
2003-02-17 10:24
2003.06.02
Работа с растровыми изображениями...