Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Daten bei TMonthCalendar markieren (https://www.delphipraxis.net/103842-daten-bei-tmonthcalendar-markieren.html)

blackdrake 22. Nov 2007 15:24


Daten bei TMonthCalendar markieren
 
Hallo.

Ich möchte bei einem TMonthCalendar bestimmte Daten markieren. Ich habe folgenden Codeteil gefunden:

Delphi-Quellcode:
procedure TMainForm.mntCalendarGetMonthInfo(Sender: TObject; Month: Cardinal;
  var MonthBoldInfo: Cardinal);
begin
  if Month = 10 then
    mntCalendar.BoldDays([1,2,5],MonthBoldInfo);
  if Month = 11 then
    mntCalendar.BoldDays([3,21,28],MonthBoldInfo);
end;
Die Probleme sind jetzt:

1. Ich möchte auch das Jahr überprüfen. Der 11.10.2007 soll also anders markiert werden als der 11.10.2006. YearOf(mntCalendar.Date) ist keine gute Lösung, da 3 Monate zugleich angezeigt werden und so würde bei der Anzeige des Januar 2007 der Dezember 2006 als Dezember 2007 gesehen werden, oder?

2. Ich möchte die Datumsangaben möglichst mit 2 verschiedenen Merkmalen versehen. Wie kann ich eine Zahl rot schreiben lassen oder unterlegen?

3. Wie kann ich ein dynamisches Array [1, 5, 12] während der Laufzeit erstellen? Ich möchte Daten auslesen und dementsprechend eine unbekannte Anzahl von Tagen markieren.

Hat jemand Ratschläge für mich?

Gruß
blackdrake

blackdrake 23. Nov 2007 14:41

Re: Daten bei TMonthCalendar markieren
 
Keine eine Ahnung?

Alter Mann 23. Nov 2007 17:28

Re: Daten bei TMonthCalendar markieren
 
Hi,

zu 1)
Delphi-Quellcode:
  if (Sender is TMonthCalendar) then
  begin
    DecodeDate((Sender as TMonthCalendar).Date, Y, M, D);
  case Y of
    2005 : case M of
              1 : (Sender as TMonthCalendar).BoldDays(DynArrRec[0].Months[0].Days, MonthBoldInfo);
              2 : (Sender as TMonthCalendar).BoldDays(DynArrRec[0].Months[1].Days, MonthBoldInfo);
           end;
    end;
  end;
zu 2) kein Vorschlag

zu 3)
Delphi-Quellcode:
type
  MonthsArr = record
    Month: Integer;
    Days : Array of LongWord;
  end;

  DynCalArr = record
    Year  : Word;
    Months : Array of MonthsArr;
  end;

var
  DynArrRec : Array of DynCalArr;

procedure TForm1.FillDynaArrayRec;
begin
  SetLength(DynArrRec, 1);                  // 1 Jahr
  DynArrRec[0].Year := 2005;                // 2005
  SetLength(DynArrRec[0].Months, 2);        // 2 Monate
  DynArrRec[0].Months[0].Month := 1;        // Januar
  SetLength(DynArrRec[0].Months[0].Days, 4); // 4 Tage
  DynArrRec[0].Months[0].Days[0] := 1;
  DynArrRec[0].Months[0].Days[1] := 8;
  DynArrRec[0].Months[0].Days[2] := 17;
  DynArrRec[0].Months[0].Days[3] := 25;
  DynArrRec[0].Months[1].Month := 2;        // Februar
  SetLength(DynArrRec[0].Months[1].Days, 1); // 1 Tag
  DynArrRec[0].Months[1].Days[0] := 15;
end;
Hätte man mit Hilfe der Hilfe(BoldDays) und ein bischen Suchen in der DP (dynamisches Array) auch selber rauskriegen können.

Also, bessere Dich.

Gruß

shmia 23. Nov 2007 17:38

Re: Daten bei TMonthCalendar markieren
 
Ich denke mal, TMonthCalendar bringt einfach nicht genügend Features mit.
Schau dich mal hier um: http://www.torry.net/pages.php?id=293

blackdrake 23. Nov 2007 17:55

Re: Daten bei TMonthCalendar markieren
 
Hallo.

Wäre irgendwie blöd, wenn ich eine Fremd-VCL nur wegen verschiedenfarbiger Markierungen verwenden müsste. Aber ich guck mir mal alle Freeware's an.

@Alter Mann (zu 1). Das dachte ich mir auch schon mit dem Date auslesen. Aber der Kalender zeigt ja (je nach Fenstergröße mehrere Monate nebeneinander an. Was ist, wenn ich Januar 2007 wähle und der Dezember mit angezeigt wird? Dann denkt das Programm, es würde sich um den Dezember des Jahres YearOf(x. Januar 2007) = 2007 handeln, also Dezember 2007 und die Markierungen falsch setzen. Und da das Fenster theoretisch unendlich groß werden kann, hab ich irgendwie ein Problem.

Dynamische Arrays guck ich mir nach der Lösung dieses Grundproblemes an.

Gruß
blackdrake

Alter Mann 24. Nov 2007 18:31

Re: Daten bei TMonthCalendar markieren
 
Hallo blackdrake,

sicher zeigt er je nachdem wie Groß er aufgezogen ist, mehrere Monate/Jahre an,
aber immer in Zeilen und Spalten und die Matrix wird nie größer als 3x4, also 12 Monate in max. 2 Jahren.
Und was viel wichtiger ist, GetMonthInfo wird zuerst immer mit dem Monat oben links aufgerufen.
Damit hat man das Jahr an dem die Zählung beginnt und braucht nur noch die Monate, also 1, 2, 3 usw.,
mitzuzählen und die Werte zuweisen.

Alles Klar?

Gruß

blackdrake 28. Nov 2007 16:46

Re: Daten bei TMonthCalendar markieren
 
Hallo.

Ich komme immer noch nicht so richtig zurecht.

Gehen wir mal von folgendem Beispiel aus: Das Fenster sei so groß, dass 4 Monate angezeigt werden: November 2006, Dezember 2006, Januar 2007, Februar 2007.

Es wird nun beim Wechseln der Ansicht folgende Befehlsfolge ausgeführt:

Code:
mntCalendarGetMonthInfo(mntCalendar, 11, ...);
mntCalendarGetMonthInfo(mntCalendar, 12, ...);
mntCalendarGetMonthInfo(mntCalendar, 1, ...);
mntCalendarGetMonthInfo(mntCalendar, 2, ...);
Ich weiß ebenfalls das Jahr zu dem Eintrag, den ich markiert habe. Aber woher weiß ich nun, welches Jahr zu welcher Zahl gehört? Woher weiß die Funktion mntCalendarGetMonthInfo(mntCalendar, 11, ...), dass sie die erste aufgerufene ist und dass kein Monat vor Ihr dran kam? Ich möchte die Erkennung des Jahres möglichst ohne problematische Codestellen realisieren. Rein theoretisch (aber wg. Auflösung nicht praktisch) könnte ich das Fenster ja auch so groß ziehen, dass 14 Monate untereinander gezeigt werden und dann müsste ich zwischen 3 Jahren unterscheiden. Das ist so kompliziert! :( Gibts da eine einfache Lösung? Denke ich zu verdreht?

Gruß
blackdrake

blackdrake 9. Dez 2007 14:06

Re: Daten bei TMonthCalendar markieren
 
Gibts dafür jetzt keine Lösung, weil nichts kommt? Die (Freeware) VCLs von Torry.net waren alle Müll, zum Großteil nicht mal im Windows-Design.

Alter Mann 9. Dez 2007 14:55

Re: Daten bei TMonthCalendar markieren
 
Hi blackdrake,

14 Monate? Den Screen möchte ich sehen!

Gruß

blackdrake 9. Dez 2007 15:07

Re: Daten bei TMonthCalendar markieren
 
Es geht um die Theorie. Wenn ich was mache, dann soll es unter allen Bedingungen funktionieren und dynamisch sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 1 von 2  1 2      

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