Einzelnen Beitrag anzeigen

Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Programm Wurzelberechnung nach Heron

  Alt 19. Jan 2017, 17:16
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
Fritz Westermann
  Mit Zitat antworten Zitat