Autor Beitrag
bLubZo_0r
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 10.03.09 00:55 
Huhu jungs ich habe mal eine frage und zwar habe ich bisher folgendes pogrammiert :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
//Minutenzeiger ################################################################
pen.Width := 2;
pen.color := clwhite;
x_pt := 250 + round (200*cos((sekpos*0.1+90)*pi/180.0));
y_pt := 250 - round (200*sin((sekpos*0.1+90)*pi/180.0));
moveto(250,250);
lineto(x_pt,y_pt);
brush.Color := clblack;
winkel := tim_sekpos.tag *0.1/-180*pi;
x := round(sin(winkel)*150);
y := -round(cos(winkel)*150);
pbx_uhr.Canvas.Rectangle(x+240,y+240,x+260,y+260);


Es läuft alles wunderbar :D aber ich wollte halt das die zeiger sich an die systemzeit anpassen =) aber wie ?

Hab mir gedacht das ihr mir weiterhelfen könnt :D

TY schon mal im vorraus.... :shock:

Moderiert von user profile iconChristian S.: Highlight- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 10.03.09 01:14 
Bitte benutze delphi-Tags statt highlight-Tags, du siehst doch wie das so aussieht, wie soll man da etwas lesen können? ;-)
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG84bc4f2dd1d6116b630ebf5fd2fda82f}</span></span>					
user profile iconbLubZo_0r hat folgendes geschrieben Zum zitierten Posting springen:
Es läuft alles wunderbar :D aber ich wollte halt das die zeiger sich an die systemzeit anpassen =) aber wie ?
Dann benutzt du doch bereits Werte. Du weißt also wie du zu bestimmten Werten die Anzeige machst, oder?

Also wo ist das Problem? Beim Ermitteln der Sekunden usw. aus der Systemzeit?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
uses
  DateUtils;

// und dann:
SecondsOf(now)
bLubZo_0r Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 10.03.09 01:32 
Also das Problem ist das ich die schon vorhandenen Zeiger (Sek,Min,Std) habe. Aber ich will sie mit der Systemzeit verbinden, so dass ich in den Zeigern die aktuelle Systemzeit lesen kann. Der aktuelle QT sieht so aus
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
unit UhrUnit1;

interface

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

type
  TUhrForm = class(TForm)
    pbx_uhr: TPaintBox;
    tim_sekpos: TTimer;
    lbl_zeit: TLabel;
    procedure pbx_uhrClick(Sender: TObject);
    procedure pbx_uhrPaint(Sender: TObject);
    procedure tim_sekposTimer(Sender: TObject);
  private
    procedure zeigezeit(sekpos: integer);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  UhrForm: TUhrForm;
  sek,min,std : array [0..3of TPoint;
implementation

{$R *.dfm}

procedure TUhrForm.pbx_uhrClick(Sender: TObject);
begin
if (tim_sekpos.enabled = false) then tim_sekpos.enabled := true
                                else tim_sekpos.enabled := false;
end;

procedure TUhrForm.zeigezeit(sekpos: integer);
var y_pt, x_pt, x, y :integer;
    winkel           :double;
begin
with  pbx_uhr.canvas do
begin
pen.Color := clblack;
brush.color := clblack;
ellipse(20,20,480,480);
font.Color := claqua;
font.Size := 23;
textout(233,-8,'12');
textout(480,230,'3');
textout(240,468,'6');
textout(1,230,'9');
// Sekundenzeiger ##############################################################
tim_sekpos.tag := tim_sekpos.tag *1;
pbx_uhr.Canvas.pen.Width := 1;
pbx_uhr.Canvas.pen.Color   := claqua;
pbx_uhr.Canvas.brush.Color := clblack;
sek[0].X :=250;
sek[0].Y :=250;
sek[1].X :=250+round(160*sin((-4.0+tim_sekpos.tag*6) *pi/-180));
sek[1].Y :=250-round(160*cos((-4.0+tim_sekpos.tag*6) *pi/-180));
sek[2].X :=250+round(220*sin((     tim_sekpos.tag*6)  *pi/-180));
sek[2].Y :=250-round(220*cos((     tim_sekpos.tag*6)  *pi/-180));
sek[3].X :=250+round(160*sin(( 4.0+tim_sekpos.tag*6) *pi/-180));
sek[3].Y :=250-round(160*cos(( 4.0+tim_sekpos.tag*6) *pi/-180));
pbx_uhr.Canvas.polygon(sek);
{pen.Width := 1;
pen.color := claqua;
x_pt := 250 + round (220*cos((sekpos*6.0+90)*pi/180.0));
y_pt := 250 - round (220*sin((sekpos*6.0+90)*pi/180.0));
moveto(250,250);
lineto(x_pt,y_pt);
brush.Color := clblack;
winkel := tim_sekpos.tag *6/-180*pi;
x := round(sin(winkel)*180);
y := -round(cos(winkel)*180);
ellipse(x+240,y+240,x+260,y+260);}

//Minutenzeiger ################################################################
pen.Width := 2;
pen.color := clwhite;
x_pt := 250 + round (200*cos((sekpos*0.1+90)*pi/180.0));
y_pt := 250 - round (200*sin((sekpos*0.1+90)*pi/180.0));
moveto(250,250);
lineto(x_pt,y_pt);
brush.Color := clblack;
winkel := tim_sekpos.tag *0.1/-180*pi;
x := round(sin(winkel)*150);
y := -round(cos(winkel)*150);
pbx_uhr.Canvas.Rectangle(x+240,y+240,x+260,y+260);
// Stundenzeiger ###############################################################
pen.Width := 3;
pen.color := clblue;
x_pt := 250 + round (180*cos((sekpos*0.0083+90)*pi/180.0));
y_pt := 250 - round (180*sin((sekpos*0.0083+90)*pi/180.0));
moveto(250,250);
lineto(x_pt,y_pt);
brush.Color := clblack;
winkel := tim_sekpos.tag *0.0083/-180*pi;
x := round(sin(winkel)*120);
y := -round(cos(winkel)*120);
ellipse(x+240,y+240,x+260,y+260);
end;
end;

procedure TUhrForm.pbx_uhrPaint(Sender: TObject);
var wg, wb, rd, x_gr, y_gr              : extended;
    i, x_pt, y_pt, x, y                 : integer;
    winkel                              : double;
begin
with pbx_uhr.canvas do
begin
// Inistalisierung #############################################################
brush.color := clblack;
ellipse(0,0,499,499);
wg   := 0.0;
wb   := 0.0;
rd   := 240.0;
x_gr := 0;
y_gr := 0;
x_pt := 0;
y_pt := 0;
pen.Width := 3;
pen.color := cllime;
brush.color := cllime;
// Bogenmaßberechnung ##########################################################
for i := 0 to 59 do
  begin
  wg   := i*6.0;
  wb   := wg*pi/180.0;
  x_gr := rd*cos(wb);
  y_gr := rd*sin(wb);
  x_pt := 250 + round(x_gr);
  y_pt := 250 - round(y_gr);
  // Zeichen der Makierungen ###################################################
    if (i mod 5 = 0)
    then ellipse (x_pt-5,y_pt-5,x_pt+5,y_pt+5)
    else ellipse (x_pt-1,y_pt-1,x_pt+1,y_pt+1);
    end;
    zeigezeit(0);
    end;
    end;
procedure TUhrForm.tim_sekposTimer(Sender: TObject);
begin
// DigitalUhr ##################################################################
lbl_zeit.Caption := FormatDateTime('hh:nn:ss                                 dd.mm.yyyy',+now);
//lbl_zeit.caption := TimeToStr(now)+' Uhr';
tim_sekpos.tag := tim_sekpos.tag -1;
if (tim_sekpos.tag = 60then tim_sekpos.tag := 0;
zeigezeit(tim_sekpos.tag);
end;
end.


TY im vorraus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 10.03.09 01:38 
user profile iconbLubZo_0r hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
if (tim_sekpos.enabled = false) then					
Der Vergleich mit Booleanwerten (z.B. if x = true then) ist nicht nur unschön und unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
www.delphi-forum.de/....php?p=548760#548760
Mehr dazu steht hier:
www.delphi-treff.de/...olean-werten/page/4/
Richtig wäre es in deinem Fall so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TUhrForm.pbx_uhrClick(Sender: TObject);
begin
  if not tim_sekpos.Enabled then
    tim_sekpos.Enabled := true
  else
    tim_sekpos.Enabled := false;
end;
Oder direkt so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TUhrForm.pbx_uhrClick(Sender: TObject);
begin
  im_sekpos.Enabled := not tim_sekpos.Enabled;
end;


Jetzt zu dem anderen Problem:
Ich habe oben ja bereits geschrieben wie du die Sekunden bekommst. Genauso geht es mit Minuten und Stunden. Eine Sekunde entspricht 360/60 = 6 Grad. Das heißt du multiplizierst den Sekundenwert mit 6 um den Winkel in Grad zu erhalten.
Analog entspricht eine Stunde 360/12 = 30 Grad.