Ich habe ein Objekt, welches ich auf einem anderen verschieben kann. Beim Verschieben wird ein entsprechendes Ereignis ausgelöst. Dort bekomme ich die aktuellen Koordinaten des Objektes. Jetzt habe ich ein Raster und ich würde gerne das Objekt an dem Raster ausrichten:
Delphi-Quellcode:
procedure TForm1.ImageEnVectLayerNotify(Sender: TObject; layer: Integer; event: TIELayerEvent);
var
x : Integer;
begin
case event of
ielMoved:
begin
x := ImageEnVect.Layers[ImageEnVect.LayersCurrent].PosX;
ImageEnVect.Layers[ImageEnVect.LayersCurrent].PosX := 50;
end;
end;
end;
Die 50 muss natürlich abhängig sein von der Rasterweite. Wie kann ich ermitteln welcher gedachten Rasterlinie das Objekt am nächsten ist?
Gezeichnet wird das Raster so:
Delphi-Quellcode:
procedure TDWFotoBook.PaintGrid(Show: Boolean = True);
var
i : Integer;
j: Integer;
begin
// deselect all layers, otherwise we would also draw on the selected layers
FImageEnVect.LayersCurrent := 0;
// set pen mode
if Show then
begin
FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack
end
else
FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor;
with FImageEnVect do
begin
// draw dots
for i := 0 to Width div FGridWidth do
begin
for j := 0 to Height div FGridWidth do
begin
Bitmap.Canvas.Pixels[i * FGridWidth, j * FGridWidth] := clBlack;
end;
end;
Update;
end;
Self.FShowGrid := True;
end;