Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Kalender programmieren? (https://www.delphipraxis.net/175384-kalender-programmieren.html)

JummiJa 18. Jun 2013 09:12

Kalender programmieren?
 
HallöÖ,

Ich habe ein kleines Problem. . . muss für die Schule ein Programm schreiben und dieses sollte ein Kalender enthalten, der später mit dem Windowskalender verbunden werden soll und sowas wie ein Alarm auslösen soll bei anfallenden Terminen. . .
Mein Problem liegt darin, dass ich nicht den Kalender von Delphi direkt nehmen kann, da ich vor hatte einzelne Tage anklicken zu können, um einen Termin einzutragen.
Keine Ahnung, wie wir nun die Tage hinbekommen, dass es wie ein richtiger Kalender ist.

Hilfen wären super! :)

liebe Grüße Jamy :)

Der schöne Günther 18. Jun 2013 09:24

AW: Kalender programmieren?
 
Hallo.

Das ist aber schon ganz schön anspruchsvoll. Oder ich verpasse etwas. Vor allem:

Windows hat doch überhaupt keinen Kalender! Ist der Taskplaner gemeint?

Welche Delphi-Version? Ich sehe spontan direkt einen
Delphi-Quellcode:
TMonthCalendar
und einen
Delphi-Quellcode:
TCalendar
bei beiden lassen sich doch problemlos Tage ... "anklicken"? Was ist denn sonst ein "richtiger" Kalender?

Ich stehe auf dem Schlauch, hoffentlich ist es nur die Hitze... :oops:

p80286 18. Jun 2013 09:52

AW: Kalender programmieren?
 
Ein richtiger Kalender ist einer, der Dir für jede viertel/halbe...Stunde des Tages die Möglichkeit gibt einen Termin einzutragen.
Und die Verbindung zum Windows-Kalender meint wohl, daß ,je nach Einstellung, 5Minuten...3Tage vor dem Termin eine Erinnerung hochpoppen soll.

Gruß
K-H

Morphie 18. Jun 2013 10:02

AW: Kalender programmieren?
 
Also meint er wohl einen Scheduler / Planner...
Da gibt es mehrere Komponenten für, z.B.
http://www.tmssoftware.com/site/planner.asp
http://www.devexpress.com/Products/VCL/ExScheduler

Allerdings hat Windows keinen eigenen Kalender. Womit soll sich dein Programm denn verbinden? Oder meinst du den Outlook-Kalender?

baumina 18. Jun 2013 10:06

AW: Kalender programmieren?
 
Dein Anliegen ist etwas pauschal, da kommen mehrere Fragen auf, wie z.B.:

1. Layout -> Wie soll der Kalender ungefähr aussehen
2. Datenspeicherung -> Wo sollen die Termine gespeichert werden
3. Datenaufbau -> welche Informationen sollen abgespeichert werden
4. Verbindung zum Windowskalender -> was muss hier passieren

JummiJa 19. Jun 2013 17:50

AW: Kalender programmieren?
 
also er soll sich dann "einfach" mit dem kalender bzw. der zeit vom Pc verbinden lassen und irgendwie evtl. halt noch erinnern so wie > p80286< schrieb :)

wenn ich ehrlich bin habe ich von Delphi sogut wie keinen Plan :D . . . ich habe bis jetzt alles in einen Ordner gespeichert, ob das dokumente für iwelche listen waren oder formulare . . . und mir wäre es lieb, wenn das alles zusammen bleiben würde :roll:

Prinzipiell soll es möglich sein tage anzuklichen, in diese einen Termin rein zu schreiben, dass ist das, was gespeichert werden soll . . .

ich habe an ein stringgrid gedacht nur weiß ich nicht, wie ich es weiter mache, . . . tage stehen als "kopf" schon drin nur das die einzelnen daten (1.,2.,...) drin stehen klappt nicht richtig und wüsste auch nicht, wie ich das dann machen kann, dass wenn man auf das datum geklickt hat und der termin neingetragen ist das datum wieder erscheint . . . wisst ihr wie ich meine ?! :/

danke schonmal für euer interesse! :)

Sir Rufo 19. Jun 2013 19:21

AW: Kalender programmieren?
 
Egal ob man Ahnung vom programmieren hat, sollte man die Anforderung klar formulieren können.

Schlüsselworte wie "irgendwie" sind dabei völlig fehl am Platz.

Versuche doch einfach mal das was du möchtest klar zu formulieren ohne dabei an Delphi oder eine andere Programmiersprache zu denken.
Mal meinetwegen Bilder zur Verdeutlichung.

Danach hast du den ersten und wichtigsten Schritt der Programmierung gelernt ;)

Perlsau 19. Jun 2013 20:42

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219108)
also er soll sich dann "einfach" mit dem kalender bzw. der zeit vom Pc verbinden lassen und irgendwie evtl. halt noch erinnern so wie > p80286< schrieb :)
wenn ich ehrlich bin habe ich von Delphi sogut wie keinen Plan :D . . . ich habe bis jetzt alles in einen Ordner gespeichert, ob das dokumente für iwelche listen waren oder formulare . . . und mir wäre es lieb, wenn das alles zusammen bleiben würde :roll:
Prinzipiell soll es möglich sein tage anzuklichen, in diese einen Termin rein zu schreiben, dass ist das, was gespeichert werden soll . . .

Als vollständiger Anfänger (von Delphi sogut wie keinen Plan) läßt sich ein solches Projekt nicht realisieren, weil dazu tiefergehende Kenntnisse notwendig sind. Kaum jemand wird hier ausreichend Zeit und Ausdauer investieren, um dir die Programmierung mit Delphi anhand eines komplexeren Projekts beizubringen. Mein Rat: lerne doch erst einmal die Grundlagen, indem du z.B. eines der zahlreichen Einsteiger-Tutorials durcharbeitest, und mache danach ein paar Übungsprojekte wie z.B. eine komfortable Adressverwaltung oder ein Tagebuch oder ähnliches. Danach überlegst du dir, was du alles für deine Terminverwaltung benötigst. So ist es z.B. nicht damit getan, ein Stringgrid mit den Wochentagen zu befüllen, sondern man muß z.B. auch berechnen können, mit welchem Wochentag ein Monat beginnt, um die Daten an die richtige Stelle schreiben zu können und/oder um die freien Stellen mit den letzten Tagen des Vor- bzw. den ersten Tagen des Folgemonats zu befüllen. Auch die Frage der Speicherung der Daten ist nicht ganz ohne. Das geht alles weit über Einsteiger-Niveau hinaus.

JummiJa 20. Jun 2013 08:51

AW: Kalender programmieren?
 
Klar und deutlich liegt das Problem erstmal darin das wir einen Kalender programmieren wollen der in etwa so aussieht/funktioniert wie der Standartkalender auf den meisten Smartphones.

Klar ist es schwer realisierbar, aber es ist ein schulprojekt das benotet wird und eben auch über unsere Abiturnoten mitentscheidet.... Tutorial und Co. Durcharbeiten geht aus zeitgründen einfach nicht, Info ist leider nicht unser einzigstes Fach :/
Die Grundlagen müssten wir theoretisch haben, ein Jahr versuchen wir ja schon im Infounterricht diese auf zu bauen... aber für sowas reicht unser Wissensstand eben noch nicht....

Aber danke für eure bisherigen Beiträge! :)

Der schöne Günther 20. Jun 2013 09:33

AW: Kalender programmieren?
 
Dann mach doch jetzt einmal genau fest, was das Ding nun können soll:

Übersicht:
  • Man sieht immer einen kompletten Monat in einer kalendertypischen Ansicht
  • Der anzuzeigene Monat lässt sich wechseln (eins vor/eins zurück)
  • Der Benutzer kann auf einen Tag klicken und bekommt daraufhin angezeigt, welche Termine bereits auf diesem Tag liegen und bekommt die Möglichkeit, einen weiteren Termin für diesen Tag zu erstellen

Fall Termin Anzeigen:
  • Der Benutzer klickt auf einen Tag (dargestellt durch Zahl) im Kalender
  • In einem Bereich darunter werden (z.B. in einer Listbox) aufgelistet, welche Termine an diesem Tag schon bestehen
  • Wird ein Eintrag in dieser Listbox ausgewählt, wird ein Button "Termin löschen" aktiviert.


usw, usw.


Ich weiß sonst nicht, wo sich die konkrete Frage versteckt. Ein Terminplaner ist wirklich nicht ganz trivial (wenn man es richtig machen will).

Sir Rufo 20. Jun 2013 09:44

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219144)
Klar und deutlich liegt das Problem erstmal darin das wir einen Kalender programmieren wollen der in etwa so aussieht/funktioniert wie der Standartkalender auf den meisten Smartphones.

Klar ist es schwer realisierbar, aber es ist ein schulprojekt das benotet wird und eben auch über unsere Abiturnoten mitentscheidet.... Tutorial und Co. Durcharbeiten geht aus zeitgründen einfach nicht, Info ist leider nicht unser einzigstes Fach :/
Die Grundlagen müssten wir theoretisch haben, ein Jahr versuchen wir ja schon im Infounterricht diese auf zu bauen... aber für sowas reicht unser Wissensstand eben noch nicht....

Aber danke für eure bisherigen Beiträge! :)

Gerade deshalb ist es ungemein wichtig die genauen Anforderungen zu definieren.
Dann kann man auch entscheiden welche Funktionen realisiert werden können (Zeit, Kenntnisstand) und welche eben nicht.
Einige Anforderungen sind natürlich zwingend und gefährden das gesamte Projekt, wenn diese nicht realisiert werden können.
Aber das weiß man dann bevor man x Stunden irgendwas in die Tastatur geklimpert hat und kann die Zeit für ein neues Projekt nutzen.

Das Einschätzen der eigenen Fähigkeiten und der benötigten Zeit ist der zweite wichtige Schritt bei der Programmierung ;)

Dalai 20. Jun 2013 09:52

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219144)
[...] einzigstes [...]

[Klugscheiß] Das Wort gibt's nicht [/Klugscheiß]

Sir Rufo 20. Jun 2013 09:54

AW: Kalender programmieren?
 
Zitat:

Zitat von Dalai (Beitrag 1219156)
Zitat:

Zitat von JummiJa (Beitrag 1219144)
[...] einzigstes [...]

[Klugscheiß] Das Wort gibt's nicht [/Klugscheiß]

Das Wort gibt es - sonst könnte er das nicht schreiben - die Sinnhaftigkeit strebt allerdings gegen Null ;)

Perlsau 20. Jun 2013 10:35

AW: Kalender programmieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von JummiJa (Beitrag 1219144)
Klar und deutlich liegt das Problem erstmal darin das wir einen Kalender programmieren wollen der in etwa so aussieht/funktioniert wie der Standartkalender auf den meisten Smartphones.

Da kann ich leider nicht weiterhelfen, da ich weder Smartphone noch sonst ein Handy besitze ...

Zitat:

Zitat von JummiJa (Beitrag 1219144)
Klar ist es schwer realisierbar, aber es ist ein schulprojekt das benotet wird und eben auch über unsere Abiturnoten mitentscheidet.... Tutorial und Co. Durcharbeiten geht aus zeitgründen einfach nicht, Info ist leider nicht unser einzigstes Fach :/

Das heißt, im Grunde möchtest du, daß dir jemand dein Programm schreibt?

Zitat:

Zitat von JummiJa (Beitrag 1219144)
Die Grundlagen müssten wir theoretisch haben, ein Jahr versuchen wir ja schon im Infounterricht diese auf zu bauen... aber für sowas reicht unser Wissensstand eben noch nicht.

Mir kommt es so vor, als ob ihr euch viel zu spät darangemacht habt, Delphi zu lernen. Ein Jahr Informatik-Unterricht und kaum die Grundlagen gelernt? Natürlich reicht der Unterricht allein nicht dafür aus, da muß man sich schon eigeninitiativ auf den Hosenboden setzen und das Gelernte zu Hause vertiefen. Wer das versäumt hat, der scheitert letztlich an der Abitur-Aufgabe, weil ihm die Grundkenntnisse fehlen.

Ich als langjähriger Programmierer habe für den untenstehenden Kalender (Terminkalender meiner Projektverwaltung "Procode") etliche Tage benötigt (für die komplette Projektverwaltung Monate), bis dieses Modul einwandfrei und zu meiner Zufriedenheit funktionierte, und es gäbe noch immer ein paar Kleinigkeiten zu verbessern:

baumina 20. Jun 2013 10:41

AW: Kalender programmieren?
 
Zitat:

Zitat von Perlsau (Beitrag 1219167)
Mir kommt es so vor, als ob ihr euch viel zu spät darangemacht habt...

Na wenn das Abi 2014 ist, könnts schon noch klappen.

p80286 20. Jun 2013 11:10

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219144)
Klar ist es schwer realisierbar, aber es ist ein schulprojekt das benotet wird und eben auch über unsere Abiturnoten mitentscheidet.... Tutorial und Co. Durcharbeiten geht aus zeitgründen einfach nicht, Info ist leider nicht unser einzigstes Fach :/
Die Grundlagen müssten wir theoretisch haben, ein Jahr versuchen wir ja schon im Infounterricht diese auf zu bauen... aber für sowas reicht unser Wissensstand eben noch nicht....

Aber so ein paar Grundlagen sind schon da?
"Lastenheft", "Anforderungsprofil", diese Worte habt Ihr schon einmal gehört? Und Ihr könnt Euch darunter sogar etwas vorstellen?

Also formuliere doch bitte einmal die Anforderungen, und wenn Du dies hast, dann lies sie Dir durch, und überlege ob Deine Formulierungen auch für jemanden verständlich sind, der nicht Dein Smartphone kennt.
Und dann sehen wir mal weiter.

Gruß
K-H

JummiJa 20. Jun 2013 18:56

AW: Kalender programmieren?
 
Genau so wie es der schöne Günther geschrieben hat

Monatsansicht, man soll auf die einzelnen Tage klicke können, dann erscheint ein fenster etc. In dem man eingetragene termine in z.B. einer listbox sieht welche hinzufügen oder löschen kann. (Eine erinnerungs funktion wäre praktisch aber erstmal egal)
Unser problem liegt vorerst darin die einzelnen daten richtig in die spalten eines stringgrid oder so zu bekommen.

Das Problem mit unserem mangelnden grundkenntnissen kennen wir selber gut genug. Bloß sagte uns damals in der 10. Klasse keiner das wir 2 jahre vorkenntnis in delphi brauchen um halbwegs gute noten zu bekommen. Jetzt sitzen wir eben in diesem schlamassel und müssen dieses programm irgendwie umsetzen.

Uns soll keiner das Programm schreiben, sondern uns in irgend einer Art erklären wie man soetwas programmiert.

Perlsau 20. Jun 2013 19:17

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219262)
Uns soll keiner das Programm schreiben, sondern uns in irgend einer Art erklären wie man soetwas programmiert.

Die Beschreibung, ein solches Programm zu entwickeln, ist um vieles aufwendiger als das Programm selbst zu schreiben. Man kann bei deinen/euren Postings ja nicht einmal erkennen, was ihr denn bereits versucht habt und wo genau ihr nicht weiterkommt. Ein Hinweis wie "Unser problem liegt vorerst darin die einzelnen daten richtig in die spalten eines stringgrid oder so zu bekommen." genügt nicht, um dir zu zeigen, wo du einen Fehler machst. Niemand kann hier erraten, wie ihr denn versucht habt, "die" Daten (Kalenderdaten? Termindaten?) in einem Stringgrid anzuzeigen. Um das zu lösen, müßt ihr euch mit den Eigenheiten des Datumformats auseinandersetzen, die Methoden der Unit DateUtils studieren und danach Schritt für Schritt überlegen, wie man so unterschiedliche Konstrukte wie Monate in einem StringGrid anzeigt. Davon abgesehen hatte ich dazu oben bereits einige Hinweise gegeben.

So sieht es ganz danach aus, als ob du/ihr einfach erwartet, daß euch jemand bei der Hand nimmt und euch quasi den Code vorbetet. Das wird hier niemand tun. Das ist nicht böse gemeint, aber du erweckst wiederholt den Eindruck, als ob du nicht gewillt bist, dich selber zu bemühen.

Zitat:

Zitat von JummiJa (Beitrag 1219262)
Jetzt sitzen wir eben in diesem schlamassel und müssen dieses programm irgendwie umsetzen.

Dafür ist keiner der Forenuser verantwortlich. Daß du hier jemanden findest, der dir Schritt für Schritt erklärt, wie man einen Terminkalender programmiert, bezweifle ich. Ich jedenfalls hätte dazu nicht die geringste Lust, denn ich programmiere, um davon zu leben, und nicht, um irgendwelchen Abitur-Anwärtern eine gute Note zu ermöglichen, die sie am Ende vielleicht gar nicht verdient haben. Wie ich an deiner mangelhaften Rechtschreibung erkennen kann, scheinst du ja nicht nur mit Informatik auf Kriegsfuß zu stehen ...

JummiJa 20. Jun 2013 21:37

AW: Kalender programmieren?
 
Ja, okay, hier kann uns auch keiner helfen...
Wir setzen uns seit 3 wochen damit auseinander und kommen einfach nicht drauf wie wirs machen.
Danke für eure Hilfsversuche...
Klar kommen unsre Probleme davon das wir absolut keine ahnung haben. Vlt bekommen wir es ja hin, oder auch nicht dann ists auch so.

Sorry aber ich habe hier auf hilfe gehofft und nicht auf beleidigungen! Meine mangelnde rechtschreibung liegt daran das ich mich nicht darauf konzentriere wie ich schreibe! Weils hier nicht um meine rechtschreibung geht! Ich muss mich hier nicht für dumm verkaufen lassen nur weil ich kein talent für manche dinge hab!

Perlsau 20. Jun 2013 21:56

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219279)
Wir setzen uns seit 3 wochen damit auseinander und kommen einfach nicht drauf wie wirs machen.

Software-Anwendungen stellen grundsätzlich nicht das Resultat von zufälligen Einfällen dar, sondern werden entwickelt. Wenn dir die Grundlagen dazu fehlen, dann wirst du das nicht hinbekommen. Diesem Manko kann hier keiner der Forenuser abhelfen.

Zitat:

Zitat von JummiJa (Beitrag 1219279)
Sorry aber ich habe hier auf hilfe gehofft und nicht auf beleidigungen! Meine mangelnde rechtschreibung liegt daran das ich mich nicht darauf konzentriere wie ich schreibe! Weils hier nicht um meine rechtschreibung geht! Ich muss mich hier nicht für dumm verkaufen lassen nur weil ich kein talent für manche dinge hab!

Tut mir leid, aber ich verstehe nicht so recht, wovon du dich beleidigt fühlst. Es lag keineswegs in meiner Absicht, dich zu beleidigen, wenngleich es manchmal vorkommen mag, daß Leute sich von schonungsloser Offenheit verletzt fühlen.

Die auffällig fehlerhafte Rechtschreibung habe ich lediglich als Verdachtsmoment genannt, es eben mit einem eher schlechten Schüler zu tun zu haben, der wenig liest und daher auch wenig lernt. Was daran beleidigend sein soll, entzieht sich meiner Kenntnis. Es geht hier sehr wohl auch darum, sich klar und deutlich auszudrücken. Dazu gehört neben der Fähigkeit, ein Anliegen verständlich formulieren zu können, auch eine gute Rechtschreibung, denn fehlerhafter Text, bei dem noch dazu weder auf Groß- und Kleinschreibung noch auf Satzzeichen geachtet wurde, ist weitaus schwerer zu lesen. Für eine ausreichend gute Rechtschreibung benötigt man kein Talent, sondern die Bereitschaft, zu lesen. Eine gute Rechtschreibung bildet sich vor allem durch das Lesen anspruchsvoller Literatur, insbesondere von Sachbüchern, weil die jeweilige Rechtschreibung dabei verinnerlicht wird und zur Andwendung derselben eben keine besondere Konzentration notwendig ist. Konzentrieren muß sich nur derjenige, der wenig liest und daher eine schlechte Rechtschreibung aufweist. Sinn & Zweck der Rechtschreibung ist auch nicht, wie von dir intendiert, eine gute Benotung oder Bewertung, sondern der klare und verständliche Ausdruck eines Gedankens.

Leider ist hier immer noch nirgendwo zu sehen, was du bereits an Code entwickelt hast, um in einem StringGrid Kalender- und/oder Termindaten anzeigen zu lassen. So erhältst du weiterhin keine Hilfestellung.

jobo 20. Jun 2013 22:18

AW: Kalender programmieren?
 
Es ist deutlich und höflich gesagt worden:
Poste den Code, der nicht funktioniert und man könnte Dir helfen. Aber 3 Wochen Gedanken machen Deinerseits ergibt auch hier keine Anhaltspunkte für eine Unterstützung.
Dieses Forum quillt über von Code und Tips, wahrscheinlich würde allein eine gründliche Suche helfen. Die Tränendrüsennummer ist sicher eher kontraproduktiv, also krempel mal die Ärmel hoch und werd mal konkret.

Was die Rechtschreibung angeht:
Natürlich musst Du Dir das nicht annehmen, aber jeder hier hat da so seine Schmerzgrenze und damit musst Du wohl klar kommen (nicht nur hier). Wenn Du klug bist (du machst ja grad Abi), nimm es als Herausforderung!

Das hat was mit Wertschätzung, Respekt und anderen Dingen zu tun.

Hast Du die Zahl im Portal mal gesehen? Über eine Millionen Beiträge. Sagen wir die Hälfte sind Fragen, die andere Hälfte Antworten.
Nicht schlecht oder? Tja und wir sind hier nicht bei FB oder so. Das sind keine Likes! Das sind fundierte Antworten, wenige Leute, die hier viel Zeit reinstecken.

Ok, wahrscheinlich verdrehst Du schon die Augen, falls Du soweit gelesen hast.
Was Du draus machst, ist allein Deine Sache.

Sir Rufo 20. Jun 2013 22:51

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219262)
Monatsansicht, ...

Unser problem liegt vorerst darin die einzelnen daten richtig in die spalten eines stringgrid oder so zu bekommen.

Das ist aber primär ein mathematisches/logisches Problem und erfordert erst mal Denksport.

Nehmen wir mal an, ihr möchtet die Ansicht (für Juni 2013) wie folgt haben
Code:
Mo Di Mi Do Fr Sa So
27 28 29 30 31  1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 1  2  3  4  5  6  7
Gesucht wird also das Datum, was als erstes angezeigt werden soll (hier 27.05.2013).
  1. Wochentag vom 01.06.2013 bestimmen Delphi-Referenz durchsuchenSysUtils.DayOfTheWeek
    (Mo=1, Di=2, ..., So=7)
    Ergebnis = 6
  2. Der Montag vor dem 01.06.2013 ist 5 Tage zurück, also ist das gesuchte Datum der 01.06.2013 - ( Wochentag(01.06.2013) - 1 ) => 27.05.2013 und somit das erste Datum, was in diesem Monatskalender angezeigt werden soll
In Delphi sieht das dann so aus
Delphi-Quellcode:
function GetMonthCalenderStartDate( AMonth, AYear : Word ) : TDate;
begin
  // Erster Tag im Monat
  Result := EncodeDate( AYear, AMonth, 1 );
  // Montag vor dem Datum ermitteln => Starttag für die Kalender-Ansicht
  Result := Result - ( DayOfTheWeek( Result ) - 1 );
end;
Wenn man jetzt das Grid Zelle für Zelle durchläuft - in der Reihenfolge der Datumsfolge - dann braucht man nur noch das Datum um 1 Tag erhöhen und hat immer das passende Datum zu der Zelle
Delphi-Quellcode:
procedure ShowMonthGrid( AGrid : TStringGrid; AMonth, AYear : Word );
var
  LRow, LCol : Integer;
  LDate : TDate;
begin
  LDate := GetMonthCalenderStartDate( AMonth, AYear );

  // 7 Spalten
  AGrid.ColCount := 7;
  // 7 Zeilen (1x Überschrift, 6x Daten)
  AGrid.RowCount := 7;
  // 1 Zeile fixiert (wird von oben gezählt)
  AGrid.FixedRows := 1;

  // in der ersten Zeile stehen die Tagesnamen
  for LCol := 0 to 6 do
    AGrid.Cells[LCol,0] := FormatDateTime( 'ddd', LDate + LCol );

  // Jetzt das eigentliche Kalenderblatt füllen
  for LRow := 1 to 6 do
    for LCol := 0 to 6 do
      begin
        // in die Zelle nur den Monatstag schreiben
        AGrid.Cells[LCol,LRow] := FormatDateTime( 'dd', LDate );
        // 1 Tag weiter
        LDate := LDate + 1;
      end;
end;
BTW: Delphi-Referenz durchsuchenSysUtils.FormatDateTime

PS: Bevor die Frage aufkommt, warum ich 6 Zeilen benutze, dann dieses Blatt mal für Dezember 2013 ausfüllen ;)

p80286 20. Jun 2013 22:52

AW: Kalender programmieren?
 
Zitat:

Zitat von JummiJa (Beitrag 1219279)
Ja, okay, hier kann uns auch keiner helfen...
Wir setzen uns seit 3 wochen damit auseinander und kommen einfach nicht drauf wie wirs machen.

Was habt ihr denn bis jetzt?
Welche Ansätze haben sich denn als Sackgassen erwiesen?
Neben der sehr rudimentär beschriebenen Oberfläche, habt Ihr schon eine Vorstellung davon wie Ihr die Daten speichern wollt?
Welche Möglichkeiten habt Ihr überhaupt?

Soll der Kalender nur von einer Person oder von mehreren genutzt werden?

[OT]
Zitat:

Zitat von JummiJa (Beitrag 1219279)
Meine mangelnde rechtschreibung liegt daran das ich mich nicht darauf konzentriere wie ich schreibe! Weils hier nicht um meine rechtschreibung geht! Ich muss mich hier nicht für dumm verkaufen lassen nur weil ich kein talent für manche dinge hab!

Die meisten von uns verdienen mit Programmierung ihre Brötchen, und da ist es essentiell verständlich und möglichst genau zu formulieren. Die meisten Deiner Aussagen erwecken den Eindruck, daß Du im Vorbeigehen eine ordentliche Benotung mitnehmen willst. Sollte dies nicht der Fall sein, vergessen wir was bisher geschah und fangen noch einmal neu an.

Übrigens kann man mangelndes Talent in gewissen Grenzen durch Arbeit ausgleichen.
[/OT]

Gruß
K-H

targetingsnake 24. Jun 2013 12:50

AW: Kalender programmieren?
 
1. Die Zusammenfassung was JummiJa möchte; hat der schöne Günther schon geschrieben, daher denke ich einige lesen nur Bruchteile dieses Threads und sollten mal den ganzen lesen.
Zitat:

Zitat von Der schöne Günther (Beitrag 1219151)
Dann mach doch jetzt einmal genau fest, was das Ding nun können soll:

Übersicht:
  • Man sieht immer einen kompletten Monat in einer kalendertypischen Ansicht
  • Der anzuzeigene Monat lässt sich wechseln (eins vor/eins zurück)
  • Der Benutzer kann auf einen Tag klicken und bekommt daraufhin angezeigt, welche Termine bereits auf diesem Tag liegen und bekommt die Möglichkeit, einen weiteren Termin für diesen Tag zu erstellen

Fall Termin Anzeigen:
  • Der Benutzer klickt auf einen Tag (dargestellt durch Zahl) im Kalender
  • In einem Bereich darunter werden (z.B. in einer Listbox) aufgelistet, welche Termine an diesem Tag schon bestehen
  • Wird ein Eintrag in dieser Listbox ausgewählt, wird ein Button "Termin löschen" aktiviert.


usw, usw.


Ich weiß sonst nicht, wo sich die konkrete Frage versteckt. Ein Terminplaner ist wirklich nicht ganz trivial (wenn man es richtig machen will).

2. Das Datum kann man relativ einfach über zwei Funktionen auslesen:

Delphi-Quellcode:
Date
und

Delphi-Quellcode:
DecodeDate(Date, Y, M, D);
auslesen.

3. Ich nehme nicht an das JummiJa solche Scheduller/Planner benötigt, da sie eher ein solches Tool entwickeln wollen.

Mit Grüßen,
Targetingsnake

hubblec4 12. Jan 2016 19:22

Praxis Terminplaner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo erstmal und gleich sorry das ich dieses Thema hier nochmal aufwärme.

Aber es war irgendwie erstaunlich zu lesen.
Ich selbst hatte zu der Zeit als der erste Post gemacht wurde, angefangen mir das programmieren mit Lazarus beizubringen.

Gleich das zweite Projekt sollte für eine Praxis ein Terminplaner werden.

Ich muss zugeben ich stand da anfangs auch vor lauter Rätseln.
Nach ca 7 Wochen hatte ich dann eine erste halbwegs funktionierende Software.

Die Datenspeicherung erfolgte damals noch in einer DBF.
Das Programm wird immer noch weiter entwickelt und hat mitlerweile Funktionen wie:
Tag/Wochenansicht, Multiterminvergabe, Mitarbeitermanagment, Arbeitzseiten, Online-Termine und jede menge mehr.

Die Datenbank ist auch recht schnell auf SQL gewechselt, da jeder Mitarbeiter mit seinem Laptop Termine vergeben will/kann.

Nichts desto trotz stosse ich nun langsam an Grenzen und ich muss den Terminplaner nocheinmal von Grund an neuschreiben.
Dabei würde ich natürlich einige sachen verbessern.

@Perlsau
Das Bild von deinem Terminkalender gefällt mir sehr gut.
Was für eine Komponente hast du für die Darstellung genommen.
Was nutz du als Datenspeicherung? (SQL?)


Würde sich ein VirtualStringTree anbieten für die Darstellung? (bin erst vor kurzem auf diese Komponente gestossen und experimentiere da noch ein bisschen)

Anders als der Thema-Verfasser habe ich schon ein wenig Ahnung vom programmieren (von gut sicher noch etwas entfernt). Würde mich also freuen wenn ihr für mich ein paar Anregungen hättet, Kritik vertrage ich bestens. Rechtschreibung... ich versuchs.


Ich habe auch mal ein Bild angehängt, welches ich aber sehr "beschneiden" musste
(Datenschutz und so).
Man sieht aber das StringGrid recht gut.
Spalten einfärben ist kein Problem. Die Felder welche ein "N:" oder "I:" oder "P:" haben werden anders eingefärbt. Ich nutze dazu eben diese "zwei Zeichen(der buchstabe und der doppelpunkt)" um die Celle im onDrawEvent zu identifizieren - gibt es da noch eine andere Möglichkeit?


hubble

Perlsau 12. Jan 2016 19:42

AW: Praxis Terminplaner
 
Zitat:

Zitat von hubblec4 (Beitrag 1326784)
@Perlsau
Das Bild von deinem Terminkalender gefällt mir sehr gut.
Was für eine Komponente hast du für die Darstellung genommen.
Was nutz du als Datenspeicherung? (SQL?)

Das ist ein ganz normales StringGrid bzw. das TjvStringGrid aus den Jedi-Komponenten. Es gibt in meinem Terminator vier Ansichten auf vier TabSheets: Tages-, Wochen-, Monats- und Jahresüberblick. Zugrunde liegt eine Firebird-Datenbank, als DB-Komponenten kommt IbDac zum Einsatz, die Termintabelle sieht so aus:
Code:
CREATE TABLE TERMINE (
    IDX_TERMINE  BIGINT NOT NULL,
    BENUTZER     INTEGER DEFAULT 0 NOT NULL,
    DATUM_START  DATE,
    ZEIT_START   TIME,
    DATUM_ENDE   DATE,
    ZEIT_ENDE    TIME,
    BESCHREIBUNG VARCHAR(200) DEFAULT '' NOT NULL COLLATE UNICODE,
    ERLEDIGT     INTBOOLEAN DEFAULT 0 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
    ALARMEIN     INTBOOLEAN DEFAULT 1 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
    ANLEGER      INTEGER DEFAULT 0 NOT NULL,
    DATUM        TIMESTAMP,
    DAUER        TIME);
Allerdings ist mein Konzept nicht wirklich ausgereift, genügt aber meinen Ansprüchen bzw. denen eines gemeinnützigen Vereins, für den ich das vor bald drei Jahren zu entwickeln begonnen hatte. Heute würde ich vieles anders angehen.

Zitat:

Zitat von hubblec4 (Beitrag 1326784)
Die Felder welche ein "N:" oder "I:" oder "P:" haben werden anders eingefärbt. Ich nutze dazu eben diese "zwei Zeichen(der buchstabe und der doppelpunkt)" um die Celle im onDrawEvent zu identifizieren - gibt es da noch eine andere Möglichkeit?

Das liegt an dir. Irgendwo in deinen Ursprungsdaten, aus denen heraus du dein StringGrid befüllst, steht doch sicher die Information, die du benötigst, um die entsprechende Zelle anders einzufärben. Im Falle einer SQL-Datenbank hätte ich da eine Spalte z.B. mit dem Namen KATEGORIE oder so. Beim Abklappern der Tabelle zum Ausgeben der Werte in ein StringGrid fragst du in OnDrawCell eben einfach diese Spalte in deiner Tabelle ab und zeichnest die entsprechende Zelle dann mit der entsprechenden Farbe.

hubblec4 12. Jan 2016 23:29

AW: Praxis Terminplaner
 
Zitat:

Zitat von Perlsau (Beitrag 1326786)
Das ist ein ganz normales StringGrid(StG) bzw. das TjvStringGrid aus den Jedi-Komponenten.

Ich weis jetzt nicht genau in wie weit ich die Jedi-Komponenten in Lazarus verwenden kann, aber ist das TjvStringGrid schon ein bissl anders als das normale StringGrid?
Du hast in einer Zelle das Datum und weitere Uhrzeiten, hast du da Zellen miteinander verbunden oder wie kann man mehrere zeilen in einer Zelle darstellen... und wenn ja kannn man dann jede Uhrzeit separat anklicken(weitere Termininfos)?


Zitat:

Zitat von Perlsau (Beitrag 1326786)
Es gibt in meinem Terminator vier Ansichten auf vier TabSheets: Tages-, Wochen-, Monats- und Jahresüberblick. Zugrunde liegt eine Firebird-Datenbank, als DB-Komponenten kommt IbDac zum Einsatz, die Termintabelle sieht so aus:
Code:
CREATE TABLE TERMINE (
    IDX_TERMINE  BIGINT NOT NULL,
    BENUTZER     INTEGER DEFAULT 0 NOT NULL,
    DATUM_START  DATE,
    ZEIT_START   TIME,
    DATUM_ENDE   DATE,
    ZEIT_ENDE    TIME,
    BESCHREIBUNG VARCHAR(200) DEFAULT '' NOT NULL COLLATE UNICODE,
    ERLEDIGT     INTBOOLEAN DEFAULT 0 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
    ALARMEIN     INTBOOLEAN DEFAULT 1 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
    ANLEGER      INTEGER DEFAULT 0 NOT NULL,
    DATUM        TIMESTAMP,
    DAUER        TIME);
Allerdings ist mein Konzept nicht wirklich ausgereift, genügt aber meinen Ansprüchen bzw. denen eines gemeinnützigen Vereins, für den ich das vor bald drei Jahren zu entwickeln begonnen hatte. Heute würde ich vieles anders angehen.

TabSheets kannte ich damals noch nicht, bei mir gibt es momentan nur das eine StringGrid was dann jeweils für die Tag oder Wochenansicht angepasst wird. Aber die Idee einer Monatsansicht gefällt mir.
Was deine Firebird-Datenbank angeht, kann ich mir das so ähnlich wie bei SQL vorstellen (Server mit SQL und dann halt SQL befehle)?
Was genau ist die IBDac Komponente(wird wohl nur bei Delphi dabei sein)?

Wenn ich jetzt meine fast 2 jahre alten SQL-Tabellen anschaue kommt mir das Grauen.


Zitat:

Zitat von Perlsau (Beitrag 1326786)
Irgendwo in deinen Ursprungsdaten, aus denen heraus du dein StringGrid befüllst, steht doch sicher die Information, die du benötigst, um die entsprechende Zelle anders einzufärben. Im Falle einer SQL-Datenbank hätte ich da eine Spalte z.B. mit dem Namen KATEGORIE oder so. Beim Abklappern der Tabelle zum Ausgeben der Werte in ein StringGrid fragst du in OnDrawCell eben einfach diese Spalte in deiner Tabelle ab und zeichnest die entsprechende Zelle dann mit der entsprechenden Farbe.

Ok, denke ich habe das soweit verstanden wie du das meinst. Ich lade die Daten aus der SQL-DB mittels eines SQL-befehls und habe dann eine SQLQuery die ich verarbeite(StG befüllen).
Jetzt ist es doch aber so das diese onDrawCell-procedure andauernd aufgerufen wird(habe da mal zum test ein SpinEdit
benutzt, SpinEdit.Value:=SpinEdit.Value+1, und nach nicht mal zwei Minute stand der zähler schon bei einer Million).
Von daher ist es nicht gut wenn der SQL-Server so oft befeuert wird.
(Der SQL-Server ist ein rechner im netzwerk auf den 6 andere rechner zugreifen)

Ich habe mir überlegt die Daten eines Tages aus der DB auszulesen und das nötigste zwischen zuspeichern, in einem array oder record, worauf eben die onDrawCell-procedure schnell zugreifen kann.

Perlsau 13. Jan 2016 01:56

AW: Praxis Terminplaner
 
Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Zitat:

Zitat von Perlsau (Beitrag 1326786)
Das ist ein ganz normales StringGrid(StG) bzw. das TjvStringGrid aus den Jedi-Komponenten.

Ich weis jetzt nicht genau in wie weit ich die Jedi-Komponenten in Lazarus verwenden kann, aber ist das TjvStringGrid schon ein bissl anders als das normale StringGrid?
Du hast in einer Zelle das Datum und weitere Uhrzeiten, hast du da Zellen miteinander verbunden oder wie kann man mehrere zeilen in einer Zelle darstellen... und wenn ja kannn man dann jede Uhrzeit separat anklicken(weitere Termininfos)?

Soweit ich weiß, gibt es die Jedis nur für Delphi, nicht für Lazarus. Übrigens vermeidet man Mißverständnisse hinsichtlich der Entwicklungsumgebung, wenn man in seinem Profil die Version angibt, mit der man arbeitet.

Die mehrzeilige Darstellung hatte ich damals so erreicht, daß erstens RowHeight entsprechend vergrößert wurde und zweitens der AusgabeString (z.B. StringGrid.Cells[4,3]) aus den entsprechenden Strings, die den Termin enthielten, zusammengesetzt wurde, wobei jeder Einzelstring durch ein Chr(13) begrenzt wurde. Soweit ich mich noch erinnere, war ich damals gerade an diesem Projekt dran und habe später dieses Konzept aufgegeben. Inzwischen befindet sich unterhalb des Wochendarstellungs-StringGrids ein zweites Stringgrid mit den Terminen des gewählten Tages. Bei der Monats- und der Jahresübersicht habe ich darauf verzichtet, Einzeltermine darzustellen, sondern lediglich die Tage, an denen Termine stattfinden, gekennzeichnet.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
TabSheets kannte ich damals noch nicht, bei mir gibt es momentan nur das eine StringGrid was dann jeweils für die Tag oder Wochenansicht angepasst wird. Aber die Idee einer Monatsansicht gefällt mir.

TabSheet nennt man eine Seite eines TPageControl.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Was deine Firebird-Datenbank angeht, kann ich mir das so ähnlich wie bei SQL vorstellen (Server mit SQL und dann halt SQL befehle)?

Genau. Firebird ist eine relationale SQL-Datenbank. Wobei der Server wie bei mir auch eine lokale Firebird-Installation sein kann und die Datebank nicht zwingend auf einem physikalischen Server liegen muß. Die dritte Variante wäre dann Firebird Embedded, was keine Firebird-Installation voraussetzt. Die Server-Funktionalität wird dann durch eine DLL bereitgestellt.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Was genau ist die IBDac Komponente(wird wohl nur bei Delphi dabei sein)?

Genau, das sind Datenbank-Komponenten für Firebird und Interbase, die es meines Wissens aber auch für Lazarus gibt.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Wenn ich jetzt meine fast 2 jahre alten SQL-Tabellen anschaue kommt mir das Grauen.

Das ist eine ganz normale Empfindung, wie wir sie wohl alle erleben, wenn wir uns weiterentwickelt haben.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Ok, denke ich habe das soweit verstanden wie du das meinst. Ich lade die Daten aus der SQL-DB mittels eines SQL-befehls und habe dann eine SQLQuery die ich verarbeite(StG befüllen).

Ungefähr so funktioniert das. Je nach Darstellung baust du den SQL-Befehl zusammen, so daß der Befehl immer genau die Daten selektiert, die du für die aktuelle Darstellung benötigst. Wenn du z.B. eine Wochendarstellung hast, die alle Termine sagen wir vom Montag, dem 11.01.2016 bis Sonntag, dem 17.01.2016 anzeigen soll, dann heißt das als SQL-Befehl:
Code:
select * from TERMINE where DATUM >= '11.01.2016' and DATUM <= '17.01.2016';
Oder als als Eintrag im Property Filter: DATUM >= '11.01.2016' and DATUM <= '17.01.2016', wobei die Filtered-Eigenschaft auf True stehen muß. Ich habe hier die zweite Möglichkeit gewählt, da ich die Where-Klausel im Select-Befehl des Queries bereits dafür verwende, nur die Termine des aktuellen Benutzers auszuwählen.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Jetzt ist es doch aber so das diese onDrawCell-procedure andauernd aufgerufen wird(habe da mal zum test ein SpinEdit
benutzt, SpinEdit.Value:=SpinEdit.Value+1, und nach nicht mal zwei Minute stand der zähler schon bei einer Million).
Von daher ist es nicht gut wenn der SQL-Server so oft befeuert wird.
(Der SQL-Server ist ein rechner im netzwerk auf den 6 andere rechner zugreifen)

OnDrawCell wird nur beim Zeichnen des Grids aufgerufen. Bei den heutigen Rechnern merkst du da gar nichts. Das hat nur mittelbar was mit der Datenbank und deren Zugriffsgeschwindigkeit oder mit der Bandbreite des Netzwerks zu tun. Wenn du die Filter-Eigenschaft änderst, findet kein erneuter Zugriff auf die Datenbank statt, es wird lediglich die bereits im Query befindliche Datenmenge gefiltert. Davon abgesehen ändert man nicht ständig im Sekundentakt die Darstellung. Die meisten Leute werden bei Terminkalendern wohl meist die Tagesdarstellung wählen. Beim Eintrag eines neuen Termins – was gewöhnlich auch nicht sekündlich geschieht – wird man wohl die Wochen- oder auch mal die Monatsansicht bemühen. Die Jahresansicht dient dann wohl mehr statistischen Zwecken.

Wenn dort, wo dein Programm zum Einsatz kommt, bereits ein SQL-Server existiert (gemeint ist wohl Microsoft SQL-Server), wäre es natürlich unsinnig, das jetzt mit Firebird lösen zu wollen. Hier wählst du natürlich das DBMS (Datenbankmanagementsystem), das dein Kunde bereits verwendet.

Neben der tabellenförmigen sind übrigens noch weitere Darstellungsalternativen vorstellbar, so z.B. die grafische, die einfach einen Tag oder eine Woche in Balken darstellt, wobei Termine am selben Tag z.B. hintereinander liegen. Wichtig bei Mehrbenutzersystemen ist auch, die Benutzer- und Rechteverwaltung entsprechend zu programmieren, so daß z.B. klar definiert werden kann, wer für wen Termine anlegen darf und wer alle oder nur seine eigenen Termine sehen kann usw.

Zitat:

Zitat von hubblec4 (Beitrag 1326793)
Ich habe mir überlegt die Daten eines Tages aus der DB auszulesen und das nötigste zwischen zuspeichern, in einem array oder record, worauf eben die onDrawCell-procedure schnell zugreifen kann.

Wenn du ein Query hast, das deine Daten enthält, ist das bereits die benötigte Zwischenspeicherung. Es gibt Datenbank-Anwendungen auf Firebird-Basis, die mehrere hundert Benutzer gleichzeitig verkraften, da sollten sechs oder auch 20 Benutzer kein Problem darstellen.

Bei meinen Datenbank-Anwendungen wird restlos alles in der Datenbank gespeichert, auch individuelle Benutzereinstellungen wie Spaltenbreiten, Farben und Fenstergrößen und -positionen. Einzig die Art des Datenbank-Zugriffs – ob Embedded-DB, lokaler DB-Server oder Remote-Zugriff – wird entweder mit zwei drei Aufruf-Parametern geregelt oder über eine Ini-Datei.

hubblec4 13. Jan 2016 09:11

AW: Praxis Terminplaner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Perlsau (Beitrag 1326794)
Die mehrzeilige Darstellung hatte ich damals so erreicht, daß erstens RowHeight entsprechend vergrößert wurde und zweitens der AusgabeString (z.B. StringGrid.Cells[4,3]) aus den entsprechenden Strings, die den Termin enthielten, zusammengesetzt wurde, wobei jeder Einzelstring durch ein Chr(13) begrenzt wurde. Soweit ich mich noch erinnere, war ich damals gerade an diesem Projekt dran und habe später dieses Konzept aufgegeben. Inzwischen befindet sich unterhalb des Wochendarstellungs-StringGrids ein zweites Stringgrid mit den Terminen des gewählten Tages. Bei der Monats- und der Jahresübersicht habe ich darauf verzichtet, Einzeltermine darzustellen, sondern lediglich die Tage, an denen Termine stattfinden, gekennzeichnet.

Also ist es auch nur eine Art optische Sache die du da programmiert hattest, denn einzeln wird man die Strings in der einen Zelle nicht anklicken können?.
Denke aber auch das ich dabei bleiben werde, eine Zelle -> ein Termin.

Zitat:

Zitat von Perlsau (Beitrag 1326794)
Ungefähr so funktioniert das. Je nach Darstellung baust du den SQL-Befehl zusammen, so daß der Befehl immer genau die Daten selektiert, die du für die aktuelle Darstellung benötigst. Wenn du z.B. eine Wochendarstellung hast, die alle Termine sagen wir vom Montag, dem 11.01.2016 bis Sonntag, dem 17.01.2016 anzeigen soll, dann heißt das als SQL-Befehl:
Code:
select * from TERMINE where DATUM >= '11.01.2016' and DATUM <= '17.01.2016';
Oder als als Eintrag im Property Filter: DATUM >= '11.01.2016' and DATUM <= '17.01.2016', wobei die Filtered-Eigenschaft auf True stehen muß. Ich habe hier die zweite Möglichkeit gewählt, da ich die Where-Klausel im Select-Befehl des Queries bereits dafür verwende, nur die Termine des aktuellen Benutzers auszuwählen.

Jupp so mache ich das auch und was SQL angeht bin ich auch recht fit geworden mit der Zeit. Meine SQL Befehle sind manchmal länger als eine DINA4 seite :-) (nicht für den Terminplaner)

Zitat:

Zitat von Perlsau (Beitrag 1326794)
OnDrawCell wird nur beim Zeichnen des Grids aufgerufen. Bei den heutigen Rechnern merkst du da gar nichts. Das hat nur mittelbar was mit der Datenbank und deren Zugriffsgeschwindigkeit oder mit der Bandbreite des Netzwerks zu tun. Wenn du die Filter-Eigenschaft änderst, findet kein erneuter Zugriff auf die Datenbank statt, es wird lediglich die bereits im Query befindliche Datenmenge gefiltert. Davon abgesehen ändert man nicht ständig im Sekundentakt die Darstellung. Die meisten Leute werden bei Terminkalendern wohl meist die Tagesdarstellung wählen. Beim Eintrag eines neuen Termins – was gewöhnlich auch nicht sekündlich geschieht – wird man wohl die Wochen- oder auch mal die Monatsansicht bemühen. Die Jahresansicht dient dann wohl mehr statistischen Zwecken.

Ich habe mal eben ein kleines Test-proggi geschrieben und war dann doch etwas erstaunt das sich das SpinEdit(SpE) nicht von alleine dauernd erhöht, sondern wirklich nur wenn man im StG etwas anklickt.
Ich weis aber das mein damaliger SpE-Test ohne das ich in dem Programm etwas angeklickt hatte erhöht hat.
Vielleicht liegt es ja an der Lazarus version wo das früher mal nicht so war.
Dennoch: bei meinem Terminplaner(habe das SpE da mal schnell reinprogrammiert) wenn man etwas anklickt
ist man ganz schnell bei mehreren tausenden aufrufen von onDrawCell und da jedes mal die Datenbank abfragen... mmh, macht mir irgendwie Bauchschmerzen. (und ja es wird sehr viel in dem Terminplaner rumgeklickt)



Zitat:

Zitat von Perlsau (Beitrag 1326794)
Wenn dort, wo dein Programm zum Einsatz kommt, bereits ein SQL-Server existiert (gemeint ist wohl Microsoft SQL-Server), wäre es natürlich unsinnig, das jetzt mit Firebird lösen zu wollen. Hier wählst du natürlich das DBMS (Datenbankmanagementsystem), das dein Kunde bereits verwendet.

ES läuft dort XAMPP mit MySQL5.5, bin damit auch recht zufrieden und es war damals für mich ein guter Einstieg in die SQL-Materie.


Zitat:

Zitat von Perlsau (Beitrag 1326794)
Wenn du ein Query hast, das deine Daten enthält, ist das bereits die benötigte Zwischenspeicherung. Es gibt Datenbank-Anwendungen auf Firebird-Basis, die mehrere hundert Benutzer gleichzeitig verkraften, da sollten sechs oder auch 20 Benutzer kein Problem darstellen.

Wenn ich den SQL Befehl abfeuer und dann die Query befüllt zurück bekomme und dann das StG befülle, dann ist meine Procedure beendet und die Query geht ja dann wieder verloren oder wird durch eine andere aktion neu befüllt, von daher denke ich ist das kein "Zwischenspeicher" in dem sinne.

Zitat:

Zitat von Perlsau (Beitrag 1326794)
Bei meinen Datenbank-Anwendungen wird restlos alles in der Datenbank gespeichert, auch individuelle Benutzereinstellungen wie Spaltenbreiten, Farben und Fenstergrößen und -positionen. Einzig die Art des Datenbank-Zugriffs – ob Embedded-DB, lokaler DB-Server oder Remote-Zugriff – wird entweder mit zwei drei Aufruf-Parametern geregelt oder über eine Ini-Datei.

Ja denke auch das es Sinn macht alles was geht an Daten in die DB zu übertragen.

Jumpy 13. Jan 2016 10:38

AW: Kalender programmieren?
 
Nur mal so aus Neugier. Da ja mehrere Benutzer den Kalender gleichzeitig nutzen sollen, wie hast du das mit der Aktualisierung geregelt? Wenn Nutzer A für Dienstag 9 Uhr einen Termin anlegt, wann taucht das bei Nutzer B auf dem Schirm auf?

Zur Datenhaltung werden dir viele hier empfehlen diese (wie du das planst) in einer geeigneten Struktur vorzuhalten, das ist auf jeden Fall sinnvoll. Das StringGrid oder der VST sollte dann nur der Anzeige dienen.
Du kannst dabei schon die Query zur Datenhaltung verwenden, wenn du sie nicht nur lokal in deiner "FülleMeinStringGrid" Prozedur verwendest, sondern als globales Elemet auf der Form (oder DataModul) hast. Oder du verwendest das Lazarus-Äquivalent eines TClientDatasets.

hubblec4 13. Jan 2016 13:10

AW: Kalender programmieren?
 
Zitat:

Zitat von Jumpy (Beitrag 1326823)
Nur mal so aus Neugier. Da ja mehrere Benutzer den Kalender gleichzeitig nutzen sollen, wie hast du das mit der Aktualisierung geregelt? Wenn Nutzer A für Dienstag 9 Uhr einen Termin anlegt, wann taucht das bei Nutzer B auf dem Schirm auf?

Da dies mein zweites Projekt war(eigentlich das erste richtige für eine Firma) und die Ansprüche anfangs sehr klein waren gabs dazu nicht wirklich eine Funktion.
Das aktualisieren der Termine bei Anwender B geschah damit, wenn er zum beispiel einen anderen Tag aufrief oder die Tagansicht in die Wochenansicht wechselt.
Später kam dann ein Button hinzu auf den die Angestellten drücken können um die Ansicht zu aktualisieren.
Ich hatte überlegt das ganze mit einem Thread mal zu automatisieren.
Desweiteren gibt es aber jedesmal eine Prüfung wenn ein Termin angelegt werden soll.
Bei Anwender A ist die Zelle noch leer, aber Anwender B hat schon einen Termin gemacht, dann bekommt Anwender A diesen Hinweis und die Ansicht aktualisiert sich und der Termin ist dann für Anwender A auch sichtbar.


Zitat:

Zitat von Jumpy (Beitrag 1326823)
Zur Datenhaltung werden dir viele hier empfehlen diese (wie du das planst) in einer geeigneten Struktur vorzuhalten, das ist auf jeden Fall sinnvoll. Das StringGrid oder der VST sollte dann nur der Anzeige dienen.
Du kannst dabei schon die Query zur Datenhaltung verwenden, wenn du sie nicht nur lokal in deiner "FülleMeinStringGrid" Prozedur verwendest, sondern als globales Elemet auf der Form (oder DataModul) hast. Oder du verwendest das Lazarus-Äquivalent eines TClientDatasets.

Ok danke, gibt mir das Gefühl doch nicht ganz blöde zu sein :-)
Die Query als Globales Element wäre sicher auch ok, aber immer wenn ich mich belesen habe heist es, Globale Variablen seien ein schlechter programmierstil.

Bis jetzt nutze ich ein unsichtbares StG in dem ich zum Beispiel die Farben der Therapeuten ablege oder deren Level, da diese Eigenschaften oft benutzt werden, und so muss ich nicht jedesmal auf die DB zugreifen.
Denke aber das ein unsichtbares StG von der Performance her nicht unbedingt super geeignet ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz