![]() |
AW: dbGrid Zeile farbig markieren und fokusieren
Die Logik ist aber exakt dieselbe. Ich habe ja nicht gesagt, er soll das komplett im OnDrawCell machen, sondern nur aufzeigen, wie das überhaupt zu bewerkstelligen ist. Übrigens kann man auch eine Funktion schreiben, das spart den Boolean Var-Parameter ;)
|
AW: dbGrid Zeile farbig markieren und fokusieren
Zitat:
Sorry aber das verstehe ich nicht so ganz, kannst du mir das ganze vielleicht nochmal erklären? :oops: |
AW: dbGrid Zeile farbig markieren und fokusieren
Der Vorschlag von DeddyH meint ungefähr sowas:
Delphi-Quellcode:
Sir Rufo schlägt nun glaub ich vor, die Ermittlung ob ein Farbwechsel vorliegt in eine externe Funktion auszulagern, so braucht man nur diese Funktion ändern, wenn sich mal die Kriterien für einen Farbwechsel ändern sollten.
var
farbwechsel:Boolean; i:integer; //[...] begin //[...] farbwechsel := false; for i:=0 to Grid.ColCount-1 if Grid.Cells[i,ARow]<>Grid.Cells[i,ARow-1] then farbwechsel:=true; if farbwechsel then //[...] end; |
AW: dbGrid Zeile farbig markieren und fokusieren
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei mal eine Mini-Demo.
|
AW: dbGrid Zeile farbig markieren und fokusieren
Zitat:
Danke :) Die hat mir schon ein wenig auf die sprünge geholfen.. Aber leider ist nun alles in einer Farbe, aber ich verstehe nicht wieso. :/
Delphi-Quellcode:
Vielleicht habe ich ja einen Fehler eingebaut oder so.. Ich finde ihn jedenfalls nicht.. :/
function TForm2.UnterschiedFeststellen(ACol, ARow: integer): Boolean;
begin Result := ARow > StringGrid1.FixedRows; if Result then Result := StringGrid1.Cells[ACol, ARow] <> StringGrid1.Cells[ACol, ARow - 1]; end; procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin With (Sender as TStringGrid) do begin if (gdSelected in State) then Canvas.Brush.Color:= clYellow else if (gdFixed in State) then else if UnterschiedFeststellen(2, ARow) then Begin canvas.Brush.Color:= clWhite; Canvas.Font.Color:= clBlack; end else Canvas.Brush.Color:= clBtnFace; Canvas.Font.Color:= clBlack; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]); end; end; |
AW: dbGrid Zeile farbig markieren und fokusieren
1. Die Funktion UnterschiedFeststellen vergleicht nur die aktuelle Zelle, mit der passenden Zelle in der Reihe zuvor. Das ist glaub ich nicht das was du willst. Du willst doch die ganze Zeile gleich haben, oder? Schau dir mal meinen obigen Vorschlag an.
2. Wenn du die Farben zuteilst (weil Unterschied festgestellt) must du (im Gegensatz zu den alten gerade/ungerade Beispielen) schauen, "welche Farbe hab ich zur Zeit" und dann die andere festlegen. 3. Fehlen in deinem Beispiel nicht auch noch ein begin...end im letzten else-Zweig? |
AW: dbGrid Zeile farbig markieren und fokusieren
Zitat:
Delphi-Quellcode:
for i:=0 to StringGrid1.ColCount-1
EDIT: 1. Die Funktion UnterschiedFeststellen vergleicht nur die aktuelle Zelle, mit der passenden Zelle in der Reihe zuvor. Das ist glaub ich nicht das was du willst. Du willst doch die ganze Zeile gleich haben, oder? Schau dir mal meinen obigen Vorschlag an. 2. Wenn du die Farben zuteilst (weil Unterschied festgestellt) must du (im Gegensatz zu den alten gerade/ungerade Beispielen) schauen, "welche Farbe hab ich zur Zeit" und dann die andere festlegen. Der Vergleich an sich ist schon richtig.. Nur zu Punkt 2. komme ich absolut nicht weiter.. Habe das schon x mal durchdacht, aber komme da auf keine programmierbare Lösung :/ |
AW: dbGrid Zeile farbig markieren und fokusieren
Nimm doch den Code aus meinem Beispiel und ersetze nur die Farben. Ich schätze, es liegt wirklich am fehlenden begin-end im letzten else.
|
AW: dbGrid Zeile farbig markieren und fokusieren
Mein's war nur als Anregung gedacht. Du solltest das nutzen, um die Funktion UnterschiedFeststellen von DeddyH anzupassen, falls nicht die Zelle mit der in der Reihe davor, sondern falls die ganze Zeile mit der ganzen Zeile davor verglichen werden soll (so hatte ich deine Anforderung verstanden). Wenn ich das natürlich falsch aufgefasst habe, vergiss den Vorschlag.
Sehe gerade, du willst immer Spalte 2 testen, wo wahrschl. die ID oder so steht??? Dann die Funktion von DeddyH beibehalten. Zum Farbwechsel: Hab kein Delphi gerade, daher ungetestet, habs mir so vorgestellt, k.A. ob das so geht:
Delphi-Quellcode:
Nachtrag: Den "//Mach nix"-Zweig sollte man natürlich weglassen, war nur zur Verdeutlichung.
//[...]
else if UnterschiedFeststellen(2, ARow) then //Farbwechsel Begin if canvas.Brush.Color = clWhite then canvas.Brush.Color := clBlack else canvas.Brush.Color := clWhite; end else Begin //Mach nix, sprich Farbe beibehalten end Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow] Ich weiß halt nicht ob "if canvas.Brush.Color = clWhite" so geht, sprich, ob man sehen kann, welches die aktuelle Farbe ist. Falls nicht, musst du dir den jeweiligen Zusatand in einer variablen selber merken. |
AW: dbGrid Zeile farbig markieren und fokusieren
Was mir gerade auffällt:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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