![]() |
eine Uhr
Also ich bin einer von vielen, der Info in der Schule hat und mit Delphi proggt. Wir benutzen natürlich noch mSuM, hab das Fach auch erst seit 2 Monaten.
Jetzt sollen wir eine Uhr proggen, mit Zifferblatt, Sekunden, Minuten und Stundenzeiger.. Also Zifferblatt und Sekundenzeiger sind soweit kein Problem, nur komm ich mit den anderen beiden zeigern nicht klar. Alle Versuche sind gescheitert, kann mir da jemand helfen? Zumindest welche Schleife ich einbauen muss? Kenn mich damit überhaupt nicht aus ^^
Delphi-Quellcode:
program pUhr;
uses mSuM; var zackBildschirm:Bildschirm; zackStift:Buntstift; zackMaus:Maus; lauf:ganzezahl; begin //Objekte erzeugen zackBildschirm:=Bildschirm.init; zackStift:=Buntstift.init; zackMaus:=Maus.init; //Objekte benutzen //Kreis zackStift.bewegeBis(zackBildschirm.breite DIV 2,zackBildschirm.hoehe DIV 2); zackStift.zeichneKreis(zackBildschirm.breite DIV 4); //5min Striche for lauf:=1 to 12 do begin zackStift.setzeLinienBreite(2); zackStift.bewegeUm((zackBildschirm.breite DIV 4)-30); zackStift.runter; zackStift.bewegeUm(30); zackStift.hoch; zackStift.bewegeBis(zackBildschirm.breite DIV 2,zackBildschirm.hoehe DIV 2); zackStift.dreheUm(30); end; //1min Striche for lauf:=1 to 60 do begin zackStift.setzeLinienBreite(1); zackStift.bewegeUm((zackBildschirm.breite DIV 4)-15); zackStift.runter; zackStift.bewegeUm(15); zackStift.hoch; zackStift.bewegeBis(zackBildschirm.breite DIV 2,zackBildschirm.hoehe DIV 2); zackStift.dreheUm(-6); end; //Sekundenzeiger zackStift.dreheBis(96); repeat for lauf:=1 to 59 do zackStift.bewegeBis(zackBildschirm.breite DIV 2,zackBildschirm.hoehe DIV 2); zackStift.radiere; zackStift.bewegeUm((zackBildschirm.breite DIV 4)-40); zackStift.dreheUm(-6); zackStift.bewegeBis(zackBildschirm.breite DIV 2,zackBildschirm.hoehe DIV 2); zackStift.normal; zackStift.runter; zackStift.bewegeUm((zackBildschirm.breite DIV 4)-40); warte(1000); //Minutenzeiger until zackMaus.doppelklick; zackBildschirm.gibFrei; zackStift.gibFrei; zackMaus.gibFrei; end. |
Re: eine Uhr
Zitat:
|
Re: eine Uhr
Zitat:
*edit* Der Beispielcode sieht aus als hätte ich recht. .bewegeUm, .bewegeBis... :cyclops: |
Re: eine Uhr
Die Unit heisst "Mein Stift und Maus" und vereinfacht Canvas Befehle und stellt sie auf Deutsch zur Verfügung.
Ich finde das lächerlich, dass man sowas in der Schule benutzt und es nicht gleich richtig lernt :wall: |
Re: eine Uhr
Und welchen Vorteil genau soll es haben, die eingedeutschten Begriffe zu lernen nur um die dann wieder vergessen zu können und die richtigen lernen zu müssen, wenn man anfängt "richtig" zu programmieren?
|
Re: eine Uhr
Vielen Dank,
meine Frage ist geklärt. Ich denke, wir sollten zum eigentlichen Thema zurückkehren und Förstli bei seinem "Problemli" helfen. |
Re: eine Uhr
jo wollte ich gerade sagen, tut doch nichts zur sache, hab hier viele themen über mSuM gesehen, dachte das wär klar. was'n jetzt mit meinem problem?
|
Re: eine Uhr
HiHo,
wenn ich das recht sehe, könntest du Schleifen verschachteln.
Delphi-Quellcode:
Mit einer weiteren Schleife ließe sich dann der Stundenzeiger realisieren. Das Problem wird sein, dass dein Programm damit vollauf ausgelastet ist. Ich lege dir daher die Komponente TTimer (findet sich in der Rubrik "System") nahe. Im OI kannst du dort auch ein Intervall einstellen, und es gibt das OnTimer-Event. (Also sowas wie ein ButtonClick, nur von der Uhr gesteuert.) Mit drei Timern (einfach auf dem Formular plazieren, und untersch. Intervalle einstellen) kannst du ganz leicht die Sekunden-, Minuten- und Stundenzeiger weiterrücken lassen (Wobei das Weiterrücken des Sekundenzeigers im OnTimer-Event des 1000ms-Timers realisiert wird, das Weiterrücken des Minutenzeigers bei OnTimer des 60000ms-Timers und so weiter, und so weiter).
For min := 0 to 59 do
Begin For sec := 0 to 59 do Begin Sekundenzeiger.Bewege; Sleep(1000); blablabla... End; Minutenzeiger.Bewege; End; Das Tolle dabei ist: Dein Programm wird auf Mausklicks reagieren können, weil der Nachrichtenstapel von Windows abgearbeitet wird. Das Doofe dabei ist: Für richtige Zeit -messungen oder -anzeigen ist TTimer nicht wirklich präzise genug. Verbesserungen könntest du dann noch machen, indem du dir per Time die richtige Zeit besorgst. (Aber da die Funktion ja in Englisch ist, dürft ihr sie wahrscheinlich noch nicht benutzen. :zwinker:) MfG, hanselmansel |
Re: eine Uhr
Zitat:
Das kannst du allerdings auch erreichen, indem du die Sleep-Funktion der For-Schleifen einfach durch ![]() Aber momennt - darf er das? :/ |
Re: eine Uhr
Wahrscheinlich müsste er die funktion umbennenen, also statt Warte (= Sleep) sowas wie WarteOhneEinzufrieren() ^^
Aber ich glaube, Timer sind hier die bessere Lösung, und sekundengenau sind sie allemal ;) evtl. aber doch lieber TStoppUhr = TTimer ^^ |
Re: eine Uhr
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Es gibt auch so eine Komponente auf ![]() Da bei TSRClock. Das machste dann bei dir auf die Form und schreibst ins formcreate
Delphi-Quellcode:
Dann haste eine Uhr mit Zeiger ;)
srclock1.autoupdate;
Die sich andauernd aktualiesiert. cu coldice111 |
Re: eine Uhr
Zitat:
Also Ehrlich... was bringt es denn jemandem eine Komponente zu geben wenn seine Frage ganz eindeutig zeigt das er es selber machen möchte/muss :?: |
Re: eine Uhr
Zitat:
Zitat:
|
Re: eine Uhr
Wenn du eine For Schleife benutzt, darfst du innerhalb der Schleife nicht die Schleifenvariable ändern.
Beispiel:
Delphi-Quellcode:
In diesem Fall ist lauf die Schleifenvariable. Du kannst sie innerhalb der Schleife jederzeit abfragen. Änderst du sie aber, klopft Delphi dir auf die Finger!
var lauf, weg: Integer;
begin weg := 0; for lauf:= 0 to 59 Do Begin weg := lauf; //<- Okay lauf := weg; //<- Böse! end; end; |
Re: eine Uhr
Liste der Anhänge anzeigen (Anzahl: 1)
Erstmal, es ist möglich!
Du musst nur bei Sekunde 0 alles Zeichnen, dann bei Sekunde 1 Mintuten und Stunden und Sekundenzeiger löschen und danach direkt neuzeichnen, aber vorher 1 sekunde warten ( warten() ). Hab mal die ferige Uhr angehängt, bei fragen bitte per icq melden: 312-923-771 Gruß !N |
Re: eine Uhr
Dir ist schon klar, dass du da einen 3 Jahre alten Thread gepusht hast und der
Threadersteller ebenso seit 3 Jahren nicht mehr in der DP eingeloggt war? :thumb: Mit freundlichen Grüßen, Valle |
Re: eine Uhr
ja, aber vllt hilft es ja doch nochmal irgendwem :) :)
|
Re: eine Uhr
Wen du nur das prog gibst? ^^
|
Re: eine Uhr
Ich frage mich warum ihr einfach nicht einen Timer nutzt. oder ein Thread dafür. Währe doch viel einfacher. und die Zeit könnte dann auch ständig abgefragt werden. was die Forschleifen sparen würde... naja einige *G*
|
Re: eine Uhr
mimi, wie denkst du, dass die mit threads umgehen können, wenn sie mit so ner eingedeutschen canvas-version rumspielen? :D
|
Re: eine Uhr
Dann halt ein Timer *G* Das müsste doch gehen oder ?
Wobei ein Thread für diese Aufgabe wahrscheinlich besser geeignet ist... Ich frage mich sowieso was das soll mit dem "Deutschen" Canvas. Mich würde das nur durcheinander bringen.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 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