AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Canvas.LineTo ändert nicht Farbe
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas.LineTo ändert nicht Farbe

Offene Frage von "Matze"
Ein Thema von DevilsCamp · begonnen am 22. Dez 2004 · letzter Beitrag vom 10. Apr 2011
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Canvas.LineTo ändert nicht Farbe

  Alt 22. Dez 2004, 08:47
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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Canvas.LineTo ändert nicht Farbe

  Alt 22. Dez 2004, 08:49
die farbe ändert sich nicht weil die Farbe für LineTo mit Canvas.Pen.Color gesetzt werden muss und nicht mit Canvas.Brush.Color
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: Canvas.LineTo ändert nicht Farbe

  Alt 22. Dez 2004, 08:58
danke.
  Mit Zitat antworten Zitat
Matze1505

Registriert seit: 10. Apr 2011
Ort: Nordrhein-Westfalen
2 Beiträge
 
Delphi 7 Personal
 
#4
  Alt 10. Apr 2011, 00:22
Guten Morgen zusammen,

entschuldigt bitte, dass ich diesen etwas älteren Thread wieder auskrame. Ich habe aber einer Erklärung dafür []: 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
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Canvas.LineTo ändert nicht Farbe

  Alt 10. Apr 2011, 01:28
Wo liegt der Fehler?
Zwischen Create und dem Timer werden noch andere Zeichenoperationen ausgeführt
und dabei wird auch die Farbe verändert.

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.
$2B or not $2B

Geändert von himitsu (10. Apr 2011 um 01:32 Uhr)
  Mit Zitat antworten Zitat
Matze1505

Registriert seit: 10. Apr 2011
Ort: Nordrhein-Westfalen
2 Beiträge
 
Delphi 7 Personal
 
#6

AW: Canvas.LineTo ändert nicht Farbe

  Alt 10. Apr 2011, 20:57
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.
Marcel

Geändert von Matze1505 (10. Apr 2011 um 21:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Canvas.LineTo ändert nicht Farbe

  Alt 10. Apr 2011, 22:28
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));
// ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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