Entwickler-Ecke

Sonstiges (Delphi) - Delphi Typenkonflikt


IronBull - Do 29.10.09 01:26
Titel: Delphi Typenkonflikt
Hallo Leute,

ich habe eine Statusbar unten in meinem Formular. Dort sollen die aktive offene Datei, das Datum und die Uhrzeit dargestellt werden.

1. Frage: Die Uhrzeit ändert sich, deshalb muss das Formular aktualisiert werden mit einem Ereignis. Welches oder besser welche Alternative kennt ihr, dass sich immer das Datum unten bei Minutenwechseln ändert?

2. Frage: Die ganze Geschichte kann ich nicht realisieren, weil es einen Typenkonflikt gibt.

Bsp.:

StatusBar1.Panels.Items[0]:='bla';

Funktioniert nicht, weil ich versuche mit einem String eine TStatusPanel zu füllen. Wie kriege ich das nun rein?
Bei ListBoxen ist das ähnlich, da hatte ich erst

var item:TListBox;

geschrieben gehabt und konnte irgendwie zuweisen(ist eine ganze Weile her).

mfg. IronBull


HelgeLange - Do 29.10.09 02:09

Du kannst Application.OnIdle nutzen (ist ein event), aber das kommt ziemlich oft rein, öfters als Du das brauchst für eine Uhr.
Du kannst auch einen timer nehmen und Dir jede Sekunde ein Event werfen und die aktuelle Uhrzeit dann reinsetzen.


platzwart - Do 29.10.09 02:34

Nunja, du versuchst ja schließlich auch dem OBJEKT einen String zuzuweisen, was natürlich nicht funktionieren kann.

user profile iconIronBull hat folgendes geschrieben Zum zitierten Posting springen:

StatusBar1.Panels.Items[0]:='bla';


Anstattdessen das:


Delphi-Quelltext
1:
StatusBar1.Panels.Items[0].Text:= 'bla';                    


Apuch - Do 29.10.09 02:54

user profile iconIronBull hat folgendes geschrieben:
1. Frage: Die Uhrzeit ändert sich, deshalb muss das Formular aktualisiert werden mit einem Ereignis. Welches oder besser welche Alternative kennt ihr, dass sich immer das Datum unten bei Minutenwechseln ändert?


Ein Timer-Event ist das einfachste (TTimer unter System in Delphi7). Wenn es wirklich nur aller Minuten sein soll, dann ist der rechenzeitliche Aufwand nahe Null.

MfG

Moderiert von user profile iconNarses: Zitat repariert.


IronBull - Do 05.11.09 13:18

Vielen Dank für die Antworten!
Hat geholfen :D


IronBull - So 08.11.09 19:40

Ok funktioniert bisher alles, außer das Datum spinnt ein wenig. Mein System zeigt mir das korrekte Datum und die Uhrzeit an. Nur wird beim Datum in Delphi angezeigt: 30.12.1899. Habe bei google geschaut, aber finde nichts bzw. bin nicht in der Lage nach dem Stichwort zu suchen

lg. ironbull


jaenicke - So 08.11.09 20:11

Dann ist die Datumsvariable nicht initialisiert. Wenn du das aktuelle Datum (Date) nehmen würdest, würde das auch klappen. Aber wenn du den Quelltext geheim halten möchtest, kann da auch niemand etwas genaueres dazu sagen...

Bzw. was meinst du mit "in Delphi"?!? Drück dich doch einmal bitte etwas deutlicher aus...


IronBull - So 08.11.09 20:56

Entschuldigung, den Code hatte ich vergessen. Ich dachte das ist so eine Standardantwort :D

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Timer1Timer(Sender: TObject);
var Zeit:TTime;
begin
Zeit:=GetTime();
StatusBar1.Panels.Items[2].Text:='Uhrzeit: '+TimeToStr(Zeit);
end;

procedure TForm1.FormCreate(Sender: TObject);
var Datum:TDate;
begin
Timer1.Enabled:=true;
StatusBar1.Panels.Items[1].Text:='Datum: '+ DateToStr(Datum);
end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.


jaenicke - So 08.11.09 20:59

Tja, da habe ich die Antwort ja schon gegeben...
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dann ist die Datumsvariable nicht initialisiert.
Vergleich mal die beiden Quelltexte für Zeit und Datum...

Zudem: Was macht GetTime und wozu die zusätzlichen Variablen? Nimm doch z.B. Date bzw. now direkt.


IronBull - So 08.11.09 21:05

Hehe ich wusste das das mit der "zusätzlichen Variable" kommen wird :D
Ich habe schon gesehen, mist. Danke für den Hinweis.
Hier nochmal für die die später irgendwann bei Google danach suchen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels.Items[2].Text:='Uhrzeit: '+TimeToStr(GetTime());
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=true;
StatusBar1.Panels.Items[1].Text:='Datum: '+ DateToStr(Date);
end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.


jaenicke - So 08.11.09 21:12

user profile iconIronBull hat folgendes geschrieben Zum zitierten Posting springen:
Hehe ich wusste das das mit der "zusätzlichen Variable" kommen wird :D
Wobei, um das vielleicht noch klarzustellen, das nicht so gemeint war, dass zusätzliche Variablen grundsätzlich schlecht sind. Das kann durchaus die Übersicht erhöhen.

Zwei Bedingungen müssen dafür aber erfüllt sein, damit solche Variablen sinnvoll ist:
Erstens sollte eine Variable nicht einfach eine andere ersetzen (also statt Date einfach Datum mit dem selben Inhalt). Heißt: es muss auch eine Vereinfachung da sein, z.B. das Ergebnis einer Berechnung in der Variable statt diese Berechnung direkt irgendwo einzusetzen.
Zweitens sollten die Variablen gut bezeichnet sein. Also z.B. CurrentDate oder sowas und nicht einfach Datum.