Zum Inhalt springen

Farbe in TListView-Einträgen


devil

Empfohlene Beiträge

Ich schätze mal su meinst Delphi (da TListview), da bist du hier im falschen Forum,(nur mal so :D )

Ok, um ne andere Farbe in nem Listview zu bekommen musst du die OnDraw (oder on ItemDraw???, weiss ich im Moment nicht mehr, wirst du aber denk ich doch selber Rausfinden) benutzen und dort eben die FontFarbe(oder die Pen-Farbe?) ändern, da das für alle Einträge gemacht wird musst du Prüfen was für ein Eintrag das ist ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

das gibts tatsächlich... da bekomme ich dann folgenden funktionsaufruf

void __fastcall TForm1::ListViewDrawItem(TCustomListView *Sender,

TListItem *Item, TRect &Rect, TOwnerDrawState State)

{

}

und wie soll ich das nun machen, ganz kapiert habe ich das nicht... :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von devil

das gibts tatsächlich... da bekomme ich dann folgenden funktionsaufruf

void __fastcall TForm1::ListViewDrawItem(TCustomListView *Sender,

TListItem *Item, TRect &Rect, TOwnerDrawState State)

{

}

und wie soll ich das nun machen, ganz kapiert habe ich das nicht... :)

Also ... Sender ist das TListView das das Ereigniss ausgelösst hat, dürfte hier wohl weniger interessieren. Item ist das Item aus der Liste welchens gerade gezeichnet werden soll. Rect ist das Rechteck auf dem TListView-Canvas, dass du benutzt um igendwas auszugeben. Und mit State kannst du feststellen, ob das Ding den Fokus hat und Selectiert ist etc ... steht aber auch alles in der Hilfe :D

Moment ... Sender könnte doch interessieren wegen der Ausgabe ... weiss ich aber im Moment nicht mehr, sieht aber danach aus.

Morgen werd ich mir das nochmal ankucken, wenn es nicht klar ist post ich mal die Delphi-Version davon, sollte dann klarer werden ...

Link zu diesem Kommentar
Auf anderen Seiten teilen


//******************************************************************************

//***            lstPublic DrawItem            ***

//******************************************************************************

procedure TfrmLoadSQL.lstPublicDrawItem(Control: TWinControl;

  Index: Integer; Rect: TRect; State: TOwnerDrawState);

var APos, Offset : Integer;

    ABox : TListBox;

    AString : String; 

begin

  ABox := (control as TListBox);

  AString := ABox.Items[Index];

  APos := pos('*', AString);

  //*** Ist ein * angehängt ? Wenn ja = eigene Abfrage -> farbig Ausgeben

  if (APos <> 0

) then

  begin

    //*** * am Ende abschneiden

    delete(AString, APos, 1);

    With ABox.Canvas do

    begin

      //*** Ausgabe Rechteck löschen

      FillRect(Rect);

      Offset := 2;

      Font.Color := clRed;

      TextOut(Rect.Left + Offset, Rect.Top, AString)

    end;

  end

  else

  if (State = [odSelected, odFocused]) then

  begin

    With ABox.Canvas do

    begin

      //Brush.Color := clRed;

      //*** Ausgabe Rechteck löschen

      FillRect(Rect);

      Offset := 2;

     Font.Color := clWhite;

      TextOut(Rect.Left + Offset, Rect.Top, ABox.Items[Index]);

    end

  end

  else

  //*** keine eigene Abfrage

  begin

    With ABox.Canvas do

    begin

      //*** Ausgabe Rechteck löschen

      FillRect(Rect);

      Offset := 2;

      Font.Color := clBlack;

      TextOut(Rect.Left + Offset, Rect.Top, ABox.Items[Index]);

    end

  end;

end;


Ich hoffe das hilft dir ... ach ja, was mir wieder einfällt. Wenn du DrawItem benutzt musst du alle Ausgaben selber machen, d.h. du musst selber die Farbe ändern wenn du einen Eintrag selektierst und wieder normal machen wenn er nicht selektiert ist. (State s.o.) Wegen mehrfarbiger Ausgabe pro eintrag, das geht wie oben, nur musst du dir eben merken wo du den Text mit der neuen Farbe anfangen willst ... also anstelle von

  Font.Color := clBlack;

  TextOut(Rect.Left + Offset, Rect.Top, ABox.Items[Index]);

eher sowas wie ...

  Font.Color := clRed;

  TextOut(Rect.Left + Offset, Rect.Top, TeilString1);

  Font.color := clBlue;

  TextOut(Rect.Left + Offset + TextWidth(TeilString1) + x, Rect.Top, TeilString2);

wobei x dazu da ist, einen gewissen Abstand zwichen die beiden Teilstrings zu bringen und sie nicht direkt aneinander zu kleben. Musst du aber probieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...