Autor Beitrag
Mattes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 12.06.03 21:21 
Hi,

klar geht das. Zeichne doch einfach ein schmales Rechteck mit schwarzem Rand und weisser Füllung:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 13.06.03 09:26 
Hm, funktioniert leider nicht so, wie ich dachte.

So sehen meine Zeiger die zeitabhängig "wandern" aus:

ausblenden 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(00, 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:

ausblenden 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 user profile icontommie-lie: Code- durch Delphi-Tags ersetzt
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Do 19.06.03 15:51 
Hallo,

klar, gerne:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
 DrawBorderedLine(555025, 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 user profile icontommie-lie: Code- durch Delphi-Tags ersetzt

_________________
Life is a bad adventure, but the graphic is really good!