Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem mit Paintbox1.Canvas.Pixels (https://www.delphipraxis.net/136085-problem-mit-paintbox1-canvas-pixels.html)

StefanDraeger 23. Jun 2009 10:38


Problem mit Paintbox1.Canvas.Pixels
 
Hi,

ich habe ein Problem mit folgendem Code:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  p_width,
  p_height,
  p_gesamt,
  I,X : integer;
begin
 p_width := paintbox1.Width;
 p_height := paintbox1.Height;
  for I := 0 to p_height do
    begin
      for X := 0 to p_width do
        begin
           paintbox1.Canvas.Pixels[i,x] := clblue;
        end;
    end;
end;
Anstatt mir die Form bzw die Paintbox in Blau zu füllen enstehen zwei dicke Streifen.

mmh.

Kennt jemand das Problem ?

mfg

Stefan

DeddyH 23. Jun 2009 10:44

Re: Problem mit Paintbox1.Canvas.Pixels
 
Hallo und Willkommen in der DP :dp:,

abgesehen davon, dass Du I und X vertauscht hast, ist der Zugriff über Canvas.Pixels recht langsam. Hat das einen bestimmten Grund, dass Du das so machst?

turboPASCAL 23. Jun 2009 10:48

Re: Problem mit Paintbox1.Canvas.Pixels
 
Nö. ;)

I und X sind vertauscht bei:
Delphi-Quellcode:
// paintbox1.Canvas.Pixels[i,x] := clblue; <-<<
// richtig:
paintbox1.Canvas.Pixels[x, i] := clblue;

Die Paitbox an sich stellt Graphicen nur themporär zur Verfügung.
Wenn ein anderes Fenster Label etc. dazwichen funkt wird der entsprechende Bereich in der Paintbox übermalt btz. gelöscht.

Abhilfe, setze die Zeichenroutiene in das FormPaint-Ereignis.

Delphi-Quellcode:
procedure TFormX.PaintBoxXPaint(Sender: TObject);
begin
  // ...
end;
Nun wird immer neu gezeichnet.

DeddyH 23. Jun 2009 10:50

Re: Problem mit Paintbox1.Canvas.Pixels
 
Ich sag doch, die sind vertauscht :stupid:

himitsu 23. Jun 2009 11:03

Re: Problem mit Paintbox1.Canvas.Pixels
 
und es wird auf Pixel außerhalb des Canvas zugegriffen

außerdem sollte der Code nur einen dicken blauen Streifen zeichnen :gruebel: der Rest wird nicht übermalt

Delphi-Quellcode:
for I := 0 to p_width - 1 do
  for X := 0 to p_height - 1 do
[edit]
OK, wenn ihr I und X in Pixels tausch, dann so
Delphi-Quellcode:
for I := 0 to p_height - 1 do
  for X := 0 to p_width - 1 do

StefanDraeger 23. Jun 2009 11:51

Re: Problem mit Paintbox1.Canvas.Pixels
 
Der Hintergrund:

Möchte mir folgendes Programmieren: Wikipedia : WaTor

Und dazu muss / will ich auf Canvas.Pixels zugreifen, und da schien mir die TPaintbox Komponente als erste Wahl.

(P.S. : Bin eigendlich schon länger in dem Forum nur leider habe ich mein PW und Benutzername für meinen alten Nick vergessen)

angos 23. Jun 2009 12:23

Re: Problem mit Paintbox1.Canvas.Pixels
 
Hi,

um den Hintergrund komplett blau zu malen, reicht auch folgendes, was ebenfalls den Vorteil hat, dass es wesentlich schneller ist:

Delphi-Quellcode:
  PaintBox.Canvas.Brush.Color := clBlue;
  PaintBox.Canvas.FillRect(PaintBox.ClientRect);
Dann brauchst du nur noch die entsprechenden Pixel mit Fischen und Haien zu füllen.

Das Ganze machst du dann, wie von turboPascal gesagt in dem OnPaint-Ereignis, damit das auch vernünftig neu gezeichnet wird.


Gruß
angos

StefanDraeger 23. Jun 2009 13:25

Re: Problem mit Paintbox1.Canvas.Pixels
 
Ich weiß,

nur finde ich das sehr interesant mit den Streifen !!!

mfg

Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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