Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Grafikprogrammierung: Raster-Frage (https://www.delphipraxis.net/79618-grafikprogrammierung-raster-frage.html)

hansklok 25. Okt 2006 13:18


Grafikprogrammierung: Raster-Frage
 
Halle, ich zeichne ein Raster mit folgendem Code auf ein Formular:

Delphi-Quellcode:
begin
   X:= 25;
      repeat
        Y:= 25;
          repeat
            with Form1.Canvas do begin
              Pen.Color:= clBlack;
              Pen.Style:= psSolid;
              MoveTo(X, Y);
              LineTo(X+1, Y);
            end;
          Y:= Y + Raster.Y;
          until Y > Form1.Width;
        X:= X + Raster.X;
      until X > Form1.Width;
end;
So, nun kann man ja nun über die OnMouseDown bzw. OnMouseUp - Prozeduren z.B. ein Rechteck zeichen:

Delphi-Quellcode:
var
  Form1: TForm1;
  x1,y1: Integer;

...

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x1:= x;
y1:= y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
canvas.Rectangle(x1,y1,x,y);
end;
So, nun möchte ich, dass wenn der Startpunkt (x1,y1) in der Nähe eines Rasterpunktes, eventuell mit einer Toleranz von +-3 Pixel von dem jeweiligen Rasterpunkt automatisch an den jeweiligen Rasterpunkt gezeichnet wird. Sozusagen magnetisch an einen Rasterpunkt angezogen und sich dort die Startkoordinaten des Rechteckes befinden. Leider habe ich nicht so recht eine Idee, wie ich das realisieren könnte. Kann mir bitte jemand weiterhelfen!

Danke

MfG

hansklok

mbamler 25. Okt 2006 13:33

Re: Grafikprogrammierung: Raster-Frage
 
Zitat:

Zitat von hansklok
Halle, ich zeichne ein Raster mit folgendem Code auf ein Formular:

Delphi-Quellcode:
begin
   X:= 25;
      repeat
        Y:= 25;
          repeat
            with Form1.Canvas do begin
              Pen.Color:= clBlack;
              Pen.Style:= psSolid;
              MoveTo(X, Y);
              LineTo(X+1, Y);
            end;
          Y:= Y + Raster.Y;
          until Y > Form1.Width;
        X:= X + Raster.X;
      until X > Form1.Width;
end;
So, nun kann man ja nun über die OnMouseDown bzw. OnMouseUp - Prozeduren z.B. ein Rechteck zeichen:

Delphi-Quellcode:
var
  Form1: TForm1;
  x1,y1: Integer;

...

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x1:= x;
y1:= y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
canvas.Rectangle(x1,y1,x,y);
end;
So, nun möchte ich, dass wenn der Startpunkt (x1,y1) in der Nähe eines Rasterpunktes, eventuell mit einer Toleranz von +-3 Pixel von dem jeweiligen Rasterpunkt automatisch an den jeweiligen Rasterpunkt gezeichnet wird. Sozusagen magnetisch an einen Rasterpunkt angezogen und sich dort die Startkoordinaten des Rechteckes befinden. Leider habe ich nicht so recht eine Idee, wie ich das realisieren könnte. Kann mir bitte jemand weiterhelfen!

Danke

MfG

hansklok

Deine gewünschte X-Koordinate berechnet sich wie folgt (mit Y ist es analog das gleiche):

X(neu) = (trunc(mouse.X + (Raster.X / 2)) div Raster.X) * Raster.X;

Gruß
Matthias

mbamler 26. Okt 2006 12:43

Re: Grafikprogrammierung: Raster-Frage
 
Bitte bitte - keine Ursache ....

hansklok 26. Okt 2006 17:03

Re: Grafikprogrammierung: Raster-Frage
 
.,.. danke, im großen und ganzen funktioniert das, nur sind meine objekte nun sehr mausempfindlich, aber danke!


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