Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Uhr ohne Hilfe vom "Ttimer" erstellen (https://www.delphipraxis.net/150806-uhr-ohne-hilfe-vom-ttimer-erstellen.html)

poloroyd 27. Apr 2010 18:31


Uhr ohne Hilfe vom "Ttimer" erstellen
 
moin moin,

ich hab da eine kurze Frage an euch, ihr lieben. Und zwar haben wir als 12KlasseKurs eine schwierige Hausaufgabe gekriegt:

Wir sollen eine analoge und eine digitale Uhr erstellen (mit Sekundenzeiger) ohne Hilfe vom "Ttimer"...wie bitte ??? :wall:

weiss echt nicht wie das gehen soll...hat einer von euch eine idee ?? wäre echt nett wenn ihr mir helfen würdet. mfg Jessica. :cat:

Wolfgang Mix 27. Apr 2010 18:44

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Schaue einmal

hier

DeddyH 27. Apr 2010 18:46

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Hallo und Willkommen in der DP :dp:,
mir fällt da spontan eine gewollte Endlosschleife ein (am Besten in einem Thread), die laufend die Uhrzeit abfragt und die Uhr ggf. zeichnet.

SirThornberry 27. Apr 2010 18:49

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Wie genau lautet die Aufgabenstellung? Wenn wirklich nur TTimer verboten ist würde ich einfach die Api-Funktion verwenden um einen Timer zu erstellen. Dort kann man dann auch noch unterscheiden zwischen der Möglichkeit das ganze per Callback oder per Message zu bewerkstelligen.

David Martens 27. Apr 2010 22:21

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Das ist nicht so schwer.

Delphi-Quellcode:

procedure Uhr_starten;
var
  tick : extended;
begin
  tick := Now +     // Now ist eine Funktion zum Holen der Systemzeit
          1 / 3600; // eine Sekunde draufrechnen

  // hier die Uhr starten

  repeat

    while (Now - tick) < 0 do sleep(10); // in 10 Millisekundenschritten warten bis eine Sekunde um ist

    tick := tick + 1 / 3600; // wieder eine Sekunde weiter gehen

    // Uhr neu zeichnen

    Application.ProcessMessages;

  until SpeedButton1.Down;
Zur Erläuterung:
- tick beinhaltet die Zeit der nächsten Sekunde
- Application.ProcessMessages; arbeitet Ereignisse ab, die (für hier) den StopButton abfragen lässt, Oberfläche neu zeichnet ... das kann etwas dauern, daher die Konstruktion mit der Zeit in der Zukunft
- jetzt der StopButton: hier SpeedButton1 mit folgenden wichtigen Eigenschaften allowallup := true und groupindex > 0

Ich hab den Code nicht getestet, aber es soll ja auch noch was übrig bleiben :).

Gruß David

s.h.a.r.k 27. Apr 2010 22:24

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Oder man programmiert sich einen eigenen Timer, der asynchron zum MainThread läuft: Thread der eine Message an den MainThread schickt und in der Execute-Methode ein SleepEx(1000, True) hat :zwinker:

// edit

Für diese Art der Aufgabenstellung wäre es aber etwas übertrieben :spin2:

hathor 28. Apr 2010 22:07

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Der Vorschlag in #5 ist unbrauchbar - da kann man die CPU als Heizung benutzen.

Die Funktion MsgWaitForMultipleObjects ist die Lösung:

Delphi-Quellcode:
function GetTickCount64: Int64; // vermeidet das 49.7-Tage-Problem
var
  QFreq, QCount: Int64;
begin
   Result := GetTickCount;
   if QueryPerformanceFrequency(QFreq) then
   begin
     QueryPerformanceCounter(QCount);
     if QFreq <> 0 then
       Result := (QCount div QFreq) * 1000;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Tick, ms: Int64;
  Event: THandle;
Label go;
begin
go:
  ms:=1000; //millisec
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickcount64 + ms;
    while (ms > 0) and
         (MsgWaitForMultipleObjects(1, Event, False, ms, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      if Application.Terminated then Exit;
      ms := Tick - GetTickcount64;
      Application.ProcessMessages;
    end;
  finally
    CloseHandle(Event);
  end;
Label1.Caption:= TimeToStr(now);
//Uhr zeichnen
Goto go;
end;

Luckie 29. Apr 2010 00:16

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Warum das überflüssige Goto?
Delphi-Quellcode:
finish := not finish;
while not finish do
begin
  // Dein Code
end;

Alaitoc 29. Apr 2010 07:24

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
[OFF-Topic]
Ah GOTO! :duck:
[/OFF-Topic]

MfG Alaitoc

himitsu 29. Apr 2010 07:28

Re: Uhr ohne Hilfe vom "Ttimer" erstellen
 
Moin Jessica,

es wäre aber dennoch nicht schlecht, wenn du mal die gesamte Aufgabenstellung genauer auflisten/beschreiben würdest.

Für eine Aufgabe an Welche, die wohl nicht allzuviel Ahnung von der Matherie haben (Schüler), finde ich die aktuell verstandene Aufgabenstellung etwas schwer/übertrieben/unmöglich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Seite 1 von 4  1 23     Letzte »    

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