Hallo zusammen
nach meiner Trennung habe ich plötzlich wieder Abende für mich, und statt nur Serien zu schauen, wollte ich etwas bauen, das ich selbst brauche. Herausgekommen ist die Idee für einen kleinen Terminplaner: Kurse, Verabredungen, Sport, Erinnerungen, alles lokal in einer SQLite-Datenbank, ohne Cloud und ohne Handyzwang.
Die Grundstruktur mit TListView und einer Datenbankverbindung steht, aber ich hänge an zwei Stellen. Erstens: Wie geht ihr mit wiederkehrenden Terminen um, speichert ihr jede Instanz oder eine Regel? Zweitens: Gibt es eine brauchbare Kalenderkomponente für Lazarus, die nicht nach 2003 aussieht?
Und ja, das Projekt ist auch ein bisschen Beschäftigungstherapie, aber ich sage mir, dass man mit 43 nach einer Trennung ruhig ein neues Hobby und einen neuen Terminkalender brauchen darf. Für Hinweise bin ich dankbar.
Simone
Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
-
Simone_A43
- Beiträge: 2
- Registriert: Mi 16. Sep 2026, 19:31
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Als RegelSimone_A43 hat geschrieben: Mi 16. Sep 2026, 19:59 Erstens: Wie geht ihr mit wiederkehrenden Terminen um, speichert ihr jede Instanz oder eine Regel?
Es gibt TvPlanIt. Stammt ursprünglich von TurboPower und ist aus dem letzten Jahrhundert. Aber zumindest in der Lazarus-Version kannst du eigentlich fast alles einstellen: https://wiki.freepascal.org/Turbopower_Visual_PlanIt. Du kannst das Package ganz einfach im OPM installieren.Simone_A43 hat geschrieben: Mi 16. Sep 2026, 19:59 Zweitens: Gibt es eine brauchbare Kalenderkomponente für Lazarus, die nicht nach 2003 aussieht?
- Zvoni
- Beiträge: 740
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Zusatz: Auch wenn wp auf TvPlanit verwiesen hat:
Wirf das TListView in die Tonne. Nimm ein StringGrid (oder DBGrid)
Wiederkehrende Termine: Da bin ich zweierlei Meinung
Ja, ich verstehe, dass es einfacher sein kann als Regel, würde aber dennoch den eigenständigen (und somit redundanten) Termin bevorzugen.
Beispiel:
Ich habe jeden Mittwoch Bandprobe, und erzeuge es als wiederkehrenden Termin/Termin-Serie
Jetzt fällt aber ein Termin aus (Schlagzeuger im Urlaub)
Als Regel (so wie es Outlook macht) hab ich immer nur Ärger gehabt, weil mir dann die ganze Serie kaputtging.
Als eigenständigen eigenen redundanten Termin kann ich an jedem einzelnen Termin rumpfuschen, ohne dass es die Serie zerreisst.
Egal ob aus meinem Frontend, oder durch die Hintertür in DB-Browser for SQlite.
Um so einen redundanten Termin als Teil einer Serie zu kennzeichnen, kann man eine zusätzliche Spalte nehmen, welche dann eine eindeutige ID je Serie enthält (z.B. eine UUID)
Falls du Hilfe bei SQLite brauchst (Tipps&Tricks), kann ich helfen. Hab über 20 Jahre Erfahrung in DB-Design, und kenne auch die eher etwas "exotischeren" Tricks in SQLite.
Es gibt in SQLite die "Klassiker" die man vermeiden sollte, da sie nur unnötigen Overhead erzeugen
Übrigens: In SQLite, Termine bevorzugt als VARCHAR im Format "YYYY-MM-DD HH:NN:SS" speichern.
Die einzige vernünftige Alternative ist JulianDay, falls du DB-gebundene Controls verwenden willst
Obwohl ich ein Verfechter von "Benutze die nativen Datentypen" bin, ist SQLite eine Ausnahme davon:
Benutze VARCHAR(XX) statt TEXT für alle Strings, weil mit TEXT bekommst du das vermeiledeite "(Memo)" in DB-gebundenen Controls.
Falls keine DB-gebundenen Controls, dann natürlich TEXT verwenden
Wirf das TListView in die Tonne. Nimm ein StringGrid (oder DBGrid)
Wiederkehrende Termine: Da bin ich zweierlei Meinung
Ja, ich verstehe, dass es einfacher sein kann als Regel, würde aber dennoch den eigenständigen (und somit redundanten) Termin bevorzugen.
Beispiel:
Ich habe jeden Mittwoch Bandprobe, und erzeuge es als wiederkehrenden Termin/Termin-Serie
Jetzt fällt aber ein Termin aus (Schlagzeuger im Urlaub)
Als Regel (so wie es Outlook macht) hab ich immer nur Ärger gehabt, weil mir dann die ganze Serie kaputtging.
Als eigenständigen eigenen redundanten Termin kann ich an jedem einzelnen Termin rumpfuschen, ohne dass es die Serie zerreisst.
Egal ob aus meinem Frontend, oder durch die Hintertür in DB-Browser for SQlite.
Um so einen redundanten Termin als Teil einer Serie zu kennzeichnen, kann man eine zusätzliche Spalte nehmen, welche dann eine eindeutige ID je Serie enthält (z.B. eine UUID)
Falls du Hilfe bei SQLite brauchst (Tipps&Tricks), kann ich helfen. Hab über 20 Jahre Erfahrung in DB-Design, und kenne auch die eher etwas "exotischeren" Tricks in SQLite.
Es gibt in SQLite die "Klassiker" die man vermeiden sollte, da sie nur unnötigen Overhead erzeugen
Übrigens: In SQLite, Termine bevorzugt als VARCHAR im Format "YYYY-MM-DD HH:NN:SS" speichern.
Die einzige vernünftige Alternative ist JulianDay, falls du DB-gebundene Controls verwenden willst
Obwohl ich ein Verfechter von "Benutze die nativen Datentypen" bin, ist SQLite eine Ausnahme davon:
Benutze VARCHAR(XX) statt TEXT für alle Strings, weil mit TEXT bekommst du das vermeiledeite "(Memo)" in DB-gebundenen Controls.
Falls keine DB-gebundenen Controls, dann natürlich TEXT verwenden
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
Joh
- Lazarusforum e. V.
- Beiträge: 390
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Typisches Beispiel: meine Altpapiertonne: jeden 4. Montag, außer Ostermontag und am 3. Oktober; dann erst Dienstag...Zvoni hat geschrieben: Do 17. Sep 2026, 08:23 Als Regel (so wie es Outlook macht) hab ich immer nur Ärger gehabt, weil mir dann die ganze Serie kaputtging.
Als eigenständigen eigenen redundanten Termin kann ich an jedem einzelnen Termin rumpfuschen, ohne dass es die Serie zerreisst.
Egal ob aus meinem Frontend, oder durch die Hintertür in DB-Browser for SQlite.
Um so einen redundanten Termin als Teil einer Serie zu kennzeichnen, kann man eine zusätzliche Spalte nehmen, welche dann eine eindeutige ID je Serie enthält (z.B. eine UUID)
Andererseits Geburtstage: fast immer am gleichen Tag... außer man hat am 29.2.
just my two Beer
- af0815
- Lazarusforum e. V.
- Beiträge: 7445
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Kalenderprogrammierung war für mich immer ein Buch mit 7 Siegeln. Wäre interessant da einmal mitzulesen. Weil gerade die Serientermine mit Ausnahmen für mich abstrakt sind.
Bin neugierig ob es da zu Code kommt, da würde ich gerne mitlesen (und verstehen).
BTW: An Datenbankkenntnissen wird es mir nicht unbedingt mangeln (nehme ich an)
Bin neugierig ob es da zu Code kommt, da würde ich gerne mitlesen (und verstehen).
BTW: An Datenbankkenntnissen wird es mir nicht unbedingt mangeln (nehme ich an)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 740
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Was ist mit Pfingstmontag?Joh hat geschrieben: Do 17. Sep 2026, 14:19 Typisches Beispiel: meine Altpapiertonne: jeden 4. Montag, außer Ostermontag und am 3. Oktober; dann erst Dienstag...
Mal davon abgesehen: Lustig wird es, wenn ein Monat 5 Montage hat
Setzt halt voraus, dass du jedes Jahr die Feiertage vorhälst
Ah ja....der "Klassiker"Andererseits Geburtstage: fast immer am gleichen Tag... außer man hat am 29.2.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- Zvoni
- Beiträge: 740
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben
Habe ich gerade an der Backe im Rahmen des ERP-Umstiegs.af0815 hat geschrieben: Do 17. Sep 2026, 14:33 Kalenderprogrammierung war für mich immer ein Buch mit 7 Siegeln. Wäre interessant da einmal mitzulesen. Weil gerade die Serientermine mit Ausnahmen für mich abstrakt sind.
Bin im Migrations-Team, und mir wurde letzte Woche der Block "Betriebskalender" zugewiesen....
Prinzipiell ist so eine Kalender-Programmierung nicht weiter schwer, sofern man sich auch wirklich an die Regeln hält bzw. die Regeln vorher bekannt sind.
Bsp. Fällt ein Termin auf einen Feiertag, soll dann vorgezogen werden (auf welchen Termin?) oder nach hinten geschoben werden (auf welchen Termin?)?
Setzt natürlich voraus, dass die "Ausnahmen" in einer LUT zur Verfügung stehen.
Wenn das einmal steht, ist es im Prinzip einfache Mathematik, wo man dann nur unterscheiden muss:
Ist das Vorgabe-Kriterium ein Datum, oder ein Wochentag?
Da gibt es ja dann den ganzen Blumenstrauss (Beispiele):
1) Vorgabe: Datum --> Immer am Monats-Ersten (sind dann unterschiedliche Wochentage)
2) Vorgabe: Datum --> Immer am Monats-Letzten (sind dann unterschiedliche Wochentage)
3) Vorgabe: Datum --> Immer am 10. eines Monats (Denk mal an Bank-Daueraufträge)
4) Vorgabe: Wochentag –-> Immer der zweite Montag im Monat
usw....
Je nach Vorgabe ist die "Berechnung" der Folgetermine in der Serie unterschiedlich, zzgl. Anpassung, falls ein Termin auf einen Feiertag/Samstag/Sonntag u.ä. fällt
Prinzipiell muss man unterscheiden:
1) Ist ein Feiertag durch ein Datum festgelegt (Bsp. 01.05., 03.10., 25.12., 01.01. usw.) --> Wochentag "variabel"
2) oder durch einen Wochentag (Bsp. Karfreitag, Ostermontag usw.) --> Datum "variabel", jedoch Datum trotzdem "bekannt" und "fix" für das Jahr
Und bei unserem Betriebskalender mache ich es halt so, dass ich ALLE "Ausnahmen" (auch Samstage und Sonntage, weil da wird nicht gearbeitet. Auch z.B. die "Betriebsruhe" zwischen Weihnachten und Neujahr) in eine Lookup-Table als Datum (!!) eintrage.
Dann erzeuge ich eine komplette Zeitleiste (Reines Datum. Alle 365/366 Tage eines Jahres bzw. dynamisch auch über Jahreswechsel hinaus),
welche ich mit einen Left Join auf die LUT über das Datum verknüpfe.
Grober Algoritmus:
Laufe meine Zeitleiste ab, bis ich meinen Termin finde, schaue in die Spalte nebendran, ob diese NULL ist.
Falls Ja: "Gültiger" Tag für deinen Termin
Falls Nein (Der Join hat in der LUT was gefunden): Termin ist eine der Ausnahmen --> Wende jetzt festgelegte Regel an: vorwärts bzw. rückwärts solange bis ich eine NULL gemäss den Regeln treffe
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.