Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - BoldDays nur für einzelne Jahre
Jann1k - So 10.01.16 15:43
Titel: BoldDays nur für einzelne Jahre
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 - 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
Jann1k - 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 - 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
Jann1k - 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.
Jann1k - 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 - 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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!