Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   eine Uhr (https://www.delphipraxis.net/55407-eine-uhr.html)

Förstli 20. Okt 2005 13:38


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.

Daniel G 20. Okt 2005 19:22

Re: eine Uhr
 
Zitat:

Zitat von Förstli
Wir benutzen natürlich noch mSuM

Was ..äh.. ist das genau?

Treffnix 20. Okt 2005 19:26

Re: eine Uhr
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Förstli
Wir benutzen natürlich noch mSuM

Was ..äh.. ist das genau?

Das hatte hier doch schonmal hier irgendwer. Wenn ich mich recht erinnere war das ne eingedeutschte Kapselung von TCanvas. Sehr strange...

*edit* Der Beispielcode sieht aus als hätte ich recht. .bewegeUm, .bewegeBis... :cyclops:

Rastaman 20. Okt 2005 19:27

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:

Palando 20. Okt 2005 19:38

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?

Daniel G 20. Okt 2005 19:42

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.

Förstli 20. Okt 2005 20:13

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?

hanselmansel 20. Okt 2005 21:05

Re: eine Uhr
 
HiHo,

wenn ich das recht sehe, könntest du Schleifen verschachteln.
Delphi-Quellcode:
For min := 0 to 59 do
  Begin
  For sec := 0 to 59 do
    Begin
    Sekundenzeiger.Bewege;
    Sleep(1000);
    blablabla...
    End;
  Minutenzeiger.Bewege;
  End;
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).

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

Palando 20. Okt 2005 21:42

Re: eine Uhr
 
Zitat:

Zitat von hanselmansel
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.


Das kannst du allerdings auch erreichen, indem du die Sleep-Funktion der For-Schleifen einfach durch Delay ersetzt.

Aber momennt - darf er das? :/

jfheins 21. Okt 2005 10:09

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 16:56 Uhr.
Seite 1 von 3  1 23      

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