![]() |
Re: StringGrid -> Zelle farblich
Hallo Holger,
dann doch mit Datenbank? Oder sind Deine Angaben nur UNTER ANDEREM abhängig von dem Datenbankinhalt? Hast Du sonst schon mal über ein DBGrid nachgedacht? Dann hast Du eine direkte Verbindung zur Datenbank. Bei Änderung in der DB wird auch das DBGrid neu gezeichnet. Das StringGrid zeichnet sich (oder nur die entsprechende Zelle?) neu, wenn Du einer Zelle einen Wert zuweist (denke ich zumindest). On DrawCell wird für jede Zelle aufgerufen, die neu gezeichnet wird. stahli |
Re: StringGrid -> Zelle farblich
@HolgerCW
ich hatte dir doch schon in dem anderen thread vorgeschlagen dir die datenmenge für die darstellung einmal komplett zu holen und dann in objekte zu speichern und diese dem grid zu übergeben. zieh das mal in erwägung, so verkehrt ist der weg nicht ;) mfg Jonny |
Re: StringGrid -> Zelle farblich
Habe das nun so gelöst:
1. Es werden alle Wochenenden gekennzeichnet. 2. Alle ungültigen Datums ausgegraut. Z.b.: 30.02.2007 3. Alle Urlaubs/Seminar/Sonstige - Tage mit unterschiedlichen Farben So lese ich meine Arrays aus und bringe die Farben in mein StringGrid (STG_UP_Planer):
Delphi-Quellcode:
Vorher lese ich alle VON und BIS Datums aus mit der Art des Urlaubs, die dann mit der oberen Procedure eingetragen werden.
procedure UP_Monat_zeichnen(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);
var Datum: String; MyDate: TDateTime; I: Integer; begin with STG_UP_Planer do begin if (ACol > 0) AND (ARow > 0) then begin Datum := inttostr(ACol) + '.' + inttostr(ARow) + '.2007'; if trystrtodate(Datum,MyDate) = TRUE then begin //Wochenenden eintragen if (DayOfWeek(strtodate(Datum)) = 7) OR (DayOfWeek(strtodate(Datum)) = 1) then begin Canvas.Brush.Color := clMoneygreen; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //Urlaubstage eintragen for I := 0 to length(Tage) -1 do begin if (ACol = strtoint(Tage[I])) AND (ARow = strtoint(Monate[I])) then begin If Arten[I] = '1' then Canvas.Brush.Color := clRed; If Arten[I] = '2' then Canvas.Brush.Color := clBlue; If Arten[I] = '3' then Canvas.Brush.Color := clGreen; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+200, Rect.Top+2, Cells[ACol, ARow]); end; end; end else begin //Ungültige Datums eintragen Canvas.Brush.Color := clSilver; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; end; end; end;
Delphi-Quellcode:
Weiss nicht ob das eine optimale Lösung ist, aber es funktioniert ohne merkliche Ladezeiten. (< 1 Sekunde)
procedure Urlaubstage_eintagen();
var T: Integer; M: Integer; I: Integer; Laenge: Integer; Monat1: Integer; Monat2: Integer; Tag1: Integer; Tag2: Integer; Art: String; begin I := 0; T := 0; M := 0; Laenge := 0; Tage := nil; Monate := nil; Arten := nil; //Länge der Arrays bestimmen DM_Query_UP.QueryPlaner.First; while DM_Query_UP.QueryPlaner.Eof <> true do begin Monat1 := Monthof(strtodate(DM_Query_UP.QueryPlaner['VON'])); Monat2 := Monthof(strtodate(DM_Query_UP.QueryPlaner['BIS'])); Tag1 := Dayof(strtodate(DM_Query_UP.QueryPlaner['VON'])); Tag2 := Dayof(strtodate(DM_Query_UP.QueryPlaner['BIS'])); for T := Tag1 to Tag2 do begin for M := Monat1 to Monat2 do begin Laenge := Laenge + 1; end; end; DM_Query_UP.QueryPlaner.Next; end; SetLength(Tage,Laenge); SetLength(Monate,Laenge); SetLength(Arten,Laenge); I := 0; T := 0; M := 0; //Urlaubstage auslesen DM_Query_UP.QueryPlaner.First; while DM_Query_UP.QueryPlaner.Eof <> true do begin Monat1 := Monthof(strtodate(DM_Query_UP.QueryPlaner['VON'])); Monat2 := Monthof(strtodate(DM_Query_UP.QueryPlaner['BIS'])); Tag1 := Dayof(strtodate(DM_Query_UP.QueryPlaner['VON'])); Tag2 := Dayof(strtodate(DM_Query_UP.QueryPlaner['BIS'])); Art := DM_Query_UP.QueryPlaner['ART']; for T := Tag1 to Tag2 do begin for M := Monat1 to Monat2 do begin Tage[I] := inttostr(T); Monate[I] := inttostr(M); Arten[I] := Art; I := I + 1; end; end; DM_Query_UP.QueryPlaner.Next; end; end; Gruss Holger |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 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