Entwickler-Ecke
Multimedia / Grafik - Canvas-Linien mehrfarbig?
Mattes - Do 12.06.03 20:33
Titel: Canvas-Linien mehrfarbig?
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 - 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 - 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 - 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.
Mattes - Do 19.06.03 15:28
Hm, das funktioniert so irgendwie nicht. Hättest Du mal nen Quelltext, vielleicht mache ich ja was falsch?
:shock:
Andreas Pfau - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!