![]() |
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
|
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:
|
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:
Der Hintergrund Ziffernblatt MUSS immer wieder neu gezeichnet werden, sonst hast du natürlich irgendwann 60 Sekundenstriche darauf...
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; 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! |
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? |
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!!!!!!!!!!!!!!!!!! |
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:
Das bewirkt, dass zunächst erstmal wieder ein nackter Kreis gemalt wird, auf dem dann anschliessend wieder die Ziffern, Teilstriche etc gepinslet werden!
// Hintergrund Ziffernblatt
Canvas.Pen.Color:=clsilver; Canvas.Brush.Color:=clsilver; Canvas.Ellipse(575,272,703,390); //Ziffern malen etc ... 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... |
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:
(ungetestet, einfach mal so runtergetippert)
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; Du hast mehrfach im Programm immer wieder Berechnung, die könntest du damit zusammenfassen:
Delphi-Quellcode:
"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.
// Sekundenzeiger
GetCoors(sec * 6, r, x, y); Canvas.Pen.Color:=clblack; Canvas.Pen.Width:=1; Canvas.MoveTo(639,331); Canvas.LineTo(x,y); 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:31 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