Pintura customizada o TreeView

05/04/2003

0

Olá pessoal,
estou tendo um problema com a customizacao da pintura de um
treeview. É o seguinte, na propriedade ´Data´ do nó, posso ter uma
instancia de TResourceItem ou TTempConditionInfo, se for uma
instancia de TTempConditionInfo, a pintura do nó deve ser customizada.
Parte do texto dessa pintura vai ser verde em negrito e a outra parte
vai usar a cor padrao do sistema. Porem a segunda parte nao esta saindo
com uma cor diferente, ele usa a propriedade da primeira pintura, mesmo
eu mudando as propriedade ´Font.*´, alem disso a pintura do texto
nao fica transparente (mesmo colocando Brush.Style para bsClear), o
que me impede de pintar o item como
selecionado. Bom nao sei mais o que fazer, ja rodei passo a passo e o
fluxo segue como o esperado, abaixo coloquei o codigo para vcs olharem.

Obrigado deste ja.

procedure TfrmCondTree.TrvwCondsCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Obj: TObject;
NodeRect: TRect;
CondNd: TTempConditionInfo;
S: string;
Wid: Integer;
begin
Obj:=TObject(Node.Data);
DefaultDraw:=(Obj is TResourceItem);
if (DefaultDraw) then
Exit;
CondNd:=TTempConditionInfo(Obj);
NodeRect:=Node.DisplayRect(True);
with TrvwConds.Canvas do
begin
case CondNd.CurKind of
ckIf: S:=´#if´;
ckIfdef: S:=´ifdef´;
ckIfndef: S:=´ifndef´;
end;

//subtrai o tamanho da imagem
Dec(NodeRect.Left,16);
Dec(NodeRect.Right,16);

//limpa o retangulo e escreve o if*
Brush.Color := clWindow;
FillRect(NodeRect);
Font.Style:=[fsBold];
Font.Color:=clGreen;
TextOut(NodeRect.Left + 2, NodeRect.Top + 1, S);

//ajusta a posicao para a escrita da condicao
Wid:=TextWidth(S);
NodeRect.Left:=NodeRect.Left + Wid + 4;
NodeRect.Right:=NodeRect.Right + Wid + 8;

Brush.Style:=bsSolid;
if (cdsSelected in State) then
begin
Brush.Color := clHighlight;
FillRect(NodeRect);
DrawFocusRect(NodeRect);
Font.Color := clWindow;
end
else
begin
Brush.Color := clWindow;
FillRect(NodeRect);
Font.Color := clWindowText;
end;
//TODO: a cor do texto nao é mudada
Brush.Style:=bsClear;
TextOut(NodeRect.Left + 2, NodeRect.Top + 1, CondNd.CurCondition);
end;
end;


Anonymous

Anonymous

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar