Entwickler-Ecke
WinForms - Hilfe bei Analoguhr
Atticus - So 06.05.12 14:01
Titel: Hilfe bei Analoguhr
Hallo Leute,
bin nun bei meiner nächsten Übung, Den "Rechner" von letztem mal hab ich dann mit Hilfe noch hinbekommen. Nun wirds gleich schon schwerer.
Ich soll eine Uhr bauen. Und zwar soll sie zwei beliebige Zeiten anzeigen. Einmal "digital" mit Zahlen und einmal eine Analoguhr.
Das Thema is wohl schon ziemlich durch, denn Google spuckte einiges aus, aber oft nunmal nicht wirklich was ich brauchte oder ein kam mit dem English nicht komplett zurecht.
Leider habe ich noch nicht wirklich viel. Wir haben noch den Zusatz die "Uhr" in einer eigenen Klasse abzuspeichern, diese habe ich nun erstellt. Jedoch waren in so ziemlich allen "Google-Lösungen" andere Strategien verfolgt worden.
Um mal ehrlich zu sein. Bisher habe ich die Form gezeichnet mit 4 Labels, zwei davon für die Orte und die anderen beiden sollen mal die Digitaluhr enthalten, hab da aber schon keine Ahnung wie ich die Uhrzeit da reinbekommen soll.
Dann habe ich noch einen Timer eingefügt und den Wert auf 1000 gesetzt, damit die Uhr im Sekundentakt aktualisiert wird.
Ich habe auch schon versucht mit Graphics/System Draw die Uhr zu malen, aber ich bekomm es einfach nicht hin.
Kann mich hier vielleicht wer ein wenig an die Hand holen und mir zeigen mit welchen Befehlen ich das realisieren kann und bei weiteren Fragen auch helfen?
Wäre echt sehr dankbar.
Th69 - So 06.05.12 15:07
Hallo Atticus,
womit hast du denn am meisten Schwierigkeiten - mit dem Zeichnen oder der Mathematik?
Bei ersterem lies dir mal den Artikel
Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) [
http://www.mycsharp.de/wbb2/thread.php?threadid=21782] durch.
Bei letzterem benötigst du die Kreisfunktion (bzw. Kreisrelation):
(r = Radius, x und y = Punkte auf der Kreislinie)
Umgestellt nach jeweils x und y ergibt dies (entsprechend Trigonometrie):
Quelltext
1: 2:
| x = r * sin(a); y = r * cos(a); |
wobei a (alpha) der Winkel (im Bogenmaß) ist.
Nun mußt du nur noch die Uhrzeit für beide Zeiger (Stunden und Minuten) in den jeweiligen Winkel umrechnen und die Zeiger als Linien vom Mittelpunkt bis zum Punkt (x,y) zeichnen.
Atticus - So 06.05.12 18:18
Die Mathematik wäre weniger das Problem. Was mir da gefehlt hat hab ich mir rausgesucht und bisher denke ich, dass ich das hinbekäme.
Allerdings komme ich, wie du auch erwähnt hast, mit der Zeichenfunktion nicht klar.
Ich schaue mir auf jeden Fall mal deinen Link an. Vielen Dank dafür.
Atticus - Di 08.05.12 09:19
Also ich muss sagen, dass ich jetzt noch weniger verstehe als vorher. Habe mir den Beitrag mal durchgelesen und mal Beispiele abgetippt. Dann hat mit Visual Studio aber etliche Fehler angezeigt und man konnte natürlich nichts ausführen.
Gibts denn keine verstänldichere Erklärung? Kann mir bitte mal jemand sagen wie ich jetzt zum Beispiel nur das Ziffenblatt zeichnen kann.
mats74 - Di 08.05.12 10:00
Hallo Atticus
Wie schon Th69 beschrieben hat, kannst Du auf dein Control das Ziffernblatt aufzeichnen.
Vielleicht hilft Dir folgender Code ein Bisschen weiter:
C#-Quelltext
1: 2: 3: 4:
| private void DeinControl_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(new Pen(Color.Black), 10, 10, 50, 10); } |
Damit zeichnest Du eine horizontale Linie.
Die Positionierung der Punkte innerhalb des Controls musst Du berechnen.
Die Aktualisierung der Berechnung erhälst Du durch die Ausführung deiner Timerklasse.
Den Rest kannst Du vom Post von Th69 ableiten und erstellen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!