Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Analoguhr (https://www.delphipraxis.net/20957-analoguhr.html)

MrFish 25. Apr 2004 21:19


Analoguhr
 
Ich habe ein Programm für eine Analoguhr geschrieben.
Es ist nur eine Übung gewesen, da ich noch Anfänger bin und mir Delpi selber beibringe.
Ich würde mich freuen wenn ihr mal drüberschaut und sagt was ihr davon haltet. :spin2:
Delphi-Quellcode:
 unit Uhr;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TAnaloguhr = class(TForm)
    Edit1: TEdit;
    Uhr: TTimer;
    procedure UhrTimer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Analoguhr: TAnaloguhr;
  SecWinkel : integer;
  MinWinkel : Integer;
  StdWinkel : Integer;
  SecWinkelAlt : integer;
  MinWinkelAlt : integer;
  StdWinkelAlt : integer;
  Zeit : String;
  XPos : integer;
  YPos : Integer;
  Std : Integer;
  Min : Integer;
  Sec : Integer;


implementation

{$R *.dfm}

procedure TAnaloguhr.UhrTimer(Sender: TObject);


begin
{---------------Systemzeit auslesen und zuweisen -------------------}

Zeit := TimeToStr(Time);
Edit1.Text := Zeit;
Std := StrToInt(Copy(Zeit,1,2));
Min := StrToInt(Copy(Zeit,4,2));
Sec := StrToInt(Copy(Zeit,7,2));

{-------------Zeigerwinkel berechnen--------------------------------}

SecWinkel := (( 6 * Sec)+90);
MinWinkel := (( 6 * Min)+90);
StdWinkel := ((30 * Std)+90);

{------------Zeiger Löschen-----------------------------------------}
{-------------Sekunde-----------------------------------------------}

XPos := Trunc (cos(SecWinkelAlt * Pi /180) *(-100));
YPos := Trunc (sin(SecWinkelAlt * Pi /180) *(-100));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := clBtnFace;
Canvas.Pen.Width := 1;
Canvas.LineTo((XPos + 150),(YPos + 150));

{--------------Minuten---------------------------------------------}

XPos := Trunc (cos(MinWinkelAlt * Pi /180) *(-100));
YPos := Trunc (sin(MinWinkelAlt * Pi /180) *(-100));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := clBtnFace;
Canvas.Pen.Width := 3;
Canvas.LineTo((XPos + 150),(YPos + 150));

{--------------Stunde----------------------------------------------}

XPos := Trunc (cos(StdWinkelAlt * Pi /180) *(-80));
YPos := Trunc (sin(StdWinkelAlt * Pi /180) *(-80));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := clBtnFace;
Canvas.Pen.Width := 3;
Canvas.LineTo((XPos + 150),(YPos + 150));


{-------------Zeiger Zeichnen---------------------------------------}
{-------------Sekunde-----------------------------------------------}

XPos := Trunc (cos(SecWinkel * Pi /180) *(-100));
YPos := Trunc (sin(SecWinkel * Pi /180) *(-100));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := 0;
Canvas.Pen.Width := 1;
Canvas.LineTo((XPos + 150),(YPos + 150));

{--------------Minuten---------------------------------------------}

XPos := Trunc (cos(MinWinkel * Pi /180) *(-100));
YPos := Trunc (sin(MinWinkel * Pi /180) *(-100));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := 0;
Canvas.Pen.Width := 3;
Canvas.LineTo((XPos + 150),(YPos + 150));

{--------------Stunde----------------------------------------------}

XPos := Trunc (cos(StdWinkel * Pi /180) *(-80));
YPos := Trunc (sin(StdWinkel * Pi /180) *(-80));

Canvas.MoveTo(150,150);
Canvas.Pen.Color := 0;
Canvas.Pen.Width := 3;
Canvas.LineTo((XPos + 150),(YPos + 150));

{------------Alte Winkel Zwischenspeichern-------------------------}

SecWinkelAlt := SecWinkel;
MinWinkelAlt := MinWinkel;
StdWinkelAlt := StdWinkel;


end;

end.


Dank
Gruß MrFish

hummer 25. Apr 2004 21:45

Re: Analoguhr
 
Es wäre nicht schlecht, wenn du dein Projekt in den Anhang einfügen könntest. Dann muss man nicht selbst ein neues Projekt erstellen und kompilieren.

MrFish 25. Apr 2004 21:51

Re: Analoguhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ist gemacht.
Hätte ich auch selbst drauf kommen können. :wall:

fkerber 25. Apr 2004 21:57

Re: Analoguhr
 
Hi!

Es fehlen immer noch Sachen, z.B. dcu etc.
Mach am besten das ganze Verzeichnis als zip und dann fehlt auch nix.
In der Dpr steht übrigens ne absolutepfadangabe zu unit.

Ciao fkerber

MrFish 25. Apr 2004 22:06

Re: Analoguhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nächster Versuch.

fkerber 25. Apr 2004 22:11

Re: Analoguhr
 
In dem Archiv fehlt wie gesagt noch die Pas-datei, die bei dir hier liegt:

C:\Programme\Borland\Delphi7\Projects\Uhr.pas

Pack die noch da rein und ändere in der dpr-datei den pfad entweder auf \uhr.pas oder uhr.pas (bin mir nicht sicher sorry)

ciao fkerber

alcaeus 25. Apr 2004 22:14

Re: Analoguhr
 
Also, die Idee ist nicht schlecht, aber ein bisschen konstruktive Kritik brauchts noch:
1. Der Kreis um die Uhr fehlt (zumindest bei mir), ebenso wie die Striche, die die Minuten bzw. Stundenpositionen zeigen
2. Wenn man schon die Größe des Fensters verändern kann, dann musst du darauf achten, dass es nicht zu klein werden kann. Dies kannst du mit den Constraints des Forms einstellen (MinHeight und MinWidth müssen gesetzt werden). Alternativ kanns du deinem Form eine fixe Größe zuweisen, und BorderStyle auf bsSingle setzen, somit kann die Größe nicht mehr geändert werden.
3. Du hast unten ein Edit mit der Zeit drin. Verwende dafür ein Label oder einen StaticText (register Zusätzlich). Edits sind für Eingaben, und nicht unbedingt für Ausgaben gemacht worden. Falls du wirklich ein Edit verwenden willst, so setze Enabled auf False, so dass der User nichts mehr eingeben kann.
So, das musste raus, ansonsten find ich die Idee gut, und auch die Zeitanzeige scheint zu passen :thumb:

DP-Maintenance 25. Apr 2004 22:14

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Sonstige Fragen zu Delphi" nach "Open-Source" verschoben.

MrFish 25. Apr 2004 23:10

Re: Analoguhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
bis ich das verstanden habe was alles zu einem Delphi Projekt gehört wird wohl noch eine Zeit vergehen.

Jens Schumann 26. Apr 2004 07:55

Re: Analoguhr
 
Hallo MrFish,
Du solltest Dir angewöhnen aus den Variablen Objektfelder zu machen.
So wie Du die Variablen jetzt deklariert hats handelt es sich um Globale-Variablen.
In der OOP gehören Globale-Variablen zu den 42 Totsünden.
Code:
SecWinkel : integer;
  MinWinkel : Integer;
  StdWinkel : Integer;
  SecWinkelAlt : integer;
  MinWinkelAlt : integer;
  StdWinkelAlt : integer;
  Zeit : String;
  XPos : integer;
  YPos : Integer;
  Std : Integer;
  Min : Integer;
  Sec : Integer;
Wenn Du die Variablen als Objektfelder deklarierst würde Deine Formularklasse wie folgt aussehen:
Delphi-Quellcode:
  TAnaloguhr = class(TForm)
    Edit1: TEdit;
    Uhr: TTimer;
    procedure UhrTimer(Sender: TObject);
  private
    { Private-Deklarationen }
    FMinWinkel : Integer;
    FStdWinkel : Integer;
    FSecWinkelAlt : integer;
    FMinWinkelAlt : integer;
    FStdWinkelAlt : integer;
    FZeit : String;
    FXPos : integer;
    FYPos : Integer;
    FStd : Integer;
    FMin : Integer;
    FSec : Integer;
  public
    { Public-Deklarationen }
  end;
Jetzt musst Du noch im Source vor die Variablen das F schreiben. Das F gehört zu einer Nameskonvention. Alle Objektfelder sollten mit einem großen F beginnen. So wie alle Klassen mit einem großen T beginnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr.
Seite 1 von 5  1 23     Letzte »    

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