![]() |
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 |
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.
|
Re: Analoguhr
Liste der Anhänge anzeigen (Anzahl: 1)
Ist gemacht.
Hätte ich auch selbst drauf kommen können. :wall: |
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 |
Re: Analoguhr
Liste der Anhänge anzeigen (Anzahl: 1)
Nächster Versuch.
|
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 |
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
Dieses Thema wurde von "Daniel" von "Sonstige Fragen zu Delphi" nach "Open-Source" verschoben.
|
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.
|
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:
Wenn Du die Variablen als Objektfelder deklarierst würde Deine Formularklasse wie folgt aussehen:
SecWinkel : integer;
MinWinkel : Integer; StdWinkel : Integer; SecWinkelAlt : integer; MinWinkelAlt : integer; StdWinkelAlt : integer; Zeit : String; XPos : integer; YPos : Integer; Std : Integer; Min : Integer; Sec : Integer;
Delphi-Quellcode:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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