![]() |
Größten Wert einerDBGrid Zeile farblich hinterlegen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein Verständnisproblem mit meiner farblichen Gestaltung. Ich möchte den größten Wert in einer DBGrid Zeile farblich markieren. Die Zellen werden auch farblich hinterlegt, aber dummerweise immer eine Zeile tiefer als die eigentliche Zeile. Und außerdem flackernmdie Zellen im Grid.
Code:
was mach ich falsch ?
procedure TNachbestellung.jvdbgrd_GridDrawColumnCell(
Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var I, maxfeld, maxwert: Integer; str_feld : string ; begin IF (Column.Field.FieldName = 'VK_1_MENGE') or (Column.Field.FieldName = 'VK_2_MENGE') or (Column.Field.FieldName = 'VK_3_MENGE') or (Column.Field.FieldName = 'VK_4_MENGE') or (Column.Field.FieldName = 'VK_5_MENGE') or (Column.Field.FieldName = 'VK_6_MENGE') then begin maxfeld := 0; maxwert := 0; // ermitteln des größten Wertes und festhalten in welchem Datenfeld for I := 1 to 6 do begin str_feld := 'VK_'+IntToStr(i)+'_MENGE'; if zqry_Best.fieldbyname(str_feld).asinteger > maxwert then begin maxwert := zqry_Best.fieldbyname(str_feld).asinteger; maxfeld := I; end; end; str_feld := 'VK_'+IntToStr(maxfeld)+'_MENGE' ; // wenn größtes ermitteltes Datenfeld = dem aktuellen Gridfeld, dann farbig hinterlegen. if (Column.Field.FieldName = str_feld) then Column.Color := clred else Column.Color := clWindow; jvdbgrd_Grid.Canvas.fillRect( rect ); jvdbgrd_Grid.DefaultDrawColumnCell(Rect,DataCol,Column,State); end; |
AW: Größter Wert einer Zeile im DBGrid farblich hinterlegen
Hi waldforest
Ich würde das grundsätzlich anders lösen - Die Prozedur gehört meiner ersten Reaktion nach nicht in OnDrawCell:
Delphi-Quellcode:
In einer 2. Reaktion kann sie da bleiben. Alles, was tu tn musst, ist, zu prüfen, ob der Spaltentitel in TFeldnamen vorkommt. Wenn ja, wird, wie oben gezeigt, der Wert in den Record geschri
Type TFeldnamemn = ('VK_1_MENGE','VK_2_MENGE','VK_3_MENGE','VK_4_MENGE','VK_5_MENGE','VK_6_MENGE');
TBigest = record Wert : dein Datentyp; ARow: Integer; ACol: Integer; end; ... ... private ... FBigest: TBigest; ... ... procedure TForm1.jvdbgrd_GridDrawColumnCell; Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var I, J: Integer; str_feld : string ; begin for i := 0 to jvdbgrd.row.Count -1 do begin for j := 0 to jvdbgrd.col.Count -1 do begin (Nun liest du den Wert der Zelle und belegst Bigest.Wert damit, sofern deren Wert kleiner ist.) (Gleichzeitig musst du die Koordinaten der Zelle in Bigest ARow und Bigest ACol speichern.I) end; end; end; ColorToBigestValueField; ColorToBigestValueField ist eine Prozedur, die das im Record angegebene Feld des Grid im Nachinein einfärbt. Die habe ich jetzt allerdings nicht entworfen. Gruss Delbor PS: Zitat:
|
AW: Größten Wert einerDBGrid Zeile farblich hinterlegen
Hmm..
Wenn deine DataSet-Komponente ein CalculatedField unterstützt, kannst Du die Ermittlung des höchsten Wertes, bzw. den Spaltennamen auch VOR der Anzeige im Grid machen (OnCalcField). Dann währe nur noch
Delphi-Quellcode:
notwendig.
// wenn größtes ermitteltes Datenfeld = dem aktuellen Gridfeld, dann farbig hinterlegen.
if (Column.Field.FieldName = zqry_Best.fieldbyname('MaxFieldName').asString) then Column.Color := clred else Column.Color := clWindow; Dadurch müsste nicht bei jeder Zelle erneut die MaxValue Spalte ermittelt werden. Sollte ein deutliches SpeedUp bewirken und Du kannst beim Debuggen einfacher prüfen. |
AW: Größten Wert einerDBGrid Zeile farblich hinterlegen
Hallo,
vielen Dank für die Tipps. Habe den Fehler gefunden (ungeachtet der Maximalberechnung). Es lag daran dass ich Column.Color anstatt Canvas.Brush.Color genutzt habe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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 by Thomas Breitkreuz