Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Graphisch Digitale/Analoge Uhr (https://www.delphipraxis.net/15077-graphisch-digitale-analoge-uhr.html)

n00b_on_knees 28. Jan 2004 18:04

Re: Graphisch Digitale/Analoge Uhr
 
weiß wohl leider nichtmal was eine TInage ist..lol.
Das mit der Paintbox war mir sowieso klar, danke ;)..hmm ja das mit den Linienzeichnen ist auch klar..nur wie passe ich der aktuellen Uhrzeit die Zeiger an, bezüglich dem Winkel, und wie manage ich das bewegen? Immer beim Winkel dazuzählen? Nur wie?

Luckie 28. Jan 2004 18:07

Re: Graphisch Digitale/Analoge Uhr
 
Sollte TImage heißen.

Stanlay Hanks 28. Jan 2004 18:07

Re: Graphisch Digitale/Analoge Uhr
 
Zitat:

Zitat von n00b_on_knees
...Irgendwie habe ich Angst vor dem Lehrer, wenn ich nichts wirklich passendes habe. Ich glaube wenn ich ihm meinen mickrigen Quellcode abgebe, schickt er mich noch zurück in die Grundschule :shock: :wall:

Der soll herkommen :mad: Die DP steht hinter dir :dp: :wink:

Aber zu deinem Problem: Die Digitale Uhr dürfte kein Problem sein: Du nimmst ein TLabel (Register "Standard" auf der Komponentenleiste) und einen TTimer (Register "System") und ziehst dir beide auf dein Form. Dann klickst du doppelt auf den Timer und schreibst:

Delphi-Quellcode:
Label1.Caption := TimeToStr(Time);
Die Eigenschaft "Interval" des Timers setzt du im Objektinspektor auf 1000 (Zeit in Millisekunden, nach denen das "onTimer" Ereignis wiederholt ausgeführt wird. Allerdings sollte der Standardwert schon 1000 sein. Ein, bzw. ausschalten kannst du deine Uhr dann indem du

Delphi-Quellcode:
//entweder
Timer1.Enabled := false; //Zum Ausschalten

//oder
Timer1.Enabled := true; //Zum Einschalten
schreibst.

Bei der Analogen Uhr kann ich dir leider wenig weiterhelfen. (Muss wohl irgendwas mit Winkeln zu tun haben :mrgreen:)

Man liest sich, Stanlay :hi:

n00b_on_knees 28. Jan 2004 18:33

Re: Graphisch Digitale/Analoge Uhr
 
hmm, ich denke dass ist leider etwas zu einfach :pale:
das ganze soll hier so ähnlich geschehen, nur mit Zeichnen:

Code:
   __
||    ||
||    ||
   __
||    ||
||    ||
   __
das wäre ein teil der anzeige, nur mit strichen, kanns leider nicht anders hier mit zeichen machen ;)

Edit: Okey die Formatierung hier macht das ganze zunichte..jedenfalls soll es so gezeichnet werden wie in einer normalen Digitalanzeige einer Uhr, mit diesen Strichen.

[edit=Luckie]Dann nehmen wir doch mal die Code-Tags. ;) Mfg, Luckie[/edit]

Chris1986 28. Jan 2004 18:56

Re: Graphisch Digitale/Analoge Uhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zur Analogen Uhr:
Da hilft dir die Unit "math" und ein bisschen Mathe. Ich hab sowas auch mal gemacht. Ich häng das Prog einfach mal an.

MfG
Christian

n00b_on_knees 28. Jan 2004 19:11

Re: Graphisch Digitale/Analoge Uhr
 
dankesehr, werd mir dass mal durchsehen. hast du etwas dagegen wenn ich teile deines codes verwende?
Damit bin ich schon mal mit einem Teil des Programms bestimmt weiter.

Chris1986 28. Jan 2004 19:14

Re: Graphisch Digitale/Analoge Uhr
 
Den Code kannst du ruhig benutzen. Aber wie gesagt: Das ist Mathe der 9. Klasse. Wenn du das deinem Lehrer vorstellen willst, dann solltest du den Code verstehen.

MfG
Christian

Spezi1980 28. Jan 2004 19:48

Re: Graphisch Digitale/Analoge Uhr
 
Hallo,

Wenn du die Uhr direkt malen willst, so kann ich dir ein Beispiel zeigen:

analoge Uhr:
also, du nimmst ein leeres Fenster, haust eine Paintbox und einen Timer drauf. Den Interval der Uhr setzt du auf 1000 (ms = 1s).

In das Ereigniss "OnTimer" des Timers gibst du folgendes ein:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
 Procedure DrawDigit(Digit:Char; XPos,YPos, Size:Integer; Canvas : TCanvas);
 Var I:Integer; X,Y, Breite,Hoehe:Integer;
 begin
   Breite := Size div 2; {Breite einer Zahl berechnen}
   Hoehe  := Size;      {Hoehe einer Zahl berechnen}
   Canvas.MoveTo(XPos,YPos);
   case Digit of
     ':' : begin
               X := Breite div 2;
               Y := Hoehe div 3;
               Canvas.Ellipse(XPos +X -1, YPos + y  -1,XPos +X +1,YPos +Y  +1);
               Canvas.Ellipse(XPos +X -1, YPos + y*2 -1,XPos +X +1,YPos +Y*2 +1);
           end;
     '.' : begin
               X := XPos + Breite div 2;
               Y := XPos + Hoehe;
               Canvas.Ellipse(X - 1,y-2, X + 1,y);
           end;
     '0' : begin
               Canvas.LineTo(XPos,YPos + Size);
               Canvas.LineTo(XPos + Breite,YPos + Hoehe);
               Canvas.LineTo(XPos + Breite,YPos);
               Canvas.LineTo(XPos,YPos);
           end;
     '1' : begin
               Canvas.MoveTo(XPos,YPos + Size div 3);
               Canvas.LineTo(XPos + Breite,YPos);
               Canvas.LineTo(XPos + Breite,YPos + Hoehe);
           end;
     '2' : begin {...}
               Canvas.MoveTo(XPos         ,YPos + Hoehe div 5);
               Canvas.LineTo(XPos         ,YPos);
               Canvas.LineTo(XPos + Breite ,YPos);
               Canvas.LineTo(XPos + Breite ,YPos + Hoehe div 2);
               Canvas.LineTo(XPos         ,YPos + Hoehe div 2);
               Canvas.LineTo(XPos         ,YPos + Hoehe);
               Canvas.LineTo(XPos + Breite ,YPos + Hoehe);
               Canvas.LineTo(XPos + Breite ,YPos + Hoehe - Hoehe div 5);
           end;
     '3' : begin {...
                   Hier musst du nun selbst aktiv werden und die anderen Zahlen wie oben malen...}
           end;
   end;
 end;
Var I:Integer; Zeit:String;
begin
  Zeit := timetoStr(now); //aktuelle Uhrzeit ermitteln
  Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height); //Inhalt der Paintbox löschen
  for I:=1 to length(Zeit) do begin
    DrawDigit( Zeit[I] , //Die übergebene Ziffer
              (5 + abs(PaintBox1.Canvas.Font.Height) div 2) * I, //die X Koordinate der Ziffer (die 5 ist der Abstand)
              10, //die Y Koordinate des Textes
              abs(PaintBox1.Canvas.Font.Height), //Die Schriftgröße
              PaintBox1.Canvas); //wohin gezeichnet werden soll
  end;
end;
Ich hoffe mal das dir das weiterhilft.

Gruß
Robs

[Edit]mann sollte sich das auch nochmal durchlesen was man postet :wall: [/Edit]
grrrrrrrr :wall: :wall: :wall:

n00b_on_knees 28. Jan 2004 20:16

Re: Graphisch Digitale/Analoge Uhr
 
@Spezi
Danke auch, werd mich nur vorher mal mit dem andrem Code beschäftigen!
Ich glaube da muss brauch ich noch mehr Durchblick *g*

n00b_on_knees 28. Jan 2004 21:06

Re: Graphisch Digitale/Analoge Uhr
 
@Chris

Bin ja gerade dabei deinen Code durchzustudieren..was genau bezeugst du mit

Delphi-Quellcode:
sin(DegToRad(h*30))
?

ich weiß, dass der ganze Teil der Anweisung mit

Delphi-Quellcode:
x:= sin(DegToRad(h*30))*(pb.width/2-70);
zu tun hat, macht das ganze einfach nur den Winkel auszurechnen? (den Teil nach * verstehe ich..)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Seite 2 von 3     12 3      

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