Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas.LineTo ändert nicht Farbe (https://www.delphipraxis.net/36581-canvas-lineto-aendert-nicht-farbe.html)

DevilsCamp 22. Dez 2004 07:47


Canvas.LineTo ändert nicht Farbe
 
ich habe in meinem Programm folgenden Code:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
   r,g,b: Byte;
   rt: TRect;
begin
   r := Random(256);
   g := Random(256);
   b := Random(256);
   Label1.Caption := Format('R = %d, G = %d, B = %d', [r,g,b]);

   Canvas.Brush.Style  := bsSolid;
   Canvas.Brush.Color  := RGB(r,g,b);
   rt.Left := 1;
   rt.Top  := 1;
   rt.Right := 40;
   rt.Bottom  := 40;
   Canvas.FillRect(rt);
   Canvas.MoveTo(0,0);
   Canvas.LineTo(x,y);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
end;
Nun erwartet man doch, dass mit jeder Bewegung der Maus die Farbe der Linie per Zufall gesetzt wird.
Jedoch behält die Linie IMMER die Farbe Schwarz, obwohl das Label nicht 'R = 0, G = 0, B = 0' ausgibt und das gefüllte Rechteck auch die entsprechende Farbe besitzt. Wie kann ich also eine Linie zeichnen, die die gewünschte Farbe besitzt?

SirThornberry 22. Dez 2004 07:49

Re: Canvas.LineTo ändert nicht Farbe
 
die farbe ändert sich nicht weil die Farbe für LineTo mit Canvas.Pen.Color gesetzt werden muss und nicht mit Canvas.Brush.Color

DevilsCamp 22. Dez 2004 07:58

Re: Canvas.LineTo ändert nicht Farbe
 
danke.

Matze1505 9. Apr 2011 23:22

Guten Morgen zusammen,

entschuldigt bitte, dass ich diesen etwas älteren Thread wieder auskrame. Ich habe aber einer Erklärung dafür [:P]: habe keine Ergebnisse gefunden über Google und der Referenz-Suche, die mich weiterbringen.

Also mein Problem ist, dass der besagte Canvas.Pen nicht die Farbe darstellt, die ich ihm zugewiesen habe.

So hab ich es in meinem Code eingebunden.

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Step := 1;
  Const_X := 44;
  Const_Y := 147;
  imGraphOut.Canvas.Pen.Color := RGB( 33, 0, 127 );
  imGraphOut.Canvas.MoveTo( Const_X, Const_Y );
end;

procedure TForm1.tiTimerTimer(Sender: TObject);
begin
  IF imGraphOut.Canvas.PenPos.X > ( Const_X + 120 ) THEN
    imGraphOut.Left := ( imGraphOut.Left - 1 );
  imGraphOut.Canvas.LineTo( Const_X + Step, Const_Y - Random ( 140 ) );
  INC( Step );
end;
Wo liegt der Fehler? Oder gibt es keinen? :?:

Schönen Morgen euch allen noch und vielen Dank schonmal im Voraus für die Hilfe.

Gruß,
Marcel

himitsu 10. Apr 2011 00:28

AW: Canvas.LineTo ändert nicht Farbe
 
Zitat:

Zitat von Matze1505 (Beitrag 1094183)
Wo liegt der Fehler?

Zwischen Create und dem Timer werden noch andere Zeichenoperationen ausgeführt
und dabei wird auch die Farbe verändert. :zwinker:

PS: Es wird/könnte auch die Position, des Zeichencursors verändert werden und nicht nur die Farbe.

Lösung: zusammenhängende Zeichenoperationen gehören auch zusammen.

Matze1505 10. Apr 2011 19:57

AW: Canvas.LineTo ändert nicht Farbe
 
Alles klar. Vielen Dank.
Dann muss ich mal schauen, wie ich das alles in den Timer eingebaut bekomme...

Edit:
So, ich hab es geändert, aber der Stift bleibt immernoch schwarz. Jetzt weiß ich nichtmehr weiter...

Code:
procedure TFahrtenschreiber.FormCreate(Sender: TObject);
begin
  [...]
  FirstRunTimer := True;
  [...]
end;

procedure TFahrtenschreiber.tiTimerTimer(Sender: TObject);
begin
  IF FirstRunTimer = True THEN
  begin
    imGraphOut.Canvas.Pen.Color := RGB( 33, 0, 127 );
    imGraphOut.Canvas.MoveTo( Const_X, Const_Y );
  end;
  FirstRunTimer := False;
  IF ( imGraphOut.Canvas.PenPos.X > ( Const_X + 120 ) ) AND ( imGraphOut.Canvas.PenPos.X < ( Const_X + 1220 ) ) THEN
    imGraphOut.Left := ( imGraphOut.Left - 1 );
  imGraphOut.Canvas.LineTo( Const_X + Step, Const_Y - Random ( 140 ) );
  INC( Step );
end;
Gut, ist bestimmt nicht die sauberste Lösung, aber ich weiß es nicht besser zu lösen. :)

Woran könnte es denn noch liegen, dass der Stift immernoch schwarz ist und bleibt?

Schönen Abend noch.

Matze 10. Apr 2011 21:28

AW: Canvas.LineTo ändert nicht Farbe
 
Wie wäre es, wenn du das auch wirklich zusammenhängend ausführen würdest?
Delphi-Quellcode:
//...
imGraphOut.Canvas.Pen.Color := RGB(33, 0, 127);
imGraphOut.Canvas.LineTo(Const_X + Step, Const_Y - Random(140));
// ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz