Delphi-PRAXiS

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 ^^

Coldice111 21. Okt 2005 12:00

Re: eine Uhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Es gibt auch so eine Komponente auf Klick Hier
Da bei TSRClock.
Das machste dann bei dir auf die Form und schreibst ins formcreate

Delphi-Quellcode:
srclock1.autoupdate;
Dann haste eine Uhr mit Zeiger ;)
Die sich andauernd aktualiesiert.
cu coldice111

Sharky 21. Okt 2005 12:07

Re: eine Uhr
 
Zitat:

Zitat von Coldice111
... Dann haste eine Uhr mit Zeiger ...

Und nicht nur eine schlechte Note vom Lehrer weil Du die Aufgabe, nämlich eine Uhr zu programmieren, nich gelöst hast sondern auch nichts gelernt.

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 :?:

Förstli 21. Okt 2005 15:02

Re: eine Uhr
 
Zitat:

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

Also ich habs versucht, der sagt dann aber immer
Zitat:

[Fehler] pUhr.dpr(55): Anweisung für FOR-Schleifenvariablen 'lauf'
Weiß nich wo der Fehler is bzw. was der von mir will ^^

Treffnix 21. Okt 2005 15:08

Re: eine Uhr
 
Wenn du eine For Schleife benutzt, darfst du innerhalb der Schleife nicht die Schleifenvariable ändern.

Beispiel:

Delphi-Quellcode:
var lauf, weg: Integer;
begin
  weg := 0;
  for lauf:= 0 to 59 Do Begin
    weg := lauf; //<- Okay
    lauf := weg; //<- Böse! 
  end;
end;
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!

internetnavigator 31. Aug 2008 15:25

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

Valle 31. Aug 2008 15:36

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

internetnavigator 2. Sep 2008 12:39

Re: eine Uhr
 
ja, aber vllt hilft es ja doch nochmal irgendwem :) :)

Teekeks 20. Okt 2008 17:51

Re: eine Uhr
 
Wen du nur das prog gibst? ^^

mimi 22. Okt 2008 17:23

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*

zahor 24. Okt 2008 12:12

Re: eine Uhr
 
mimi, wie denkst du, dass die mit threads umgehen können, wenn sie mit so ner eingedeutschen canvas-version rumspielen? :D

mimi 24. Okt 2008 12:37

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 03:43 Uhr.

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