Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wenn das Fälligkeitsdatum erreicht ist soll Zelle im Stringgrid rot angezeigt werden (https://www.delphipraxis.net/151965-wenn-das-faelligkeitsdatum-erreicht-ist-soll-zelle-im-stringgrid-rot-angezeigt-werden.html)

Waldow 7. Jun 2010 22:44


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:
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;
Um mein Problem zu verdeutlichen sende ich eine Grafik mit.

Luckie 7. Jun 2010 23:45

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.

Sir Rufo 8. Jun 2010 00:42

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;

Waldow 8. Jun 2010 00:58

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:
for i := 1 to AdvStringGrid3.rowcount - 2 do begin
      Datumrechnung := StrToDate(AdvStringGrid3.Cells[9, i]);
      Datumrechungfaellig := StrToDate(AdvStringGrid3.Cells[11, i]);
arbeiten muss.

Sonst gibt Delphi Fehlermeldungen aus weil das Wort "Datum" kein gültiges Datum ist.

Gruss
Waldow

Luckie 8. Jun 2010 01:03

AW: Im Stringgrid Datum vergleichen
 
Zitat:

Zitat von Waldow (Beitrag 1026684)
@Luckie: steht doch in meinem ersten Post.

Ja, jetzt passt der Thementitel zum Problem. Vorher stand da was anderes.

rapante 8. Jun 2010 07:52

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;

DonManfred 8. Jun 2010 14:04

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;

Waldow 8. Jun 2010 14:39

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:
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  
---------------------------
Ich hatte so eine Meldung auch schon.
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:
  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;
Aber dann wird wieder alles rot angezeigt.
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

DonManfred 8. Jun 2010 14:48

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...

Waldow 8. Jun 2010 15:36

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:
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.
Das mit dem Datum und der Farbe wird immer noch nicht richtig angezeigt.

Delphi-Quellcode:
 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;
Oder wie wird bei dir das i gefüllt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz