Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erinnerungsfunktion (https://www.delphipraxis.net/15236-erinnerungsfunktion.html)

marc.beeh 24. Jan 2004 19:13


Erinnerungsfunktion
 
Hallo,
ich möchte in ein Programm eine kleine "Erinnerungsfunktion" integrieren. Das bedeutet, man gibt eine Uhrzeit und einen Termin-Namen ein und zu der eingegebenen Zeit erscheint dann zum Beispiel ein Info-Fenster. Ich weiß, das ist eine einfaches Problem, aber ich finde da einfach nicht den richtigen Ansatz....

Anänger 24. Jan 2004 20:06

Re: Erinnerungsfunktion
 
Ich bin zwar Anfänger, aber ich probiers mal

Ich habe dir erstmal nur die Schritte erklärt, um dir es nicht zu einfach zu machen. :twisted:
Wenn du dabei noch Hilfe brauchst gehe ich natürlich ins Detai. :wink:



Ich nehme mal an, du willst mehrere Termine eingeben können und sie sollen in einer Datenbank gespeichert werden.

Also solltest du erstmal die Datenbank herrichten und sie im Programm mit dem Table anmelden.
Daraufhin währe es nett, wenn du die Termine mit Hilfe von einem DBMemo alle Termine anzeigen lässt.

Nun kannst du die Eingabe der Termine programmieren:
Entweder mit hilfe von Eingabeobjekten wie Edit, Combobox etc. und einigen Anweisungen
Oder, was einfacher währe es einfach mit DB-Objekten zu machen.

Du musst allerdings darauf achten, dass die Datum und Uhrzeiteingabe ín dem richtigen Format (standartmäßig dd,mm,jjjj) eingegeben wird.

Dann musst du mit dem Timer am besten mit dem Interval 1000 prüfen, ob das Datum und die Uhrzeit korrekt ist. Wenn das der fall ist kann sich ja ein Shortmessage mit dem Termininhalt öffnen.

Was ich bis jetzt auch nur von anderen Programmen gesehen habe ist, dass sie das Programm im Hintegrund weiter laufen lassen haben, wodurch dich das Programm auch erinnert, wenn es scheinbar gar nicht offen war.
So etwas währe doch auch ganz nett. :thuimb:

marc.beeh 24. Jan 2004 22:34

Re: Erinnerungsfunktion
 
Danke erstmal :)
Also ich bin ein absoluter Einsteiger und habe noch nie etwas mit der BDE gemacht. (Was nicht heißt, das mich eine Problemlösung, die darauf zurückgreift nicht irgendwie reizen würde.)
Aber ich muss jetzt einfach mal ganz dumm fragen: Wie komplizier ist das mit der Datenbank? Wenns net allzu kompliziert ist, wie geht das genau?

Minz 25. Jan 2004 01:32

Re: Erinnerungsfunktion
 
Eingabe aus Editfeld in Zeitangabe umwandeln:
Delphi-Quellcode:
var termin: TDateTime;

termin:=strtotime(edit1.text);
Dann könntest du mit einem Timer arbeiten, der jede Sekunde prüft:

Timer1.OnTimer:
Delphi-Quellcode:
var jetzt: TDateTime;

jetzt:=strtotime(timetostr(now));
if jetzt>=termin then showmessage('Erinnerung');
Vom Prinzip zumindest :), musst mal in die Hilfe schauen, habs nicht überprüft

Anänger 25. Jan 2004 21:05

Re: Erinnerungsfunktion
 
Woführ DBE steht, weiß ich leider gar nicht,(Borland Database Engine?)
aber ich denke du meintest allgemein Datenbanken.

Das wichtigste ist in diesem fall ein Table, welches direkt mit der Datenbankdatei verknüpft ist/wird und ich dir in dieser Message erklären werde.

Es gibt zwei möglichkeiten eine Datenbank zu erstellen:
Einmal mit dem Programm 'Datenbankoberfläche' welches beim Delphi dabei ist, Oder sie zu erstellen, wenn das Programm gestartet wurde.

Ich gehe jetzt nur darauf ein, wie man es zur Laufzeit macht, da dieses oft geeigneter und viel besser zu erklären ist.

Hier einfach der SourceCode mit einigen Hinweisen, wie man eine Datenbank generiert und aktiviert:

Delphi-Quellcode:
with Table1 do {Zwischen den folgenden begin und end wird nur mit dem
                Table gearbeitet.}
begin
  Active := False; { Hier wird die Table- Komponente deaktiviert }

  { Zuerst den Tabellentyp beschreiben und die Tabelle benennen }
  DatabaseName := 'C:\';{Der Ort, oder auch Pfad genannt, in dem
                             sich die Datenbank befinden soll}
  TableType := ttParadox; {Die Art der Tabelle}
  TableName := 'Datenbank';{Der Name, den die Datenbank erhalten soll}

  { Da das Table ist wie der Name schon sagt eine Tabelle
    Hier erstellst du dir die Spalten}
  with FieldDefs do
  begin
    Clear;
    Add('Feldname', ftInteger{der Typ des Inhaltes}, 0, True);
    Add('Feldname2', ftString, 30, False);
  end;

  { Nun ist alles definiert. Die Tabelle kann erzeugt werden. }
  CreateTable;

  {Als letztes muss die Tabelle nurnoch geöffnet werden}
  Active:=True;
end;
Du kannst denSourceCode direkt zum Test, am besten in eine Leere Anwendung mit einem Table (um nichts zu versauen).kopieren.
Achte nur darauf, wo du sie speicherst!(DatabaseName)

Außerdem sollte in dem OnClose-Ereignis der Form1 unbedingt das Table wieder deaktiviert werden!(Table1.Active:=False;)

Später, wenn ich dir noch die DB-Objekte erklärt habekannst du einzelne Anweisungen solltest du einfach ausprobieren, wie der Computer reagiert, wenn du z.B. Statt True, False eingibst.

marc.beeh 25. Jan 2004 21:28

Re: Erinnerungsfunktion
 
Danke dir. Ich habe mich jetzt aber entscheiden, doch erstmal eine etwas einfachere Lösung zu wählen.
Ich denke es ist sinvoller alles Schrittweise zu machen, als gleich noch mit einer Datenbank anzufangen.
Aber ich werde sicherlich später auf diesen Lösungsansatz zurückkommen. :)

czapie 25. Jan 2004 21:43

Re: Erinnerungsfunktion
 
Hallo,
ich denke auch, dass man sich zum Anfang nicht gleich mit einer Db kloppen sollte.
Aber das ist eine gute Möglichkeit die Arbeit mit (sequentiellen) Dateien zu üben, in denen
du deine Erinnerungen, als ADT z.B., speicherst. Auch könntest du die Erinnerung als ein neues Formular anzeigen, und dich dabei gleich mit dem Verwenden eigener Units vertraut machen.

Das alles sind Aspekte zu denen du hier im Forum genug Fragen und Antworten findest, aber ansonste eigentlich auch überall anders im Netz oder der Delphi-Hilfe.

Viel Erfolg :cyclops:

Czapie.

Robert_G 25. Jan 2004 22:03

Re: Erinnerungsfunktion
 
Hi Marc.

Also es wäre schon ein krasser Schritt für dein Vorhaben eine DB zu benutzen, aber die BDE???
Du müsstest das Ding auf jedem Rechner installieren, auf dem dein Tool laufen soll.

Ich schlage die folgenden Weg vor:

1. Speichere deine Einträge in einer INI ab ( Hier im Forum suchenINI ).
Jede Erinnerung eine Section.

2. Sauge dir diese Unit.
(Du musst in der Unit "TaskSched" noch Variants der Uses-Clause hinzufügen:
Delphi-Quellcode:
Uses MsTask,
  Classes,
  SysUtils,
  Variants;
)

Damit hast du Zugriff auf den Windows-Taskscheduler.
Die beiliegende Demo erklärt mit relativ wenig Code wie man Tasks erstellt, ändert, löscht, ...

3. Suche mal , wie man herausfindet ob ein Programm schon einmal läuft ( z.B. Toms' Linksammung) und wie du Parameter verwenden kannst, die an dein Programm übergeben werden ( Hier im Forum suchenparamstr )
Dadurch kannst du Tasks erstellen, die zur angegebenen Zeit dein Programm starten und ihm den Erinnerungstext als Parameter übergeben.
Sie sollten irgendwie eindeutig zu deiner Anwendung gehören z.B.: Name ist 'Marcs_Reminder_'+ fortlaufende Nummer + ' - ' + erste paar Zeichen der Meldung.
Dein Programm soll jetzt prüfen ob es schon läuft, wenn ja braucht es nur den Errinerungstext zeigen, wenn nicht kannst du es ja starten und in die TNA packen (wie das geht steht auch in der Linksammlung).


Ich hoffe ich habe dich jetzt nicht überladen, aber wenn du hier in der DP und auf den Links suchst wirst du schon alle Infos zusammenbekommen.
Den Tasksched. empfehle ich dir, weil du damit einfach Meldungen relativ zur Systemzeit bringen kannst auch wenn dein Programm nicht gestartet wurde.

Versuche möglichst viel alleine zu schreiben, aber bevor du eine Gehirnerschütterung bekommst ( :wall: ) -> Es gibt ja noch die DP. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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