Autor Beitrag
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 10.01.16 15:43 
Ich habe eine Liste mit Datumsangaben, die ich in einem TMonthcalendar mithilfe des Events MonthCalendarGetMonthInfo und der Methode BoldDays visualisieren möchte. Der Eventhandler sieht im wesentlichen folgendermaßen aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.MonthCalendarGetMonthInfo(Sender: TObject;
  Month: Cardinal; var MonthBoldInfo: Cardinal);
var
 bdays:  array of cardinal;
begin
  for i:=0 to n-1 do
    if months[i] = Month then
    begin
      setLength(bDays, length(bDays) + 1);
      bDays[high(bdays)] := day[i];
    end;

  MonthCalendar.BoldDays(bDays, MonthBoldInfo);
end;


Soweit funktioniert das auch. Das Problem ist, dass ich keine Möglichkeit finde auch das Jahr des Monats zu überprüfen. Habe ich also nur einen Datensatz für den 01.01.2015, so wird der 01.01. in allen Jahren (..., 2014, 2015, 2016, ...) markiert. Wie kann ich auslesen in welchem Jahr der Kalendar sich befindet? Ich habe es schon über die Date Eigenschaft probiert, allerdings hinkt die beim Umschalten immer um einen Monat hinterher.
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 10.01.16 17:17 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var year,month,day:word;
begin
   decodedate(MonthCalendar1.Date,year,month,day);
   //year enthält das angezeigt Jahr, z.B. mit
end;


Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 10.01.16 17:36 
Hallo Mathematiker,

vielen Dank für die Hilfe. Ich hatte das genau so schonmal probiert, jedoch hinkt die Date Eigenschaft immer um einen Tick nach. Habe ich zum Beispiel den Oktober 2015 ausgewählt und gehe einen Monat zurück, so gibt mir Date immer noch den Oktober 2015 zurück. Erst beim nächsten Schritt zurück (dann der August 2015) springt Date auf den September 2015. Wenn ich nur das Jahr von Date auslese führt das zu Komplikationen beim Sprung von Dezember auf Januar.
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 10.01.16 18:17 
Hallo,
sehr merkwürdig. Ich hänge mal ein Minitestprogramm an. Dort werden Monat und Jahr korrekt ausgewertet, so bald du den Tag änderst. Allerdings werte ich die OnClick-Methode aus.

Beste Grüße
Mathematiker
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 10.01.16 18:31 
Und hier mal das Testprogramm mit GetMonthInfo. Dort sieht man wies hinterherhinkt. OnClick funktioniert leider nicht, wenn man Jahr/Monat direkt ändert.
Einloggen, um Attachments anzusehen!
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 23.01.16 08:53 
Also ich habe mittlerweile eine Lösung mit der ich allerdings nicht wirklich zufrieden bin. Die Eigenschaft Date vom MonthCalendar wird augenscheinlich erst aktualisiert, nachdem getMonthInfo() durchgelaufen ist. Im Moment starte ich in getMonthInfo() einen Timer (Interval := 1ms) der dann getMonthInfo() nochmal aufruft und sich selbst disabled. Im zweiten (Timer gestarteten) Durchlauf von getMonthInfo() besitzt Date dann den korrekten Wert.

Falls noch jemand eine schönere Lösung hat, die ohne einen Timer auskommt - bitte melden.
kagb
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 09.02.16 11:14 
Nimm:

ausblenden Delphi-Quelltext
1:
MonthCalendarGetMonthBoldInfo(Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal)					

da wird das aktuelle Jahr mit übergeben.

Moderiert von user profile iconNarses: B- durch Delphi-Tags ersetzt
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Di 09.02.16 17:27 
Zitat:
Nimm:

MonthCalendarGetMonthBoldInfo(Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal)

da wird das aktuelle Jahr mit übergeben.


Woher nehmen, wenn nicht stehlen? Diese Methodensignatur ist bei mir nicht vorhanden.