Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Uhrzeit anzeige


henny - Di 30.06.09 13:34
Titel: Uhrzeit anzeige
Hallo zusammen ich möchte ein Programm schreiben das im Hintegrund läuft und dem Benutzer jede Stunde mit eine MessageBox die Uhrzeit anzeigt!
Das Programm soll auf die Systemuhrzeit zugreifen!
Kann mir jemand sagen wie ich das programmieren könnte?

Danke schonmal im Vorraus


Nersgatt - Di 30.06.09 13:36

Setze einen Timer auf ein Formular, frage alle 30 Sekunden die Uhrzeit ab, und wenn sich die Stunde geändert hat, gibst Du die Messagebox aus.


henny - Di 30.06.09 13:40

Und wie frage ich die Uhrzeit ab?
Und wie mache ich das das Programm im Hintergrund läuft?


Nersgatt - Di 30.06.09 13:47

Und was heißt "Uhrzeit" nochmal auf Englisch? :roll:


jaenicke - Di 30.06.09 14:27

Und im Hintergrund: Fenster verstecken und nen Icon neben der Uhr in der TNA [http://www.delphi-library.de/viewtopic.php?t=8294] anzeigen.


ffgorcky - Di 30.06.09 14:45

user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Und was heißt "Uhrzeit" nochmal auf Englisch? :roll:

Genau übersetzt:
Time oder Clock

Wie Du die Systemzeit abfragst, erfährst Du z.B. im Thread Delphi-Forum.de » Windows API » Systemzeit rausfinden? [http://www.delphi-forum.de/viewtopic.php?t=7261&start=0&postorder=asc&highlight=systemzeit+abfragen]
Dann könntest Du dann dann ja - bei einer sekündlichen Timer-Abfrage - so schreiben:

Delphi-Quelltext
1:
2:
if FormatDateTime('mm:ss', Now)='00:00' then
              ShowMessage('Es ist mal wieder eine volle Stunde rum!');


jaenicke - Di 30.06.09 15:21

So oft muss der Timer ja vielleicht gar nicht laufen. Ich würde mir eher die vorherige Stunde merken und schauen wann die nächste begonnen hat. Die Stringumwandlung ist doch überflüssig.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
CurrentHour: Integer;

...

CurrentHour := Floor(Time * 24);

...

// Timer:
if Floor(Time * 24) > CurrentHour then
begin
  ...
Floor ist aus der Unit Math.


henny - Di 30.06.09 18:48

Und wie mache ich das dann das das Programm im Hintergrund läuft (unten rechts neben der Uhr)?


nagel - Di 30.06.09 18:51

Hättest einfach nach Suche in: Delphi-Forum SYMBOL NEBEN DER UHR suchen können :P .

Oder Suche in: Delphi-Forum TNA.


jaenicke - Di 30.06.09 19:24

Ich habe das doch sogar schon verlinkt gehabt... :(
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und im Hintergrund: Fenster verstecken und nen Icon neben der Uhr in der TNA [http://www.delphi-library.de/viewtopic.php?t=8294] anzeigen.


henny - Mi 01.07.09 16:41

O.K. ich habs mir runtergeladen was muss ich jetzt machen?


jaenicke - Mi 01.07.09 16:44

Wenn du CoolTrayIcon meinst: Installieren bzw. bei Turbo Delphi manuell erstellen...


henny - Mi 01.07.09 17:05

Ja und wie installiere ich CoolTrayIcon ?


elundril - Mi 01.07.09 17:10

1) Cooltrayicon_d6.dpk finden
2) auf auf CoolTrayIcon_D6plus.dpk doppelt klicken
3) in delphi auf compile klicken
4) auf installieren klicken
5) spass haben mit CTI


jaenicke - Mi 01.07.09 17:10

Sorry, aber ich hab mittlerweile echt keine Lust mehr dir zu antworten. Du stellst immer wieder Fragen, die man relativ einfach auch selbst finden kann, auch als Anfänger. Ok, kann ja sein, dass mal jemand etwas begriffsstutziger ist, da hab ich halt trotzdem geantwortet.
Aber hier liegt eine install.txt dabei, in der das genau steht wie das geht...

Und falls du Turbo Delphi hast, dann musst du die Komponente wie gesagt manuell erstellen [http://www.delphi-treff.de/tutorials/vcl/komponenten-zur-laufzeit-erstellen/], da kann man keine Komponenten installieren.


Andreas L. - Mi 01.07.09 17:20

Bei TurboDelphi gibt es bereits die Komponente TTrayIcon, es muss als nicht CoolTrayIcon installiert werden. Ansonsten gibts noch das hier: http://www.delphi-treff.de/tipps/applikation/wiki/Anwendung%20im%20SysTray%20anzeigen/


henny - Mi 01.07.09 17:33

O.K. ich gibs zu ich war zu ..... zum installieren.
Habs jetzt aber geschafft! :lol:
Und wie programmiere ich des ding dann?


jaenicke - Mi 01.07.09 17:35

Dass da eine .chm Hilfedatei dabei ist, hast du übersehen?


elundril - Mi 01.07.09 17:37

bist du dir sicher das programmieren das richtige ist? Schon mal stricken oder so probiert?

Und in dem Ordner Demos (ist im gleichen Ordner wie CoolTrayIcon_D6plus.dpk) gibts schöne demos dazu, einfach mal ausführen und den quelltext ansehen.

Weiters gibts in der Delphi-Praxis ein sehr schönes tutorial zu CTI in deren ihrer Knowledgebase. Einfach mal dort hineinschauen ;)

lg elundril


henny - Mi 01.07.09 17:37

Sorry :oops:


henny - Mi 01.07.09 18:08

Hat alles super keklappt bis auf eins:
wenn das Programm im Infobereich ist und eine Stunde rum ist passiert nichts wieso?


jaenicke - Mi 01.07.09 18:10

Welchen Code hast du denn jetzt in deinem Programm drin?


henny - Mi 01.07.09 18:23


Delphi-Quelltext
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:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CoolTrayIcon, StdCtrls, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    CoolTrayIcon1: TCoolTrayIcon;
    PopupMenu1: TPopupMenu;
    Anzeigen1: TMenuItem;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Anzeigen1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 coolTrayIcon1.iconvisible := true;
 form1.hide;
 timer1.enabled := true;
end;

procedure TForm1.Anzeigen1Click(Sender: TObject);
begin
form1.show;
timer1.Enabled := false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FormatDateTime('mm:ss', Now)='18:12' then
              ShowMessage('Es ist mal wieder eine volle Stunde rum!');
              timer2.enabled := true;
              timer1.Enabled := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer2.Enabled := false;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
if FormatDateTime('mm:ss', Now)='18:12' then
              ShowMessage('Es ist mal wieder eine volle Stunde rum!');
              timer2.Enabled := false;
              timer1.Enabled := true;
end;

end.

Sorry ich weiß nicht wie das geht das der Code in so nem ding zum scrollen drin ist

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mi 01.07.09 18:31

user profile iconhenny hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
if FormatDateTime('mm:ss', Now)='18:12' then                    
Ist dir denn klar was der Code macht?

user profile iconhenny hat folgendes geschrieben Zum zitierten Posting springen:
Sorry ich weiß nicht wie das geht das der Code in so nem ding zum scrollen drin ist
Ich muss zugeben, dass in der Hilfe im Forum [http://www.delphi-forum.de/help_schreiben_bbcodes_source.html&sub=,19,27,32] die Kategorie etwas unglücklich bezeichnet ist. Wenn du einen so formatierten Beitrag zitierst, siehst du es z.B. auch. Nämlich:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG49681fa489931e7169f80538c37d4af3}</span></span>                    


henny - Mi 01.07.09 18:38

Nicht ganz was macht der Code?


jaenicke - Mi 01.07.09 18:43

Siehe Hilfe:
http://docs.codegear.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/DE/html/delphivclwin32/SysUtils_FormatDateTime@string@TDateTime.html
Die Minuten und Sekunden der aktuellen Uhrzeit werden mit '18:12' verglichen. Ausgelöst würde das also genau z.B. um 18:18:12 Uhr, also bei 12 Sekunden nach 18:18 Uhr.


henny - Mi 01.07.09 18:55

Und wie mache ich das er die Zeit 18:59 Uhr oder so abfrägt?


jaenicke - Mi 01.07.09 18:57

Dafür musst du wohl auf Stunde und Minute testen. Und wie du FormatDateTime dazu bringst, sagt dir die verlinkte Hilfe.
Und zudem darfst du die Anzeige nicht mehrfach auslösen, wenn der Timer auf unter einer Minute gesetzt ist.

Und wie das am besten geht habe ich ganz am Anfang schon geschrieben... :roll:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
So oft muss der Timer ja vielleicht gar nicht laufen. Ich würde mir eher die vorherige Stunde merken und schauen wann die nächste begonnen hat. Die Stringumwandlung ist doch überflüssig.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
CurrentHour: Integer;

...

CurrentHour := Floor(Time * 24);

...

// Timer:
if Floor(Time * 24) > CurrentHour then
begin
  ...
Floor ist aus der Unit Math.


henny - Mi 01.07.09 19:22

Vielen Vielen dank an alle die mir geantwortet haben es hat alles bestens geklappt!