![]() |
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: |
Re: Uhr ohne Hilfe vom "Ttimer" erstellen
|
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. |
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.
|
Re: Uhr ohne Hilfe vom "Ttimer" erstellen
Das ist nicht so schwer.
Delphi-Quellcode:
Zur Erläuterung: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; - 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 |
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: |
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; |
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; |
Re: Uhr ohne Hilfe vom "Ttimer" erstellen
|
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 10:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz