![]() |
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:
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!
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. PS: ES HANDELT SICH HIER WEDER UM EINE HAUSAUFGABE NOCH UM EIN PROJEKT! Das ist alles Unterrichtsstoff und Teil meiner Selbstfortbildung! |
Re: Uhrzeiger
Hallo,
![]() 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 |
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 |
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... |
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 ;)
|
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 |
Re: Uhrzeiger
Zitat:
MfG Yoko |
Re: Uhrzeiger
Hallo,
nö ;) so viel Zeit habe ich nicht zeig doch noch, was du schon hast und was du nicht verstanden hast. Heiko |
Re: Uhrzeiger
digitalcoding.com - Delphi Tutorial
This example provide by - digitalcoding.com ![]() |
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 13:02 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