Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Uhrzeiger (https://www.delphipraxis.net/141422-uhrzeiger.html)

Yoko 8. Okt 2009 17:16


Uhrzeiger
 
Halli Hallo,
ich befinde mich in Stufe 11 und habe das Fach Informatik. Wir arbeiten mit der Lib mSum und müssen zunächsts eine Uhr programmieren. Da ich ein fleißiger Schüler bin (:P) will ich mich damit auch ein wenig zuhause beschäftigen und nicht nur in der Schule arbeiten. Zunächst hier mein bisheriger Quelltext bevor ich zu meiner Frage komme.

Delphi-Quellcode:
program pClock;
uses
  mSum;

var
  meinSchirm:Bildschirm;
  meinStift:Buntstift;
  meineMaus:Maus;
  Radius,striche:ganzeZahl;
begin
  meinSchirm:=Bildschirm.init;
  meinStift:=Buntstift.init;
  meineMaus:=Maus.init;
  Radius:=meinSchirm.breite div 4;

//Zeichne Kreis
meinStift.bewegeBis(meinSchirm.breite div 2, meinSchirm.hoehe div 2);
meinStift.zeichneKreis(meinSchirm.breite div 4);

//Minutenstriche
striche:=0;
repeat
meinStift.dreheUm(6);
meinStift.runter;
meinStift.bewegeum(radius);
meinStift.hoch;
meinStift.bewegeBis(meinSchirm.breite div 2, meinSchirm.hoehe div 2);
striche:=striche+1;
until striche=60;

//erster Innenkreis
meinStift.bewegebis(meinSchirm.breite div 2, meinSchirm.hoehe div 2);
meinStift.setzeFarbe(weiss);
meinStift.setzeFuellMuster(gefuellt);
meinStift.zeichneKreis(radius * 31/32);

//Ausrichtung
meinStift.drehebis(0);
meinStift.setzeFarbe(schwarz);
meinStift.setzeLinienBreite(2);
//Minutenstriche
striche:=0;
repeat
meinStift.bewegebis(meinSchirm.breite div 2, meinSchirm.hoehe div 2);
meinStift.runter;
meinStift.bewegeum(radius);
meinStift.dreheUm(30);
meinStift.hoch;
striche:=striche+1;
until striche=12;

//zweiter Innenkreis
meinStift.bewegebis(meinSchirm.breite div 2, meinSchirm.hoehe div 2);
meinStift.setzeFarbe(weiss);
meinStift.zeichneKreis(radius *19/20) ;

//Freigeben
meinSchirm.gibFrei;
meinStift.gibFrei;
meineMaus.gibFrei;

end.
So das ist mein bisheriger Quelltext für eine Uhr. Was gehört noch zu einer Uhr? Natürlich die Zeiger. Da sind wir bei meinem Problem ich will wissen wie ich solche Zeiger Programmiere und sie dazu bringe sich zu bewegen oder wenn z.B. Sekundenzeiger einmal rum ist, dass der Minutenzeiger wandert usw. Vielleicht kann mir da jemand helfen und/oder Denkanstöße geben!

PS: ES HANDELT SICH HIER WEDER UM EINE HAUSAUFGABE NOCH UM EIN PROJEKT! Das ist alles Unterrichtsstoff und Teil meiner Selbstfortbildung!

hoika 8. Okt 2009 17:56

Re: Uhrzeiger
 
Hallo,

LineTo

Hier habe ich mit MoveTo/LineTo gearbeitet.

Dass der Minuten-Zeiger sich nach 60 Sekunden bewegt,
musst du halt programmieren.

Delphi-Quellcode:
iSec, iMin: Integer

iSec:= 59;
Inc(iSec);
if iSec=60 then
begin
  iSec:= 0;
  Inc(iMin);
end;

Heiko

turboPASCAL 8. Okt 2009 18:01

Re: Uhrzeiger
 
@Heiko , die arbeiten mit der Unit mSum...

Das ist so ein Graphikdingens für die Scuhle um das arbeiten mit Zeichnungen zu erleichertn.
K. A. ob Yoko Ahnung von TCanvas etc. hat

alleinherrscher 8. Okt 2009 18:02

Re: Uhrzeiger
 
Hi, und Willkommen!

Leider kenne ich diese Unit da nicht, mit der ihr arbeitet. Aber prinzipiell ein paar Sachen:

1. Du könntest 3 Variablen einführen: Stunden, Minuten, Sekunden.
2. Mit einem Timer kannst du die Sekunden hochzählen. (Setze das Timerintervall auf 1000ms) Wenn die Sekunden bei 60 angekommen sind, setzt du sie auf Null und erhöhst die Minuten um 1. (Entsprechendes gilt für die Stunden)
3. Ich denke mal, wie man den Strich für die Zeiger zeichnet, sollte dir klar sein, wenn du das Ziffernblatt schon fertig programmiert hast? (Deine mSum Unit kann scheinbar zeichnen da brauchst du kein Lineto)


Alternativ könnte man auch im Timer immer die Systemuhrzeit abfragen, in Stunden, Minuten und Sekunden aufteilen und erhält somit die korrekte Uhrzeit, aber versuch besser erstmal den ersten Vorschlag...

Yoko 9. Okt 2009 13:52

Re: Uhrzeiger
 
Ja wie ich den Zeiger erstelle weiß ich, aber ich weiß nicht wie ich ihn an der einen Seite (Mitte, quasi wo der Zeiger festgenagelt ist) festhalte und der andere Teil wandert...das ist zuerst mein Problem, wenn ich das rausgefunden habe glaube ich erklärt sich das fast von selbst...dann brauch ich nur noch eine geeignete schleifer und ich sollte fertig sein.. :) Danke für die bisherigen Antwort, hoffe auf noch mehr Hilfe ;)

hoika 9. Okt 2009 13:59

Re: Uhrzeiger
 
Hallo,

male ihn doch einfach bei jedem Timer-Intervall komplett neu.
Das geht über XXX.Invalidate,
wobei XXX deine Komponente (z.B,. von TLabel abgeleitet) ist.

Darauf reagierst du im OnPaint.

Die Koordinaten-Berechnung darfst du aber selber übernehmen,
müsste Sin() sein

geg. ist der Radius und der Winkel (360° = 24h)


Heiko

Yoko 9. Okt 2009 15:23

Re: Uhrzeiger
 
Zitat:

Zitat von hoika
Hallo,

male ihn doch einfach bei jedem Timer-Intervall komplett neu.
Das geht über XXX.Invalidate,
wobei XXX deine Komponente (z.B,. von TLabel abgeleitet) ist.

Darauf reagierst du im OnPaint.

Die Koordinaten-Berechnung darfst du aber selber übernehmen,
müsste Sin() sein

geg. ist der Radius und der Winkel (360° = 24h)


Heiko

Könntest du mir am besten mal ein Muster zeigen...das sind so viele Begriffe drin mit denen ich nichts anfangen kann :) bin noch nicht dahinter gekommen wie das gemeint ist bzw wie ich das einsetze..
MfG Yoko

hoika 9. Okt 2009 15:51

Re: Uhrzeiger
 
Hallo,

nö ;) so viel Zeit habe ich nicht

zeig doch noch, was du schon hast
und was du nicht verstanden hast.


Heiko

hathor 9. Okt 2009 16:44

Re: Uhrzeiger
 
digitalcoding.com - Delphi Tutorial
This example provide by - digitalcoding.com

http://dezfoul.net/~william/transp_clock.zip

alleinherrscher 9. Okt 2009 20:28

Re: Uhrzeiger
 
Also du hast doch die Minutenstriche gezeichnet...kannst du vielleicht mal ein Screenshot anhängen, wie die aussehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.

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