AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu TPaintBox

Ein Thema von Elicia · begonnen am 2. Feb 2007 · letzter Beitrag vom 3. Feb 2007
Antwort Antwort
Elicia

Registriert seit: 16. Jan 2007
Ort: Salzburg
19 Beiträge
 
Turbo Delphi für Win32
 
#1

Frage zu TPaintBox

  Alt 2. Feb 2007, 17:14
Hi,

wollte in einer PaintBox ein Gitter zeichnen mit 'PaintBox. Canvas' - funktionierte auch, bis ich drauf kam, daß ich statt des Punkts ein Komma gemacht habe - also auf PaintBox, Canvas zugriff!
Als ich das Komma aber in Punkt änderte, funtionierte das Zeichnen aber nicht mehr so, wie von mir gewollt - es wurde nur ein Teil des Gitters stark vergrößert gezeichnet.

Hat vielleicht jemand eine Erklärung für dieses 'komische' Verhalten?
Ich kann mir auch nicht erklären, warum der Compiler das Komma nicht beanstandet hat - ich hab Programmieren aus Büchern gelernt, vielleicht ist da etwas an mir vorübergegangen...

Besten Dank schon mal im voraus - und ein großes Lob auf dieses tolle Forum - hat mir schon bei manchem Problemchen geholfen!

Elicia
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Frage zu TPaintBox

  Alt 2. Feb 2007, 18:08
Es gibt nur eine richtige Schreibweise: Paintbox1.Canvas wie man sieht ohne Leerzeichen um den Punkt.
Das Zeichnen des Gittes muss grundsätzlich im Event OnPaint stattfinden und an keiner anderen Stelle im Code.
Hier ist der Code für ein paar senkrechte Linien als Vorlage:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
   pcanvas : TCanvas; // Hilfsvariable
   i : Integer;
begin
   // Canvas der Paintbox besorgen
   pcanvas := (sender as TPaintbox).Canvas;

   pcanvas.pen.color := clRed;

   for i := 0 to 20 do
   begin
      pcanvas.MoveTo(i*10,0);
      pcanvas.LineTo(i*10, 200);
   end;
   // pcanvas wird NICHT freigeben
end;
Andreas
  Mit Zitat antworten Zitat
Elicia

Registriert seit: 16. Jan 2007
Ort: Salzburg
19 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Frage zu TPaintBox

  Alt 3. Feb 2007, 10:14
Hi,
erstmal danke für deine Antwort!
Ich weiß schon, wie man auf PaintBox zugreift - allerdings braucht man m.E. keine Hilfsvariable für PaintBox.Canvas.

Hier der Quelltext, der mir Rätsel aufgibt und für den ich keine schlüssige Erklärung finde...

Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  X,Y,W,H,X1,Y1: Integer;
begin
{bei Interesse bitte einfach mal testen - mit Komma erscheint das Gitter
wie beabsichtigt - ersetzt man das Komma durch den korrekten Punkt wird es stark
vergrößert und dadurch nur ein Teil dargestellt!!!}

  with PaintBox1,Canvas do //das ist die Fragen aufwerfende Stelle
  begin
    W := (Width-2) div 3;
    H := (Height-2) div 3;
    X1 := Width mod W div 2;
    Y1 := Height mod H div 2;
    FillRect(ClientRect);
    Pen.Color := clMaroon;
    Brush.Style := bsClear;
    for Y := 0 to 2 do
      for X := 0 to 2 do
        Rectangle(X1+X*W, Y1+Y*H, X1+X*W + W+1, Y1+Y*H + H+1);
  end;
end;
Vielleicht weiß ja jemand eine Antwort drauf!

Elicia
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Frage zu TPaintBox

  Alt 3. Feb 2007, 10:58
Hallo Elicia,

das Problem ist die WITH-Anweisung. Bei "with PaintBox1, Canvas" beziehen sich die Angaben Width, Height und ClientRect auf die PaintBox, bei "with PaintBox1.Canvas" auf das Formular, da die PaintBox nicht "geöffnet" wurde.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Elicia

Registriert seit: 16. Jan 2007
Ort: Salzburg
19 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Frage zu TPaintBox

  Alt 3. Feb 2007, 12:10
Hallo Hawkeye,

danke für die Antwort - das leuchtet ein und ich bin wieder ein wenig klüger!
Gruß,
Elicia
  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 23:24 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