AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid -> Zelle farblich

Ein Thema von HolgerCW · begonnen am 23. Okt 2007 · letzter Beitrag vom 25. Okt 2007
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

Re: StringGrid -> Zelle farblich

  Alt 25. Okt 2007, 09:33
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:
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] = '1then Canvas.Brush.Color := clRed;
      If Arten[I] = '2then Canvas.Brush.Color := clBlue;
      If Arten[I] = '3then 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;
Vorher lese ich alle VON und BIS Datums aus mit der Art des Urlaubs, die dann mit der oberen Procedure eingetragen werden.

Delphi-Quellcode:
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;
Weiss nicht ob das eine optimale Lösung ist, aber es funktioniert ohne merkliche Ladezeiten. (< 1 Sekunde)

Gruss

Holger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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