AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit Paintbox1.Canvas.Pixels
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Paintbox1.Canvas.Pixels

Offene Frage von "StefanDraeger"
Ein Thema von StefanDraeger · begonnen am 23. Jun 2009 · letzter Beitrag vom 23. Jun 2009
Antwort Antwort
StefanDraeger

Registriert seit: 23. Jun 2009
8 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 10:38
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 10:44
Hallo und Willkommen in der 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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 10:48
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 10:50
Ich sag doch, die sind vertauscht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 11:03
und es wird auf Pixel außerhalb des Canvas zugegriffen

außerdem sollte der Code nur einen dicken blauen Streifen zeichnen 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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
StefanDraeger

Registriert seit: 23. Jun 2009
8 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 11:51
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)
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 12:23
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
Ansgar
  Mit Zitat antworten Zitat
StefanDraeger

Registriert seit: 23. Jun 2009
8 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem mit Paintbox1.Canvas.Pixels

  Alt 23. Jun 2009, 13:25
Ich weiß,

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

mfg

Stefan
  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 05:45 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