Ok dann gebe ich auch noch meinen Senf dazu.......
Ich schreibe jetzt hier nur mal was mir beim überfliegen so aufgefallen ist
- Du hast leere try Finally Blöcke. Wozu sollen die gut sein?
- Gewöhne Dir an Rückgaben von Funktionen auch auszuwerten, macht Deinen Code sehr viel robuster. zb. QueryPerformanceFrequency etc
- EventRoutinen immer so kurz wie möglich halten. Bsp:
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject); // Messung Intervall
begin
Timer2.Enabled := false;
UpdateVisualData(now);
Timer2.Interval := CalcTimerInterval(iOneSecond);
Timer2.Enabled := true;
end;
procedure TForm1.UpdateVisualData(const Present: TDateTime); // Update Form
var
Present: TDateTime;
Year, Month, Day, Hour, Min, Sec, MSec: Word;
Zeit: string;
begin
SysUtils.DecodeDate(Present, Year, Month, Day);
Label1.Caption := 'Der heutige Tag ist der ' + DezInRoem(IntToStr(Day)) + ' des ' + DezInRoem(IntToStr(Month)) + '. Monates ' +
' des Jahres ' + DezInRoem(IntToStr(Year));
SysUtils.DecodeTime(Present, Hour, Min, Sec, MSec);
Label2.Caption := DezInRoem(IntToStr(Hour)) + ' Stunden, ' + DezInRoem(IntToStr(Min)) + ' Minuten und ' + DezInRoem(IntToStr(Sec)) +
' Sekunden und ' + DezInRoem(IntToStr(MSec)) + ' Milisekunden';
Label4.Caption := DezInRoem(IntToStr(Hour));
Label5.Caption := DezInRoem(IntToStr(Min));
Label6.Caption := DezInRoem(IntToStr(Sec));
Label7.Caption := DezInRoem(IntToStr(MSec));
Zeit := timeToStr(Time);
Panel1.Caption := Zeit;
StatusBar1.Panels[0].Text := timeToStr(Time);
StatusBar1.Panels[1].Text := FormatDateTime('"Heute ist "dddd," der "d.mmmm yyyy"', Date);
DecodeTime(Time, Hour, Min, Sec, MSec);
TrackBar1.Position := Sec;
end;
So kannst Du jederzeit die Form mit UpdateVisual(now) updaten;
Wie z.B in deinem Button2Click
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
freq: Int64;
startTime: Int64;
endTime: Int64;
begin
Timer2.Enabled := false;
if QueryPerformanceFrequency(freq) and
QueryPerformanceCounter(startTime) then
begin
// Befehlesfolge deren Zeitdauer bestimmt werden soll
UpdateVisualData(now);
QueryPerformanceCounter(endTime);
ShowMessage('Die Routine benötigte etwa ' + IntToStr((endTime - startTime) * 1000 div freq) + ' ms');
end
else
begin
// Hier sollte eigentlich untersucht werden was nicht gegangen ist getLastError oder so
ShowMessage('OOPS');
end;
Timer2.Enabled := true;
end;
Ach ja schau Dir auch noch die System.DateUtils; an. Da sind einige interessante Routinen rund um Time/Date drin