AGB  ·  Datenschutz  ·  Impressum  







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

Daten bei TMonthCalendar markieren

Ein Thema von blackdrake · begonnen am 22. Nov 2007 · letzter Beitrag vom 12. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Daten bei TMonthCalendar markieren

  Alt 22. Nov 2007, 16:24
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
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Daten bei TMonthCalendar markieren

  Alt 23. Nov 2007, 15:41
Keine eine Ahnung?
Daniel Marschall
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Daten bei TMonthCalendar markieren

  Alt 23. Nov 2007, 18:28
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ß
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Daten bei TMonthCalendar markieren

  Alt 23. Nov 2007, 18:38
Ich denke mal, TMonthCalendar bringt einfach nicht genügend Features mit.
Schau dich mal hier um: http://www.torry.net/pages.php?id=293
Andreas
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Daten bei TMonthCalendar markieren

  Alt 23. Nov 2007, 18:55
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
Daniel Marschall
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Daten bei TMonthCalendar markieren

  Alt 24. Nov 2007, 19:31
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ß
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Daten bei TMonthCalendar markieren

  Alt 28. Nov 2007, 17:46
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
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Daten bei TMonthCalendar markieren

  Alt 9. Dez 2007, 15:06
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.
Daniel Marschall
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Daten bei TMonthCalendar markieren

  Alt 9. Dez 2007, 15:55
Hi blackdrake,

14 Monate? Den Screen möchte ich sehen!

Gruß
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Daten bei TMonthCalendar markieren

  Alt 9. Dez 2007, 16:07
Es geht um die Theorie. Wenn ich was mache, dann soll es unter allen Bedingungen funktionieren und dynamisch sein.
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:36 Uhr.
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