Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Canvas.Textout Farbe ändern Problem (https://www.delphipraxis.net/109498-canvas-textout-farbe-aendern-problem.html)

Brainstalker 2. Mär 2008 19:59


Canvas.Textout Farbe ändern Problem
 
Hi,

ich hab gerade ein Problem. Ich will mit Textout Farbigen Text in einem TListView ausgeben.

Code:
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);
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.
Wieso wird Font.Color nach dem ersten Aufruf von TextOut nicht berücksichtigt?

turboPASCAL 2. Mär 2008 20:08

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?

Larsi 2. Mär 2008 20:11

Re: Canvas.Textout Farbe ändern Problem
 
Warum nimmste nicht ein unstichtbares Label oder schreibst den Text dirket in die Listiview?

Brainstalker 2. Mär 2008 20:39

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:
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;
Das soll Zwei Zeilen Text schreiben, was es auch tut. Die Zeilenhöhe wird automatisch angepasst durch die ImageList.
Wie gesagt, er schreibt beide Zeilen, aber die Farbe wird nicht übernommen, nachdem ich bereits einmal TextOut aufgerufen habe.

Brainstalker 4. Mär 2008 19:45

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:
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;
Allerdings werden beide Grün dargestellt.

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 01:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz