刚开始学 别见笑 我贴出代码帮忙看看
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Edit1: TEdit;
Button1: TButton;
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
var
x0,y0:integer;
//***********绘制一个边框*****************//
begin
with Image1 do
begin
x0:=round(Image1.ClientWidth);
y0:=round(Image1.ClientHeight);
canvas.pen.Color:=clblack;
canvas.pen.Width:=1;
canvas.MoveTo(0,0);
canvas.MoveTo(5,5);
canvas.LineTo(x0-5,5);
canvas.LineTo(x0-5,y0-5);
canvas.LineTo(5,y0-5);
canvas.LineTo(5,5);
end;
end;
//*******类似栅格,但是随着canvas和k的变化,相应的比例也跟着变*******//
procedure TForm1.Button1Click(Sender: TObject);
var
n,k:integer;
begin
k:=strtoint(form1.edit1.Text);
Form1.Image1.Picture.Bitmap:=nil;
with Image1 do
begin
for n:=1 to k-1 do
begin
canvas.MoveTo(round(5+(width-10)*n/k),5);
canvas.LineTo(round(5+(width-10)*n/k),round(height-5));
canvas.MoveTo(5,round(5+(height-10)*n/k));
canvas.LineTo(round(width-5),round(5+(height-10)*n/k));
end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
A,B:array of array of integer;
i,j,x1,y1,k,min:integer;
begin
k:=strtoint(form1.edit1.Text);
min:=sqr(X-5)+sqr(Y-5);
setlength(a,k+1,k+1);
setlength(b,k+1,k+1);
for i:=0 to k do
for j:=0 to k do
begin
A[i,j]:=5+round((Image1.width/k)*j);
B[i,j]:=5+round((Image1.height/k)*i);
if min>=sqr(X-A[i,j])+sqr(Y-B[i,j]) then
begin
min:=sqr(X-A[i,j])+sqr(Y-B[i,j]);
x1:=A[i,j];
y1:=B[i,j];
end;
end;
Form1.Image1.Canvas.Font.Color :=clRed;
Form1.Image1.Canvas.Brush.Style:=bsClear;
Form1.Image1.Canvas.TextOut(x1,y1,'x');
end;
end.
越靠近canvas的右边mousedown,偏移越大,好像偏移量不是固定的,这到底是怎么回事?