Kalender/Urlaubsplaner

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
BoraBora
Beiträge: 42
Registriert: So 11. Apr 2021, 16:00
OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
CPU-Target: xxBit

Kalender/Urlaubsplaner

Beitrag von BoraBora »

Hallo zusammen,

ich habe in einem Programm diesen Urlaubsplaner entdeckt und mich
würde interessieren, das mit Lazarus nachzubauen.
Der gezeigte Kalender ist in 2 Dimensionen scrollbar, wobei Maier, Müller, Schulze
nur vertikal scrollbar sind (analog zu fixedcols im Stringgrid).
Kann man so etwas mit einem Stringgrid realisieren?
Urlaubskalender.jpg
Urlaubskalender.jpg (68.88 KiB) 782 mal betrachtet
Bin für jeden Hinweis dankbar.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Kalender/Urlaubsplaner

Beitrag von theo »

Das ist vielleicht allgemein eher ein Fall für VirtualTreeView?
in /lazarus/examples/Components/vst_advanced/ findest du eine Demo Anwendung und dort "Tree in grid simulation".
Wenn du dort bei der Spalte "Customer ID" die Option "coFixed" setzt, dann bleibt sie beim horizontalen scrollen stehen.

vtv.png
vtv.png (171.51 KiB) 761 mal betrachtet

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Kalender/Urlaubsplaner

Beitrag von wp_xyz »

Ich würde beim TStringGrid bleiben. Allerdings wirst du, wegen der zusammengehängten Zellen nicht um eine abgeleitete Klasse herumkommen, und da wäre es erwägenswert, gleich zum TDrawGrid überzugehen, weil man da die Urlaubsplanung außerhalb des Grid speichern kann (ähnlich wie bei VirtualTreeView), z.B. in einer Datenbank.

Für die horizontalen Header würde ich zwei FixedRows nehmen. In der ersten für die Jahre müsste man die Monatsspalten für jedes Jahr zusammenfassen; das geht im Standardgrid nicht, es gibt aber ein Beispiel im Ordner examples/GridExamples/Merged_Cells, wie man das nachrüsten kann.

In die zweite FixedRow würde ich die Texte "Wochentag + LineEnding + Tagesnummer" verwenden. Damit das mit Zeilenumbruch ausgegeben wird, kannst du im Eventhandler für OnPrepareCanvas den TextStyle des Grid.Canvas auslesen, die Felder TextStyle.Workbreak auf true und TextStyle.SingleLine auf false setzen und dann nach Grid.Canvas.Textstyle zurückschreiben. Bei einem abgeleiteten Grid käme das in die PrepareCanvas, oder DoPrepareCanvas-Methode.

Das OnPrepareCanvas-Event (bzw. PrepareCanvas/DoPrepareCanvas) brauchst du auch, um Sa/So, sowie die Feiertage mit grauem/farbigem Hintergrund zu versehen. Zur Bestimmung der Feiertage brauchst du eigene Routinen, du kannst meinetwegen meine Unit wdcDateTools aus meinen Feiertagskalender verwenden (https://github.com/wp-xyz/HolidayCalendar).

Die etwas dickeren Trennlinien zum Jahreswechsel sind mit dem Standardgrid nicht zu erzeugen. Aber in einem abgeleiteten Grid kannst du die Grid-Methode DrawCellGrid überschreiben.

Benutzeravatar
BoraBora
Beiträge: 42
Registriert: So 11. Apr 2021, 16:00
OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
CPU-Target: xxBit

Re: Kalender/Urlaubsplaner

Beitrag von BoraBora »

Vielen Dank Theo und wp_xyz,

ich tendiere auch mehr zum Stringgrid und werde mir mal das TDrawGrid näher ansehen.

Antworten