2013-05-22 4 views
2

У меня есть форма VCL, в которой есть TImage с анкерами, установленными для всех сторон, поэтому, когда пользователь меняет размер формы, размер изображения соответствует новому размеру (почти для заполнения, есть некоторые кнопки).Изменение размера изображения искажает мышь X/Y

Однако инструменты рисования, которые у меня для холста изображения, искажаются при изменении размера. Чертеж отлично работает до того, как я изменил размер, а затем, по-видимому, я рисую в каком-то другом месте, затем щелкнув мышью.

Как изменить размер TImage и ссылаться на X/Y нового изображения, чтобы рисунок получился правильно?

MouseDown:

Drawing := true; 

StartX := x; 
StartY := y; 

EndX := x; 
EndY := y; 

MouseMove:

if Drawing then begin 

    Image1.Canvas.Pen.Mode := pmNotXor; 

    Image1.Canvas.MoveTo(StartX,StartY); 
    Image1.Canvas.LineTo(EndX,EndY); 
    Image1.Canvas.MoveTo(StartX,StartY); 
    Image1.Canvas.LineTo(x,y); 

end; 

EndX := x; 
EndY := y; 

Image1.Canvas.Pen.Mode := pmCopy; 

MouseUp:

Image1.Canvas.MoveTo(StartX,StartY); 
Image1.Canvas.LineTo(x,y); 
Drawing := false; 

ответ

3

Я предполагаю, что свойство Strech изображения устанавливается истина. В этом случае растровое изображение, созданное с изображения, остается прежним.

При обращении к Image1.Canvas в первый раз создается TBitmap с размером изображения 1. Этот размер растрового изображения не изменяется при изменении размера изображения1. Strech = true отображает растровое изображение на текущий размер изображения, но битмап сам по себе является прежним размером.

Вы можете исправить это, отредактировав Image1.Picture.Bitmap всякий раз, когда изменяется изображение1. Поскольку TImage не имеет OnResize, вы можете использовать TPanel в качестве контейнера и настроить его на событие OnResize.

+0

что я могу назвать событием ReSize? 'Image1.Picture.Bitmap.Height: = Image1.Height;' и 'Image1.Picture.Bitmap.Width: = Image1.Width;'? – ikathegreat

+0

'Image1.Picture.Bitmap.SetSize (Image1.Width, Image1.Height);' –

+0

спасибо, я обнаружил, что оба будут работать (устанавливая высоту и ширину или SetSize) и интересно стирают рисунки, если вы измените размер , затем снова большой. но это то, что я искал. – ikathegreat

1

Не используйте холст изображения для рисования, вместо этого используйте TPaintBox; сохраните графику в частной переменной и нарисуйте ее в OnPaint с помощью PaintBox.Canvas.StretchDraw.

Смежные вопросы