![]() |
Gridzeilen nach Wert abwechseln gruppenweise einfärben
Hallo und guten Tag, ich habe folgendes Problem:
Ich möchte dataGrid-Zeilen nach dem Wert der ersten Spalte einfärben. Wobei gleiche Werte auch gleiche Farben haben sollen.Und das ganze abwechselnd in zBSp. clAqua und clInfoBK. Ich verwende die TopGrid-Componente. Hier eine schematische Darstellung: 2 -> clAqua 4 -> clInfoBK 4 -> clInfoBk 5 -> clAqua 7 -> clInfoBK 7 -> clInfoBK Ich hoffe jemand kann mir helfen. Wie auch immer, ich wünsche allen ein frohes Weihnachtsfest. Gruß haalmu |
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Stichwort OwnerDraw
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Was ist denn das? <OwnerDraw>
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Das heißt, dass Du das Zeichnen im Event OnDrawCell selbst übernimmst. Das TopGrid ist mir allerdings unbekannt, Du musst halt mal schauen, ob es ein solches Ereignis bereitstellt.
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Das Event OnDrawCell gibst hier nicht. Das ist ja das Schlimme. Habe so viele Lösungen im Forum gesehen, die sich aber auf das "normale" DBGrid beziehen. Naja, jeder macht es sich so schwer wie er kann.
Trotzdem, Danke |
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Ist das eine kommerzielle Komponente oder kann man sich den Source irgendwo ansehen?
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Die ist Commerziell. Das gibts so'n Event das nennt sich "GetDrawInfo"
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Das klingt doch schon einmal vielversprechend. Da würde ich dazu mal einen Blick in die Hilfe werfen (so vorhanden).
|
Re: Gridzeilen nach Wert abwechseln gruppenweise einfärben
Na das hab ich getan, alles auf englisch. Und keine Beispiele.
ich stell mal ein Codeschnippzel ein [
Delphi-Quellcode:
]
procedure TfrmMain.drgAlleFilmeGetDrawInfo(Sender: TObject; DataCol: Integer;
DataRow: Variant; var DrawInfo: TtsDrawInfo); begin if (drgAlleFilme.CurrentDataRow = DataRow) then begin DrawInfo.Color := clInactiveCaption; DrawInfo.Font.Color := clBlue; drgAlleFilme.FocusColor := clInactiveCaption; drgAlleFilme.FocusFontColor := clBlue; end else begin intLastZeile := DM.qryAlleFilmeintReihenFolge.Value; if (drgAlleFilme.GridStatus = grNormal) then begin if intLastZeile <> intNextZeile then blnFarbeWechseln := not blnFarbeWechseln; if blnFarbeWechseln = false then begin DrawInfo.Color := clAqua; drgAlleFilme.FocusColor := clAqua; end else begin DrawInfo.Color := clInfoBK; drgAlleFilme.FocusColor := clInfoBK; end; // if end; // if intNextZeile := DM.qryAlleFilmeintReihenFolge.Value; end; // if] end; // TfrmMain.drgAlleFilmeGetDrawInfo procedure TfrmMain.drgAlleFilmeRowChanged(Sender: TObject; OldRow, NewRow: Variant); var iRow, iCol :integer; begin iRow := drgAlleFilme.DisplayRownr[OldRow]; for iCol := 1 to drgAlleFilme.Cols do drgAlleFilme.CellInvalidate(iCol, iRow); iRow := drgAlleFilme.DisplayRownr[NewRow]; for iCol := 1 to drgAlleFilme.Cols do drgAlleFilme.CellInvalidate(iCol, iRow); end; // TfrmMain.drgAlleFilmeRowChanged] Das ganze funktioniert auch, aber nur solange ich nicht auf das Grid klicke, dann kommt alles durcheinander. Kann mir jemand sagen, was ich ändern muß? Gruß haalmu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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