AGB  ·  Datenschutz  ·  Impressum  







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

Kalender programmieren?

Ein Thema von JummiJa · begonnen am 18. Jun 2013 · letzter Beitrag vom 13. Jan 2016
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Kalender programmieren?

  Alt 20. Jun 2013, 22:51
Monatsansicht, ...

Unser problem liegt vorerst darin die einzelnen daten richtig in die spalten eines stringgrid oder so zu bekommen.
Das ist aber primär ein mathematisches/logisches Problem und erfordert erst mal Denksport.

Nehmen wir mal an, ihr möchtet die Ansicht (für Juni 2013) wie folgt haben
Code:
Mo Di Mi Do Fr Sa So
27 28 29 30 31  1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 1  2  3  4  5  6  7
Gesucht wird also das Datum, was als erstes angezeigt werden soll (hier 27.05.2013).
  1. Wochentag vom 01.06.2013 bestimmen Delphi-Referenz durchsuchenSysUtils.DayOfTheWeek
    (Mo=1, Di=2, ..., So=7)
    Ergebnis = 6
  2. Der Montag vor dem 01.06.2013 ist 5 Tage zurück, also ist das gesuchte Datum der 01.06.2013 - ( Wochentag(01.06.2013) - 1 ) => 27.05.2013 und somit das erste Datum, was in diesem Monatskalender angezeigt werden soll
In Delphi sieht das dann so aus
Delphi-Quellcode:
function GetMonthCalenderStartDate( AMonth, AYear : Word ) : TDate;
begin
  // Erster Tag im Monat
  Result := EncodeDate( AYear, AMonth, 1 );
  // Montag vor dem Datum ermitteln => Starttag für die Kalender-Ansicht
  Result := Result - ( DayOfTheWeek( Result ) - 1 );
end;
Wenn man jetzt das Grid Zelle für Zelle durchläuft - in der Reihenfolge der Datumsfolge - dann braucht man nur noch das Datum um 1 Tag erhöhen und hat immer das passende Datum zu der Zelle
Delphi-Quellcode:
procedure ShowMonthGrid( AGrid : TStringGrid; AMonth, AYear : Word );
var
  LRow, LCol : Integer;
  LDate : TDate;
begin
  LDate := GetMonthCalenderStartDate( AMonth, AYear );

  // 7 Spalten
  AGrid.ColCount := 7;
  // 7 Zeilen (1x Überschrift, 6x Daten)
  AGrid.RowCount := 7;
  // 1 Zeile fixiert (wird von oben gezählt)
  AGrid.FixedRows := 1;

  // in der ersten Zeile stehen die Tagesnamen
  for LCol := 0 to 6 do
    AGrid.Cells[LCol,0] := FormatDateTime( 'ddd', LDate + LCol );

  // Jetzt das eigentliche Kalenderblatt füllen
  for LRow := 1 to 6 do
    for LCol := 0 to 6 do
      begin
        // in die Zelle nur den Monatstag schreiben
        AGrid.Cells[LCol,LRow] := FormatDateTime( 'dd', LDate );
        // 1 Tag weiter
        LDate := LDate + 1;
      end;
end;
BTW: Delphi-Referenz durchsuchenSysUtils.FormatDateTime

PS: Bevor die Frage aufkommt, warum ich 6 Zeilen benutze, dann dieses Blatt mal für Dezember 2013 ausfüllen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (20. Jun 2013 um 22:55 Uhr)
  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 06:51 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