![]() |
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 ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 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