![]() |
Canvas.Textout Farbe ändern Problem
Hi,
ich hab gerade ein Problem. Ich will mit Textout Farbigen Text in einem TListView ausgeben.
Code:
Mein Problem ist, das der Text immer in schwarz ausgegeben wird. Wenn ich das Font.Color Property vor dem ersten Textout setze, wird die richtige Farbe gesetzt. Allerdings dann für den gesamten nachfolgenden Text.
Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemCaption);
if ItemType = 'Passiv' then Canvas.Font.Color := clBlue else Canvas.Font.Color := clRed; aTextRect.Top := aTextRect.Top + 14; Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemType); Wieso wird Font.Color nach dem ersten Aufruf von TextOut nicht berücksichtigt? |
Re: Canvas.Textout Farbe ändern Problem
Das schaut schon richtig aus, bist du sicher das nix anderes drüberschreibt ?
Was versuchst du denn zu tun? |
Re: Canvas.Textout Farbe ändern Problem
Warum nimmste nicht ein unstichtbares Label oder schreibst den Text dirket in die Listiview?
|
Re: Canvas.Textout Farbe ändern Problem
Also ich möchte in meiner ListView Text in zwei Zeilen schreiben. Wobei die zweite Zeile eine andere Farbe haben soll.
Delphi-Quellcode:
Das soll Zwei Zeilen Text schreiben, was es auch tut. Die Zeilenhöhe wird automatisch angepasst durch die ImageList.
procedure TMainFrm.SkillBoxCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aIconRect, aTextRect:TRect; ItemCaption: string; ItemType: string; begin DefaultDraw := False; ItemCaption := Copy(Item.Caption, 0, Pos('|||', Item.Caption)-1); ItemType := Copy(Item.Caption, Pos('|||', Item.Caption)+3, Length(Item.Caption)); aIconRect:=Item.DisplayRect(drBounds); aTextRect:=Item.DisplayRect(drLabel); if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin Sender.Canvas.Pen.Color := $008FC2B3; Sender.Canvas.Brush.Color := $00CDEFE9; Sender.Canvas.Rectangle(aTextRect); end; with Sender do begin aTextRect.Left := aTextRect.Left + 2; aTextRect.Top := aTextRect.Top + 2; Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemCaption); if ItemType = 'Passiv' then Canvas.Font.Color := clBlue else Canvas.Font.Color := clRed; aTextRect.Top := aTextRect.Top + 14; Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemType); TListView(Sender).SmallImages.Draw(Canvas,aIconRect.Left+2, aIconRect.Top,Item.ImageIndex); end; end; Wie gesagt, er schreibt beide Zeilen, aber die Farbe wird nicht übernommen, nachdem ich bereits einmal TextOut aufgerufen habe. |
Re: Canvas.Textout Farbe ändern Problem
Ich hab jetzt noch einige Tests gemacht, aber ich kam immer noch nicht zum gewünschten Effekt. Sobald einmal TextOut aufgerufen wurde kann ich die Schriftfarbe nicht mehr ändern.
Das ist jetzt mein Code:
Delphi-Quellcode:
Allerdings werden beide Grün dargestellt.
procedure TMainFrm.SkillBoxCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aIconRect, aTextRect:TRect; ItemCaption: string; ItemType: string; begin DefaultDraw := false; Sender.Canvas.Font.Color := clGreen; Sender.Canvas.TextOut(50,50,'Bla'); Sender.Canvas.Font.Color := clBlack; Sender.Canvas.TextOut(50,70,'Bla'); end; EDIT: Hab gerade rausgefunden, das es so bei OnCustomDrawItem ist, pack ich den gleichen Code ind OnCustomDraw funktioniert es. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz