Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Вниз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;
И все работает!!
Спасибо тебе ОГРОМНОЕ, за то что помогал мне :)
← →
Skier (2003-05-20 16:15) [41]>Ann © (20.05.03 16:12)
Ну ? видишь ? Не выполнялись условия твоей красноты по сему и
не работала...:))
← →
Roma (2003-05-20 16:16) [42]Как-то все уже запуталось... Давайте подойдем к вопросу академически... ;)
Есть условие, назовем его RedCondition, при выполнении которого текст ноды должен выводится красным шрифтом. Обработчик вызывается всегда, когда надо (и при активизации, и при экспанде, и при селекте, и т.д.).
Тогда:
var
RedCondition: Boolean;
begin
RedCondition := {подставить, что надо; одно или несколько булевых выражений, или отдельная функция... не используя Selected!};
if RedCondition then
Sender.Canvas.Font.Color := clRed // выводить красным независимо от выделения
else
if cdsSelected in State then // нода выделена?
Sender.Canvas.Font.Color := clWhite // выводить белым
else
Sender.Canvas.Font.Color := clBlack; // выводить черным
with Node.DisplayRect(True) do
Sender.Canvas.TextOut(Left, Top, Node.Text);
end;
Это должно работать, залягай меня слон... ;)
PS: Пока писал, увидел, что уже все работает... Тогда есть правило: работает - не трогай... ;) Похоже, все было именно в функции вычисления условия "красноты"...
← →
Ann (2003-05-20 16:21) [43]
> Roma
PS у тебя замечательный - работает не трогай :)
нет, правда спасибо большое.. я бы сама еще столько долбилась бы с этой краснотой,тем более когда делаешь что-то долго и упорно, голова варит хуже и делаешь ошибки всякие глупые. :)
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.01 c