![]() |
Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt werden
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich habe in einem Stringgrid ein Rechnungsdatum und ein Fälligkeitsdatum stehen. Wenn das Fälligkeitsdatum erreicht ist soll die Zelle rot angezeigt werden. Mit meinem Code wird aber immer die ganze Spalte rot. Was mache ich falsch?
Delphi-Quellcode:
Um mein Problem zu verdeutlichen sende ich eine Grafik mit.
procedure TFRechnung.AdvStringGrid3DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var Datumrechnung, Datumrechungfaellig: TDate; I: Integer; begin with (Sender as TAdvStringGrid) do begin for i := 1 to AdvStringGrid3.rowcount - 2 do begin Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]); if Datumrechungfaellig = Datumrechnung + 14 then AdvStringGrid3.Colors[11, i] := clred; end; end; end; |
AW: Im Stringgrid Datum vergleichen
Äh, was hat der Thementitel mit dem Problem zu tun? Offensichtlich schaffst du es doch schon die Daten zu vergleichen. Du darfst eben nur eine Zelle färben und nicht die ganze Zeile. Dazzu musst du eben gucken mit welcher Eigenschaft der Komponente du eine Zelle ansprichst. Ich kenne das AdvStringGrid nicht.
|
AW: Im Stringgrid Datum vergleichen
Zumal wird beim Zeichnen einer jeden Zelle dein Code ausgeführt (schaue mal in allen Zeilen nach).
Die Methode gibt dir doch mit, welche Zelle jetzt gerade gezeichnet werden soll
Delphi-Quellcode:
ACol, ARow : Integer
Delphi-Quellcode:
if ACol = 11 then
with TAdvStringGrid( Sender ) do begin Colors[ ACol, ARow ] := clRed; end; |
AW: Im Stringgrid Datum vergleichen
Hallo und danke.
@Luckie: Habe den Titel geändert. @Sir Rufo: Okay das färbt auch die ganze Spalte. Wie muss ich das mit dem ausrechnen/anzeigen der Farbe in Kombination mit dem Datum machen? Im ColumnHeader steht Wort "Datum" und "Fällig" ich dachte, dass ich deshalb mit
Delphi-Quellcode:
arbeiten muss.
for i := 1 to AdvStringGrid3.rowcount - 2 do begin
Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]); Sonst gibt Delphi Fehlermeldungen aus weil das Wort "Datum" kein gültiges Datum ist. Gruss Waldow |
AW: Im Stringgrid Datum vergleichen
Zitat:
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Moin Waldow,
das müsste so (oder so ähnlich ;)) funktionieren: (Bei deinem Ansatz würde er imho beim Zeichnen jeder Zelle immer alle Zeilen durchgehen)
Delphi-Quellcode:
if (ARow <> 0) and (ACol in [9,11]) then
begin Colors[ ACol, ARow ] := clRed; end; |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
GetCellColor ist dein Freund...
so ungefähr (schnell hier im editor geschrieben)...
Delphi-Quellcode:
procedure TFRechnung.AdvStringGrid3GetCellColor(Sender: TObject; ARow, ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
var Datumrechnung, Datumrechungfaellig: TDate; begin if odd(ARow) then begin abrush.color := $00E4E4E4; // $00ECECF0 afont.Color := clBlack; end else begin abrush.color := $00EEEEEE; afont.Color := clBlack; end; if ARow = 0 then begin abrush.Color := clBtnFace; afont.Color := clBlack; end; // Hier nun eine Prüfung ob die aktuelle Zelle anders gefärbt werden muss. // wenn ja, dann abrush und/oder afont entsprechend setzen... Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]); if Datumrechungfaellig = Datumrechnung + 14 then abrush.color := clred; end; |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Hi DonManfred, danke für deine Hilfe!
Mit GetCellColor hatte ich auch schon etwas gemacht nur nicht weiter verfolgt.
Code:
Ich hatte so eine Meldung auch schon.
Wenn ich kompiliere erhalte ich folgende Meldung:
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt RG.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''Datum' ist kein gültiges Datum'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- Sie hat bestimmt etwas mit dem ColumnHeader zu tun, steht "Datum" und "Fällig" drinnen. Im FixedFooter steht "Gesamtsumme" usw. Deshalb jetzt mein Versuch mit der Schleife.
Delphi-Quellcode:
Aber dann wird wieder alles rot angezeigt.
for i := 1 to AdvStringGrid3.rowcount - 2 do begin
Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]); if Datumrechungfaellig = Datumrechnung + 14 then abrush.color := clred; end; Ist die Schleife unnötig? [EDIT] Ich habe den Fehler gefunden. Ich hatte einen Denkfehler. Es ist immer alles rot...es sind ja immer 14 Tage unterschied. Oh Mann! Danke nochmal an ALLE! Gruss Waldow |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Natürlich ist sie unnötig in GetCellcolor. Die funktion bekommt ROW und COL übermittelt. du musst also NUR die Zeile ROW überprüfen... und das eigentlich auch nur, wenn COL die Spalte ist, die evtl. gefärbt werden soll.
Prinzipiell müsste das aber so gehen; evtl. hab ich da nen tippfehler drin oder so; ha das halt schnell im editor hier zusammengepastet... |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Hallo, wenn ich die Schleife rausnehme erhalte ich wieder die Fehlermeldung:
Code:
Das mit dem Datum und der Farbe wird immer noch nicht richtig angezeigt.
Im Projekt RG.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''Datum' ist kein gültiges Datum'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Delphi-Quellcode:
Oder wie wird bei dir das i gefüllt?
jetzt := Now;
for i := 1 to AdvStringGrid3.rowcount - 2 do begin Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]); Label5.Caption := Format('%d', [DaysBetween(StrToDate(AdvStringGrid3.Cells[9, i]), jetzt)]); if strtoint(Label5.Caption) > 14 then abrush.color := clred; end; end; |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Moin, Moin.
Nun, wenn du die Schleife entfernst, aber das i verwendest, dürfte i einen nicht gewollten Wert besitzen. Vermutlich muss für i jetzt Row eingesetzt werden - aber du solltest die gesamte Methode OnDrawCell() mal mit dem aktuellen Stand zeigen... |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Hy,
Es wurde jetzt schon mehrfach darauf hingewiesen das eine Schleife an dieser Stelle unnötig ist. Setz doch einfach mal einen Breakpoint in der procedure und sieh dir an wann diese aufgerufen wird -> unzwar für jede Zelle 1 mal Das heisst das du jedesmal wenn eine Zelle gezeichnet wird, in deiner Schleife das komplette Grid durch gehst! Um die Fehlermeldung zu vermeiden, darfst du die erste Zeile(0) nicht mit verarbeiten:
Delphi-Quellcode:
procedure TFRechnung.AdvStringGrid3GetCellColor(Sender: TObject; ARow, ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
var Datumrechnung, Datumrechungfaellig: TDate; begin if ARow <> 0 then // Die Kopfzeile nicht prüfen begin Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, ARow]); Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, ARow]); if Datumrechungfaellig = Datumrechnung + 14 then ABrush.color := clred; end; end; |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Hallo,
ich wußte es leider nicht besser aber das half:
Delphi-Quellcode:
Da das AdvStrigGrid auch einen FloatingFooter hat muss ich jetzt nur noch die letzte Zeile herausfinden dann sollte es keine Fehler mehr geben
if ARow <> 0 then
Danke für die tolle Hilfe und Geduld. Gruss Waldow |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Hallo,
so funktioniert das mit TMS nie. Setze deinen Code unter GetCellColor. procedure.. if ARow > 0 then //Spaltenüberschriften nicht mit einbeziehen begin if acol=1 then //Spalte mit deinem Rechnungsdatum begin if (AdvGrid1.cells[2], arow] =rdatum+14) then //Fälligkeitspalte Color:=clred; end; end; Die Spaltennummern mußt du selber anpassen. Ich denke das ist kein Problem. Olaf |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Du kannst die Abfrage der Zeilennummer auch umgehen und mit TryStrToDate(const S: string; out Value: TDateTime): Boolean arbeiten. Gibt true zurück wenn in S ein "Datum" steht.
aber bei TMS gibt es auch
Delphi-Quellcode:
Das sind deine Start bzw. End-Spalten/Zeilen also:AdvStringGrid1.FixedFooters AdvStringGrid1.FixedRows AdvStringGrid1.FixedCols
Delphi-Quellcode:
if ARow > AdvStringGrid1.FixedRows then
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Danke, wie muss sich ich das mit dem FixedFooters machen um diese Reihe auszuschliessen?
Delphi-Quellcode:
Damit funktioniert es nicht.
if AdvStringGrid3.FixedFooters < 1
Gruss waldow |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Versuch es doch mal mit
Delphi-Quellcode:
if ARow < AdvStringGrid1.FixedFooters then
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Leider nicht, oder mache ich immer noch etwas falsch?
Delphi-Quellcode:
Gruss
procedure TFRechnung.AdvStringGrid3GetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont); var Datumrechnung: TDate; begin if ARow > 0 then begin if ARow < AdvStringGrid3.FixedFooters then begin if acol = 9 then begin Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, Arow]); Label5.Caption := Format('%d', [DaysBetween(Datumrechnung, now)]); if strtoint(Label5.Caption) > 14 then abrush.color := clred; end; end; end; end; Waldow |
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Welchen Wert hat denn FixedFooters?
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Liste der Anhänge anzeigen (Anzahl: 1)
Ich sende dir mal als Download eine Demo mit.
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Ich kann' leider nich kompilieren,
aber so müsste es gehen
Delphi-Quellcode:
if ARow < ADVStringGrid3.RowCount - ADVStringGrid3.FixedFooters
|
AW: Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt wer
Ja, es funktioniert nun 100%ig.
Dankeschön. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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