Autor |
Beitrag |
Jann1k
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: 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:
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
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: So 10.01.16 17:17
Delphi-Quelltext 1: 2: 3: 4: 5:
| var year,month,day:word; begin decodedate(MonthCalendar1.Date,year,month,day); end; |
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Jann1k
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: 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
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: 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
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: 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
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: 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
|
Verfasst: Di 09.02.16 11:14
Nimm:
Delphi-Quelltext 1:
| MonthCalendarGetMonthBoldInfo(Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal) |
da wird das aktuelle Jahr mit übergeben.
Moderiert von Narses: B- durch Delphi-Tags ersetzt
|
|
Jann1k
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: 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.
|
|