PDA

View Full Version : سوال: Zoom کردن Image در ScrollBox و تنظیم HorzScrollBar.Position و VertScrollBar.Position



mbshareat
سه شنبه 24 بهمن 1391, 08:28 صبح
سلام
من یه تصویر دارم که بعد از اینکه از فایل توی Image میریزم این دو تنظیم رو روش اعمال می کنم:
Img.Stretch:=True;
Img.AutoSize:=False;

می خوام وقتی ابزار Zoom فعال هست با MouseDown رو تصویر تصویر بزرگ یا کوچک بشه.
در حال حاضر این کار انجام میشه اما میخوام ناحیه ای که کلیک کردم بعد از Zoom تقریبا وسط تصویر باشه.
برای این کار باید Align تصویر داخل ScrollBox برابر alNone باشه وگر نه طول و عرض تصویر یک اندازه بزگ نمیشه اما خواستم از این کد برای تعیین محل لغزنده های ScroolBox استفاده کنم تصویر جابجا میشه و دیگه به گوشه چپ بالا نمی چسبه:

If (Button=mbLeft)
And Not(ssAlt in Shift) then
Inc(ZoomAsp)
Else if ZoomAsp>1 then
Dec(ZoomAsp);
Img.SetBounds(0,0,Bmp[CurLev].Width*ZoomAsp,Bmp[CurLev].Height*ZoomAsp);
ImgBox.HorzScrollBar.Position:=Max(X*ZoomAsp-ImgBox.Width Div 2,0);
ImgBox.VertScrollBar.Position:=Max(Y*ZoomAsp-ImgBox.Height Div 2,0);

کسی در این زمینه تجربه داره منو راهنمایی کنه؟

mbshareat
سه شنبه 24 بهمن 1391, 09:02 صبح
الآن یه کم کد رو تغییر دادم؛ Image دیگه مثل قبل داخل ScrollBox جابجا نمیشه، اما محل کلیک هم بعد از Zoom درست وسط تصویر نیست:
procedure SetCanvasZoomPercent(Canvas: TCanvas; AZoomPercent: Integer);
begin
SetMapMode(Canvas.Handle, MM_ISOTROPIC);
SetWindowExtEx(Canvas.Handle, 100, 100, nil);
SetViewportExtEx(Canvas.Handle, AZoomPercent, AZoomPercent, nil);
end;
..
//این قسمت رو یادم رفته بود توی پست قبل الصاق کنم!
X:=Max(Min(X,Img.Width-1),0) Div ZoomAsp;
Y:=Max(Min(Y,Img.Height-1),0) Div ZoomAsp;
..
If (Button=mbLeft)
And Not(ssAlt in Shift) then
Inc(ZoomAsp)
Else if ZoomAsp>1 then
Dec(ZoomAsp);
// Img.SetBounds(0,0,Bmp[CurLev].Width*ZoomAsp,Bmp[CurLev].Height*ZoomAsp);
Img.Width:=Bmp[CurLev].Width*ZoomAsp;
Img.Height:=Bmp[CurLev].Height*ZoomAsp;
SetCanvasZoomPercent(Img.Canvas,ZoomAsp);
ImgBox.HorzScrollBar.Position:=Max(X*ZoomAsp-ImgBox.Width Div 2,0);
ImgBox.VertScrollBar.Position:=Max(Y*ZoomAsp-ImgBox.Height Div 2,0);

khorsandreza
چهارشنبه 25 بهمن 1391, 17:50 عصر
سلام
اگه مشکلت حل نشد بگین من کامپوننت دارم که این کار را برات انجام میده (با سورس و مثال)