| Autor |
Beitrag |
Mattes
      
Beiträge: 21
|
Verfasst: Do 12.06.03 20:33
Hallo,
ist es möglich, Canvas-Linien, die z.Zt.als Uhrzeiger einer analogen Uhr eingesetzt werden, mehrfarbig zu machen?
So soll z.B.ein schwarzumrandeter, weißer Zeiger statt nur einer pixeligen weißen Linie dargestellt werden.
Oder kann man einen Uhrzeiger als Grafik einbinden, die sich mit der Uhrzeit dreht?
Fragen über Fragen - Danke schon mal!
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Do 12.06.03 21:21
Hi,
klar geht das. Zeichne doch einfach ein schmales Rechteck mit schwarzem Rand und weisser Füllung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| with Canvas do begin Pen.Color := clBlack; Brush.Color := clWhite; Rectangle(x, y, x1, y1); end; |
MFG
- Ernesto -
|
|
Mattes 
      
Beiträge: 21
|
Verfasst: Fr 13.06.03 09:26
Hm, funktioniert leider nicht so, wie ich dachte.
So sehen meine Zeiger die zeitabhängig "wandern" aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with Image4 do begin Canvas.Pen.Color := clWhite; Canvas.Pen.Width := 4; Canvas.Ellipse(0, 0, Width - 0, Height - 0); Canvas.Pen.Color := clSilver; i := strtoint(FormatDateTime('h',now)) *5; Canvas.MoveTo(Width div 2, Height div 2); x := trunc(cos(pi/180 * (i * 6 - 90)) * (Width div 3 - 15) + Width div 2); y := trunc(sin(pi/180 * (i * 6 - 90)) * (Height div 3 - 15) + Height div 2); Canvas.LineTo(X,Y); end; |
Befinden tun sie sich in einer Ellipse:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| with Image4 do begin Canvas.Ellipse(0,0,Width,height); for i := 0 to 59 do begin x := trunc(cos(pi/180 * (i * 6 - 90)) * (Width div 2) + Width div 2); y := trunc(sin(pi/180 * (i * 6 - 90)) * (Height div 2) + Height div 2); Canvas.MoveTo(Width div 2, Height div 2); Canvas.LineTo(X,Y); end; |
Was mache ich falsch, denn entweder wird die Ellipse bunt oder es passiert gar nix neues, wenn ich deinen Code einarbeite?
Moderiert von tommie-lie: Code- durch Delphi-Tags ersetzt
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mi 18.06.03 19:39
Hallo,
man kann doch kein Rect als Zeiger nehmen *argh*!!! Der Zeiger soll sich doch drehen, dass kann ein Rect nicht.
Ich würde es so machen: Stelle Canvas.Pen.Width auf 3, Color auf schwarz, zeichne den Zeiger. Dann Canvas.Pen.Width auf 2, Farbe weiß, nochmal zeichnen. Fertig, weißer Zeiger mit schwarzem Rand. Sogar leicht abgerundete Enden.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
Mattes 
      
Beiträge: 21
|
Verfasst: Do 19.06.03 15:28
Hm, das funktioniert so irgendwie nicht. Hättest Du mal nen Quelltext, vielleicht mache ich ja was falsch?

|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Do 19.06.03 15:51
Hallo,
klar, gerne:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure DrawBorderedLine(X1, Y1, X2, Y2: Integer; Canvas: TCanvas); begin Canvas.Pen.Width := 5; Canvas.Pen.Color := clBlack; Canvas.MoveTo(X1, Y1); Canvas.LineTo(X2, Y2);
Canvas.Pen.Width := 2; Canvas.Pen.Color := clWhite; Canvas.MoveTo(X1, Y1); Canvas.LineTo(X2, Y2); end; |
Und zeichnen z.b. mit:
Delphi-Quelltext 1:
| DrawBorderedLine(5, 5, 50, 25, PaintBox1.Canvas); |
Die Koordinaten musst du natürlich mit Sin() und Cos() aus der Uhrzeit berechnen, logisch.
Die Werte von "Canvas.Pen.Width" kannst auch verändern, aber der 2. Wert MUSS kleiner sein als der erste.
Moderiert von tommie-lie: Code- durch Delphi-Tags ersetzt
_________________ Life is a bad adventure, but the graphic is really good!
|
|
|