Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ich brauch dringende Hilfe bei meiner Analog Uhr!!!!! (https://www.delphipraxis.net/89441-ich-brauch-dringende-hilfe-bei-meiner-analog-uhr.html)

naschkatze1987 31. Mär 2007 00:44


ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi Experten!

Ich habe ein Problem mit meiner Analog Uhr. Und zwar muss ich für Info eine Analog Uhr erstellen mit ansprechendem Hintergrund. Analog Uhr und Hintergrund hab ich eigentlich fertig, nur ich kann sie nicht zusammenfügen :wall:
Meinen Hintergrund hab ich in einen Button gehauen und die Uhr in ein Timer, is mir klar dass das so nicht zusammen laufen kann, aber ich weiß nicht wie ich das machen soll.
Könnt ihr mir bitte bitte helfen? bin am verzweifeln...

Ich hab mein Projekt angehangen, damit ihr mir auch alle helfen könnt :-D

Schonmal DANKE im Vorraus!!!

delphis spassbremse 31. Mär 2007 01:10

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Such mal nach der PLNClock.pas im Internet...
Downloaden - in Delphi installieren - fertig..

Dann haste oben in der leiste nen neues Komponentenbild...


Also die Uhr ist wirklich klasse, weil sie hat auch so ne
anzeige, das kein "Ticken" angezeigt wird, sondern der
Zeiger flüssig durchläuft^^

MFG

SirTwist 31. Mär 2007 09:46

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Guten Morgen,

Zitat:

Zitat von naschkatze1987
Meinen Hintergrund hab ich in einen Button gehauen

Nimm für das Hintergrundbild doch ein TImage. Wie zeichnest Du denn deine Uhrzeiger?

Gruß,
Michael

naschkatze1987 31. Mär 2007 12:30

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Und wie mach ich das mit dem TImage?
Na die Zeiger mach ich mit MoveTo und LineTo in nem Timer...

naschkatze1987 31. Mär 2007 12:34

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Zitat:

Zitat von delphis spassbremse

Such mal nach der PLNClock.pas im Internet...
Downloaden - in Delphi installieren - fertig..

MFG

also ich hab jetzt PLNClock.pas bei Google eingegebn, da kam leider nix raus :(

fLaSh11 31. Mär 2007 12:48

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
versuchs mal ohne das .pas

naschkatze1987 31. Mär 2007 12:58

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
also ich hab jetzt die pas, aber was fang ich damit an?

ich weiß auch nich, ob ich das nutzen darf von meiner Lehrerin aus :?:

fLaSh11 31. Mär 2007 13:03

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Zitat:

Zitat von naschkatze1987
ich weiß auch nich, ob ich das nutzen darf von meiner Lehrerin aus :?:

Ja, das solltest du zuerst klären ;)

edit: Wenn nicht, machs wie vorher schon erklärt. Nimm ein TImage mit einem Ziffernblatt und zeichne da einen kurzen und einen langen Strich drauf. Den Winkel kannste dir anhand der Uhrzeit ausrechnen.

naschkatze1987 31. Mär 2007 13:04

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
geht das denn nicht anders? wie funzt das denn mit dem TImage?

uwewo 31. Mär 2007 13:08

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
TImage auf dieForm und im OI das gewünschte Picture wählen.

Manchmal hilft auch die Taste F1

elundril 31. Mär 2007 13:12

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
guckst du hier!!

Luckie (auch hier im Forum vertreten) hat eine schöne website wo das alles schön steht!

Aber nicht nur abschreiben! Auch verstehen! ich erwarte minderstens zwei Fragen den Code betreffend!

lg el

naschkatze1987 31. Mär 2007 13:14

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Danke, aber den Quelltext hab ich auch schon gefunden und bin leider nich schlau draus geworden... bin ebn nich so n delphi experte...

naschkatze1987 31. Mär 2007 13:16

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Zitat:

Zitat von uwewo
TImage auf dieForm und im OI das gewünschte Picture wählen.

also TImage ist drauf, aber kapier nich wie ich mein Bild da jetzt rein kriegn soll überm Objektinspektor....
Das Bild muss ja auch mit Canvas gemalt sein, das hab ich ja schon, aber uhr und bild zusammen, WIE GEHT DAS????? ich kriegs einfach nich hin...

uwewo 31. Mär 2007 13:18

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Ok, dacht Du willst eine fertiges Bild als Uhr verwenden.
Wenn Du selbst zeichnest dann eben auf Image1.Canvas

naschkatze1987 31. Mär 2007 13:20

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
also das heiß anstatt nur Canvas.Ellipse oder so was schreib ich dann noch Image1. davor?

uwewo 31. Mär 2007 13:24

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Manchmal kann man auch zuerst etwas tesen, und erst dann wenn es nicht funktioniert wieder Hilfe schreien. Sorry, aber ich denke Die fehlen einfach die Grundlagen, die kann man sich aber auch durch lesen von Tutorials aneignen.

naschkatze1987 31. Mär 2007 13:29

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
ich wills aber nich zig mal falsch machen, sondern gleich richtig, deswegn frag ich lieber nach und hier sind ja viele Leute, die mir helfen wollen und die sich besser auskennen mit Delphi als ich und mir auch gern ihr wissen gebn, oder etwa nicht?
Dazu ist das Forum doch da...

naschkatze1987 31. Mär 2007 13:31

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
super es klappt, hättst ja auch einfach sagn können, dass du das so meinst...

wie krieg ich das flackern jetzt noch weg?

mit doublebuffered funzt das bei mir nich...

raiguen 31. Mär 2007 13:53

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
@naschkatze:

Wenn du 2 kleine Änderungen in deinem geposteten Code machst, dann hast du das gewünschte Ergebnis:

1. In der Procedure BitBtn2Click nimmst du das u.a. raus und kopierst das in die Procedure Timer1Timer
2. Aus der Prozedure Timer1Timer die Zeile mit dem Refresh löschen; das Refresh bewirkt, dass der erstellte Hintergrund mit dem gezeichneten BigBen verschwindet und nur die Uhr angezeigt wird ;)
Delphi-Quellcode:

     //--geändert
     {--wird nach Timer1Timer verschoben
     Pen.Color:=clsilver;
     Brush.Color:=clsilver;
     Ellipse(575,272,703,390);
     }
...
procedure TForm1.Timer1Timer(Sender: TObject);
var winkel               : real;
    x, y, x1, y1, r, i   : Integer;
    hour, min, sec, msec : Word;
begin

 Form1.Caption:=DateTimeToStr(Now);

 //Refresh; <--- das haut dir den zuvor melaten Hintergrund etc wieder weg!!
 

 DecodeTime(Now, hour, min, sec, msec);

 r:=60;
 
    //--hier den Kreis für das Zifferblatt neu malen!!
    Canvas.Pen.Color:=clsilver;
    Canvas.Brush.Color:=clsilver;
    Canvas.Ellipse(575,272,703,390);

// Ziffern
...

end;
@ an die anderen: Sorry, aber wenn ihr euch mal 5 Minuten an den Code von naschkatze gesetzt hättet, dann wären euch die kleinen Fehler aufgefallen und ihr hättet eure netten Kommentare sparen können. Sicherlich sind Grundalgen für angehende Delphianer durchaus sinnvoll,, davon mal abgesehen...

naschkatze1987 31. Mär 2007 14:02

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Vieloen Dank, ich habs mal ausprobiert und irgendwie klappts nich, entweder hab ich mal wieder was falsch gemacht :oops: oder das geht doch nich so, das refresh brauch ich ja eig für die Uhr, oder?
Ich mein das Bild is jetzt immer da, aber die leider nicht mehr....

Ich habs ja jetzt auch schon mit nem TImage gelöst, aber jetzt flakert das Bild und da ich Delphi 3 hab, geht das mit doublebuffered nicht weg :(

Aber vllt könnt ihr mir ja helfen

naschkatze1987 31. Mär 2007 14:07

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist mein Quelltext:

Delphi-Quellcode:

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 close
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var i, k : integer;
begin
 Bitbtn1.visible:=false;
 k:=0;
 Timer1.Enabled:=true;

with Image1.canvas do
 BEGIN
   brush.color:=clblack;
   Rectangle(0,485,825,600);

//Himmel
  For i:=0 to 485 do
    Begin
      Pen.Color:=$00C293F0;
      MoveTo(0,i);
      LineTo(825,i);
    End;


 Repeat
  Pixels[random(clientwidth),random(100)]:=$00CA7ABB;
  inc(k)
 Until k=100000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(200)]:=$00CA7ABB;
  inc(k)
 Until k=100000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(300)]:=$00CA7ABB;
  inc(k)
 Until k=100000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(400)]:=$00CA7ABB;
  inc(k)
 Until k=100000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(486)]:=$00CA7ABB;
  inc(k)
 Until k=100000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(100)]:=$00C46B97;
  inc(k)
 Until k=20000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(200)]:=$00C46B97;
  inc(k)
 Until k=40000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(300)]:=$00C46B97;
  inc(k)
 Until k=50000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(400)]:=$00C46B97;
  inc(k)
 Until k=60000;

  k:=0;

 Repeat
  Pixels[random(clientwidth),random(486)]:=$00C46B97;
  inc(k)
 Until k=80000;


// Big Ben
 Pen.Color:=clblack;
 Brush.Color:=clblack;
 Polygon([Point(655,16),Point(622,110),Point(682,110)]);

 Pen.Color:=$0038383838;
 Brush.Color:=$0038383838;
 Rectangle(619,111,677,119);

 Pen.Color:=clblack;
 Brush.Color:=clblack;
 Polygon([Point(617,118),Point(677,118),Point(677,111),Point(680,105),Point(690,118),Point(690,166),Point(681,166),Point(681,127),Point(617,127)]);

 Pen.Color:=$0038383838;
 Brush.Color:=$0038383838;
 Rectangle(619,128,681,167);

 Pen.Color:=clblack;
 Brush.Color:=clblack;
 Polygon([Point(614,166),Point(691,167),Point(716,219),Point(590,219)]);

 Pen.Color:=$0038383838;
 Brush.Color:=$0038383838;
 Rectangle(587,220,702,228);

 Pen.Color:=clblack;
 Brush.Color:=clblack;
 Polygon([Point(578,227),Point(702,227),Point(702,220),Point(716,220),Point(716,233),Point(727,233),Point(728,267),Point(737,272),Point(737,412),Point(734,412),Point(730,417),Point(730,417),Point(730,600),Point(706,600),Point(706,400),Point(712,396),Point(712,239),Point(578,239)]);

 Pen.Color:=$0038383838;
 Brush.Color:=$0038383838;
 Polygon([Point(579,240),Point(711,240),Point(711,396),Point(705,401),Point(705,580),Point(570,580),Point(570,400),Point(567,400),Point(567,264),Point(570,264),Point(570,258),Point(579,255)]);

 Pen.Color:=clgray;
 Brush.Color:=clgray;
 Rectangle(571,268,709,395);
 Pen.Color:=clsilver;
 Brush.Color:=clsilver;
 Ellipse(575,272,703,390);

 END;

end;



procedure TForm1.Timer1Timer(Sender: TObject);
var winkel               : real;
    x, y, x1, y1, r, i   : Integer;
    hour, min, sec, msec : Word;
begin
 Form1.Caption:=DateTimeToStr(Now);

 Refresh;

 DecodeTime(Now, hour, min, sec, msec);

 r:=60;

// Ziffern
Canvas.Font.Size:=2;
Canvas.Textout(665,283,'I');
Canvas.Textout(680,300,'II');
Canvas.Textout(685,325,'III');
Canvas.Textout(679,351,'IV');
Canvas.Textout(663,368,'V');
Canvas.Textout(635,375,'VI');
Canvas.Textout(606,368,'VII');
Canvas.Textout(590,351,'VIII');
Canvas.Textout(584,325,'IX');
Canvas.Textout(593,300,'X');
Canvas.Textout(610,282,'XI');
Canvas.Textout(635,275,'XII');


// Sekundenzeiger
 winkel:=sec* ((2*pi) / 60) - pi/2;

 x:=Trunc(cos(winkel)*r);
 y:=Trunc(sin(winkel)*r);

 x:=x+(639);
 y:=y+(331);

 Canvas.Pen.Color:=clblack;
 Canvas.Pen.Width:=1;
 Canvas.MoveTo(639,331);
 Canvas.LineTo(x,y);

//Minutenzeiger
 winkel:=min* ((2*pi) / 60) - pi/2;

 x:=Trunc(cos(winkel)*r*0.9);
 y:=Trunc(sin(winkel)*r*0.9);

 x:=x+(639);
 y:=y+(331);

 Canvas.Pen.Width:=2;
 Canvas.MoveTo(639,331);
 Canvas.LineTo(x,y);

//Stundenzeiger
 IF hour>12 THEN hour:=hour-12;
 winkel:=(hour*(2*pi) / 12) + (min*(2*pi) / 720) - pi/2;

 x:=Trunc(cos(winkel)*r*0.6);
 y:=Trunc(sin(winkel)*r*0.6);

 x:=x+(639);
 y:=y+(331);

 Canvas.Pen.Width:=3;
 Canvas.MoveTo(639,331);
 Canvas.LineTo(x,y);

// Ziffernstriche
FOR i:=0 TO 11 DO
begin
 winkel:=i*((2*pi) / 12) - pi/2;

 x:=Trunc(cos(winkel)*r*1.2);
 y:=Trunc(sin(winkel)*r*1.2);
 x1:=Trunc(cos(winkel)*r);
 y1:=Trunc(sin(winkel)*r);

 x:=x+(639);
 y:=y+(331);
 x1:=x1+(639);
 y1:=y1+(331);

 Canvas.Pen.Width:=2;
 Canvas.MoveTo(x,y);
 Canvas.LineTo(x1,y1);
end;

 // Minutenstriche
FOR i:=0 TO 59 DO
begin
 winkel:=i*((2*pi) / 60) - pi/2;

 x:=Trunc(cos(winkel)*r*1.1);
 y:=Trunc(sin(winkel)*r*1.1);
 x1:=Trunc(cos(winkel)*r);
 y1:=Trunc(sin(winkel)*r);

 x:=x+(639);
 y:=y+(331);
 x1:=x1+(639);
 y1:=y1+(331);

 Canvas.Pen.Width:=1;
 Canvas.MoveTo(x,y);
 Canvas.LineTo(x1,y1);
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled:=false;
end;
und die neue Datei hab ich angehangen...

raiguen 31. Mär 2007 15:17

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Liste der Anhänge anzeigen (Anzahl: 2)
@naschkatze:
Das mit dem Image.Canvas uwsw kannst du getrost vergessen!
Ich häng Dir mal das geänderte Projekt an! Wie gesagt: 2 kleine Änderungen und swchon funktioniert das :-)
Hoffe, das hilft!
Und für alle anderen noch einen Screenshot, wie das aussehen soll ;)

naschkatze1987 31. Mär 2007 15:29

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
das is ja toll und vielen Dank nochma, aber ich glaub mit Delphi3 funzt das nich so, zumindest kann ichs nich richtig öffnen und so... und leider arbeiten wir in der Schule mit Delphi 3...

naschkatze1987 31. Mär 2007 15:44

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Woher nimmstn du FormPaint? Ich weiß nich wie ich da die Procedure reinkriege...

raiguen 31. Mär 2007 15:47

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
:oops: Delphi3 - das hab ich übersehen..
Da in meiner Unit1 eigentlich nur 'Standard'-Routinen benutzt werden, sollte es eigentlich auch mit Delphi 3 funktionieren! Was kannst du nicht öffen bzw welche Fehlermeldung wird angezeigt?

Was du machen kannst ist folgendes:
Die Dateien Unit1.pas, Unit1.dcu und Unit1.dfm DEINES Projektes mit meinen Dateien gleichen Namens ersetzen und anschliessend in Delphi3 dein Projekt starten.. dann sollte es ohne Probleme möglich sein, das gewünschte Ergebnis zu bekommen..

Zum FormPaint:
Im ObjektInspektor der Form auf Ereignisse gehen und bei OnPaint in die rechte Spalte ein Doppelklick machen -> im Quellcode wird die Prozedure FormPaint automatisch reingeschrieben ;)

naschkatze1987 31. Mär 2007 15:52

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
also gut, ich versuchs jetzt mal... hoffe das klappt

naschkatze1987 31. Mär 2007 16:41

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
also leider klappts nicht, ich hab jetzt mein Projekt 1 und 1 an deins angeglichen, und der schaffts nicht ma den himmel richtig aufzubauen, der fängt dann immer wieder von vorn an...
ich häng mal wieder meine datei an, vielleicht hat sich ja doch n fehler eingeschlichn :oops:

Was bedeutet eig Application.ProcessMessages; ???

naschkatze1987 31. Mär 2007 16:45

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Zitat:

Zitat von raiguen
:oops: Delphi3 - das hab ich übersehen..
welche Fehlermeldung wird angezeigt?

Fehler beim Lesen von Form1.Old.CreateOrder: Eigenschaft existiert nicht

raiguen 31. Mär 2007 16:57

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
aahh... klar: diese Eigenschaft kennt Delphi 3 noch nicht...

So, nun zu deinem Problem: Die Zeile Refresh in der Procedure Timer1Time MUSST du LÖSCHEN!!
Warum? Weil das Refresh dir jedesmal den gemalten Hintergrund neu beschreibt...somit bekommst du eine Endlosschleife und dein BigBenn geschweige denn dir Unr wird angezeugt ;)

Application.ProcessMessages bedeutet in diesem Falle, dass alle Zeichenroutinen sofort sichtbar werden und nicht erst am Ende der Prozedure...

naschkatze1987 31. Mär 2007 17:00

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
aber das versteh ich nich, ich hab mir ja viele Quelltexte angeguckt und die nehmen alle Refresh, ohne funzt das bei mir ja auch nicht... mit dem TImage gehts ja nur dass es halt flackert...
hab gelesn dass es mitm Bitmap geht, aber dass hab ich bei delphi leider auch nich gefunden :(

naschkatze1987 31. Mär 2007 17:24

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
wenn ich refresh lösche, dann werdn die zeiger nich gelöscht, d.h. irgendwann is meine ganze uhr voller zeiger... und ich glaub anders kann man das nich lösn

Klomeister 31. Mär 2007 17:44

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
raiguen kannst du mal erklärn warum dein Programm läuft? Ich versth nicht wieso der alte Zeiger, also der von der Zeit vorher nicht einfach stehen bleibt. Meiner meinung braucht man das Refresh damit immer nur der neue Zeiger gezeinet wird, bzw der alte nicht stehn bleibt und man dann ne Uhr voller zeiger hat. Und damit man nicht das ganz Hintergrundbild zeichnen muss speichert mans als TImage. Aebr wieso funktioniert das bei dir ohne refrsh, raiguen? :?: :gruebel:

raiguen 31. Mär 2007 17:52

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
hm... :gruebel: also ich hab's mit deinem letzen Code ausgetestet und es funktioniert einwandfrei!
So muss der Anfang der Timer1Timer-Proz aussehen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var winkel               : real;
    x, y, x1, y1, r, i   : Integer;
    hour, min, sec, msec : Word;
begin
 Form1.Caption:=DateTimeToStr(Now);
 DecodeTime(Now, hour, min, sec, msec);

 r:=60;

// Hintergrund Ziffernblatt
Canvas.Pen.Color:=clsilver;
Canvas.Brush.Color:=clsilver;
Canvas.Ellipse(575,272,703,390);

// Ziffern
...
end;
Der Hintergrund Ziffernblatt MUSS immer wieder neu gezeichnet werden, sonst hast du natürlich irgendwann 60 Sekundenstriche darauf...

Wenn Du meinen Code aus der o.a. Routine entsprechend in Deinem eingearbeitet hast, dann dürftest du keine Probs mehr haben...
Ansonsten sh PN!

Klomeister 31. Mär 2007 17:55

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
Also ums ganz einfach zu formulieren:
Refresh weg und alte Zeiger mit zifferblatt übermalen!
ganz logisch eigentlich warum bin ich da nicht draufgekommen?

naschkatze1987 31. Mär 2007 18:00

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
DANKE DANKE DANKE DANKE DANKE.................

Du bist n Schatz :kiss:

Ich Dummerchen hab vergessn das Ziffernblatt neu zu zeichnen

supi supi supi :-D :mrgreen: :-D

es funktioniert, ich krieg mich gar nicht mehr ein :mrgreen:

DANKESCHÖN!!!!!!!!!!!!!!!!!!

raiguen 31. Mär 2007 18:03

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
@Klomeister:
Das Refresh bewrikt, dass der Hintergrund (Canvas) wieder das alte schnöde Silbergrau hat und letztlich nur die Uhr selber gezeichnet wird! Allerdings mit dem unschönen Effekt, dass irgendwann einmal die Uhr voller Sekundenzeiger ist*gg*

Darum habe ich in der Timer1Timer-Proz das hier zusätzlich eingebaut:
Delphi-Quellcode:
// Hintergrund Ziffernblatt
Canvas.Pen.Color:=clsilver;
Canvas.Brush.Color:=clsilver;
Canvas.Ellipse(575,272,703,390);

//Ziffern malen etc
...
Das bewirkt, dass zunächst erstmal wieder ein nackter Kreis gemalt wird, auf dem dann anschliessend wieder die Ziffern, Teilstriche etc gepinslet werden!

TImage: auf einem nackten Image mittels Canvas malen geht NICHT!!! Erst dann , wenn mit der Eigenschaft .Picture dem IMage ein BMP zugewiesen wird, ist ein Zeichnen von Liniene etc möglich! (siehe auch dazu die Delphi-Hilfe zu TImage -> Eigenchaft Canvas).

Sofern noch nicht geschehen: lade mein letztes gepostetes Projekt runter und schau dir die Routinen an ;)

//EDIT: uups, man kommt mit dem Schreiben kaum nach, so schnell trudeln die Antworten ein :)

OKAY -> es dürften jetzt alle Klarheiten beseitigt sein...

SirTwist 1. Apr 2007 13:05

Re: ich brauch dringende Hilfe bei meiner Analog Uhr!!!!!
 
und als Feintuning könnte man jetzt das Berechnen der Koordinaten noch in eine Prozedur auslagern:

Delphi-Quellcode:
procedure GetCoors(winkel, radius: Float; var x, y: Integer)
begin
  winkel := winkel * pi/180;
  x := 639 + Round(cos(winkel)*radius);
  y := 331 + Round(sin(winkel)*radius);
end;
(ungetestet, einfach mal so runtergetippert)

Du hast mehrfach im Programm immer wieder Berechnung, die könntest du damit zusammenfassen:
Delphi-Quellcode:
  // Sekundenzeiger
  GetCoors(sec * 6, r, x, y);
  Canvas.Pen.Color:=clblack;
  Canvas.Pen.Width:=1;
  Canvas.MoveTo(639,331);
  Canvas.LineTo(x,y);
"sec * 6" deshalb, weil sich die 60 Sekunden auf 360° aufteilen und die eigentliche Berechnung damit sec * 360 / 60 wäre. Und ohne Überprüfung per Taschenrechner wage ich zu behaupten, dass 360/60 = 6 ist.

An dem Himmel müsste man noch feilen, die Übergänge sind zu hart :-D hm, mal basteln...

PS: wenn ich gewusst hätte, dass es als ersten Preis ein Küßchen gab, hätt ich mich mehr ins Zeug gelegt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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