Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Uhr Programmieren (https://www.delphipraxis.net/185782-uhr-programmieren.html)

GroZ 6. Jul 2015 12:26

Uhr Programmieren
 
Ich soll eine Uhr programmieren. Ich habe bereits einen Kreis und davon den Mittelpunkt. Zeiger habe ich auch schon einen. Wie muss ich nun fortfahren? Bin mit Delphi nicht so gut. :D

baumina 6. Jul 2015 12:31

AW: Uhr Programmieren
 
Da bietet sich ein Timer an.

Uwe Raabe 6. Jul 2015 12:33

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307791)
Wie muss ich nun fortfahren?

Das hängt davon ab, ob der Zeiger ein Stunden-, Minuten- oder Sekunden-Zeiger ist. Abhängig davon musst du ihn jede Stunde, Minute oder Sekunde um 6° drehen.

Jetzt mal ehrlich: Was erwartest du denn für eine Antwort auf so eine Frage?

GroZ 6. Jul 2015 12:40

AW: Uhr Programmieren
 
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

Klaus01 6. Jul 2015 12:45

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307796)
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

.. mal in die Geometrie Unterlagen schauen..

Grüße
Klaus

GroZ 6. Jul 2015 12:47

AW: Uhr Programmieren
 
Zitat:

Zitat von Klaus01 (Beitrag 1307798)
Zitat:

Zitat von GroZ (Beitrag 1307796)
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

.. mal in die Geometrie Unterlagen schauen..

Grüße
Klaus

Hab das Tafelwerk neben mir es geht ja darum im Programm den Zeiger wie eine uhr ticken zu lassen sprich alle 60s um 6°

MrSpock 6. Jul 2015 12:55

AW: Uhr Programmieren
 
Schau mal unter Polarkoordinaten und karthesische Koordinaten.

Perlsau 6. Jul 2015 13:41

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307791)
Ich soll eine Uhr programmieren. Ich habe bereits einen Kreis und davon den Mittelpunkt. Zeiger habe ich auch schon einen. Wie muss ich nun fortfahren? Bin mit Delphi nicht so gut. :D

Für einen Anfänger mag das vielleicht schon etwas zu anspruchsvoll sein, denn man muß sich, will man die Aufgabe lösen, ein wenig mit den Canvas-Funktionen auskennen. Zum Beispiel ist es wichtig, den richtigen Zeichen-Modus zu wählen, damit man den jeweiligen Zeiger ohne Verlust des Hintergrundes löschen und neu zeichnen kann. Dann ist auch noch wichtig, wie man die jeweiligen Positionen berechnet, zu denen gezeichnet werden soll. Ausgangspunkt ist ja immer das Zentrum des Kreises. Nun benötigt man noch die X-Y-Koordinate des Zielpunktes auf der Kreisfläche für den Befehl LineTo. Um diesen nicht ständig neu berechnen zu müssen, ist es sinnvoll, die Berechnung beim Programmstart nur einmal durchzuführen und die Koordinaten dann in einem Array[0..59,1..2] of Integer zu speichern. Die Berechnung selbst hast du hoffentlich im Unterricht gelernt, ich müßte sie auch erst nachschlagen, weil mir das nicht geläufig ist.

Popov 6. Jul 2015 15:09

AW: Uhr Programmieren
 
@GroZ

Uhr mit Zeigern programmieren hat etwas mit Sinus, Cosinus und Pi zu tun.

Gegeben sind x1 und y1 als Position für Mitte. Indirekt ist noch der Winkel gegeben. Ein voller Kreis hat 360°, ein halber Tag 12 Stunden. Den Winkel für eine Stunde kann man somit mit einem Dreisatz berechnen, genauso wie den für eine Minute und eine Sekunde. Dann ist noch der Radius gegeben (Länge des Zeigers):

Delphi-Quellcode:
var
  al: Integer = 0;

function LineAnglePoint(Canvas: TCanvas; p: TPoint; r: Integer; Angle: Double): TPoint;
begin
  Result.X := p.X + Round(Cos(Angle * Pi / 180) * r);
  Result.Y := p.Y - Round(Sin(Angle * Pi / 180) * r);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  p1, p2: TPoint;
  r,
  x2, y2: Integer;
begin
  p1 := Point(100, 100);
  r := 100;
  Canvas.FillRect(Canvas.ClipRect);
  p2 := LineAnglePoint(Canvas, p1, r, al);
  Canvas.Polyline([p1, p2]);
  Inc(al);
  if al >= 360 then al := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  Timer1.Interval := 1;
end;

alleinherrscher 6. Jul 2015 15:13

AW: Uhr Programmieren
 
@Popov Ich dachte wir lösen hier keine Schulaufgaben, sondern geben Hilfestellungen :cry:

baumina 6. Jul 2015 15:15

AW: Uhr Programmieren
 
Na wenigstens haben dann alle schlauen Schüler, die hier lesen, die selbe Lösung.

Uwe Raabe 6. Jul 2015 15:26

AW: Uhr Programmieren
 
Zitat:

Zitat von baumina (Beitrag 1307820)
Na wenigstens haben dann alle schlauen Schüler, die hier lesen, die selbe Lösung.

Nicht nur die schlauen...

Luckie 6. Jul 2015 17:46

AW: Uhr Programmieren
 
Dann zeichnet man das ganze noch auf ein Bitmap im Speicher und kopiert es alle Sekunden auf den Canvas der Form. Dann wäre es perfekt.

Daniel 6. Jul 2015 20:34

AW: Uhr Programmieren
 
Ich bin hier mal mit den Feudel durch.
Einige Beiträge könnte es erwischt haben.
:roll:

DeddyH 6. Jul 2015 20:50

AW: Uhr Programmieren
 
Mutter, wir danken Dir :mrgreen:

Perlsau 6. Jul 2015 21:01

AW: Uhr Programmieren
 
Dem kann ich nur beipflichten, das ist voll in Ordnung so!

AlexII 11. Jul 2015 18:19

AW: Uhr Programmieren
 
Hier was zum Thema -> Analog clock


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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