PDA

View Full Version : قراردادن یک image بزرگ داخل ScrollBox و پیمایش آن



FirstLine
چهارشنبه 13 تیر 1386, 15:32 عصر
با سلام
من جستجو کردم اما با توجه به موارد عنوان شده به نتیجه نرسیدم و برای همین این عنوان را مینویسم.
یک عکس دارم که بزرگ است و امکان نمایش آن در حالت عادی نیست و حتما باید در یک محیط با امکان پیمایش نمایش داده شود.
* در دلفی 7
برای همین ی فرم جدید ایجاد و در فرم جدید یک ScrollBox روی فرم قرار داده و یک image هم داخل این ScrollBox اضافه کردم و تنظیم الاین هردوی آنها را برابر Align:=alClient قرار دادم.
حالا وقتی که این فرم باز میشود فقط یه قسمتی از عکس را که اندازه صفحه است را نمایش میدهد و امکان پیمایش توسط ScrollBox وجود ندارد و حتی علامتهای جهت دار را هم نشان نمیدهد.
لطفا راهنمایی بفرمایید که چجوری این عکس بزرگ را داخل این ScrollBox مرور و پیمایش کنم؟
کدامیک از تنظیمات ScrollBox و عکس را باید تنظیم کنم؟
با تشکر

Arman_1367
چهارشنبه 13 تیر 1386, 15:40 عصر
گله Align شئی Image را AlCustom قرار بده بعد خاصیت AutoSize را True کن بعد امتحان کنی حل می شه.

DAMAVAND
چهارشنبه 13 تیر 1386, 15:55 عصر
سلام
ببین بنظر من اشکال کار شما اینکه Align هردو رو alclient قرار دادید.
وقتی قرار شما توی scrollbox یه image نمایش داده بشه دیگه احتیاجی
به قرار دادن align به client نیست. شما فقط تو scrollbox خاصیت align, رو برابر alclient
قرار بدید. و image رو داخل scrollbox قرار بدید در ضمن تو image قرار دادن خاصیت autosize برابر true فراموش نشود.!

Arman_1367
چهارشنبه 13 تیر 1386, 17:37 عصر
مگه من چی گفته بودم.

FirstLine
جمعه 15 تیر 1386, 22:21 عصر
با سلام
کد زیر مشکل من رو حل کرد .
فقط مشکلش اینه که دکمه پیمایش را نشان نمیدهد ولی بقیه موارد را برستی نمایش میدهد.
با تشکر



unit frm_Hokm_ImageShow;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
Tfrm_Hokm_Image_Show = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
BitBtn1: TBitBtn;
ScrollBox_Main: TScrollBox;
Image_Main: TImage;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Image_MainMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image_MainMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frm_Hokm_Image_Show: Tfrm_Hokm_Image_Show;
implementation

{$R *.dfm}
Var
SX: Integer;
SY: Integer;

LX: Integer;
LY: Integer;


procedure Tfrm_Hokm_Image_Show.FormCreate(Sender: TObject);
begin
ScrollBox_Main.DoubleBuffered := True;
Image_Main.Top := 0;
Image_Main.Left := 0;
Image_Main.Picture.LoadFromFile(ExtractFilePath(Ap plication.ExeName) +'Data\Temp\'+'Hokm_Temp.jpg');
LX := (Image_Main.Width - ScrollBox_Main.ClientWidth) * -1;
LY := (Image_Main.Height - ScrollBox_Main.ClientHeight) * -1;
end;

procedure Tfrm_Hokm_Image_Show.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//
end;

procedure Tfrm_Hokm_Image_Show.FormShow(Sender: TObject);
begin
//

end;

procedure Tfrm_Hokm_Image_Show.BitBtn1Click(Sender: TObject);
begin
Close;
end;

procedure Tfrm_Hokm_Image_Show.Image_MainMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SX := X; // X start co-ordinate
SY := Y; // Y start co-ordinate
end;

procedure Tfrm_Hokm_Image_Show.Image_MainMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var NX: Integer;
NY: Integer;
begin
//************************************************** ***************
//* First make sure that the left mouse button is being held down *
//* TShiftState is a set and consists of the following:- *
//* *
//* ssShift The Shift key is held down. *
//* ssAlt The Alt key is held down. *
//* ssCtrl The Ctrl key is held down. *
//* ssLeft The left mouse button is held down. *
//* ssRight The right mouse button is held down. *
//* ssMiddle The middle mouse button is held down. *
//* ssDouble The mouse was double-clicked. *
//* *
//* NOW REMEMBER ALL THIS IS HAPPENING WHILE THE MOUSE IS MOVING!!*
//************************************************** ***************
if not (ssLeft in Shift) then
Exit;
//************************************************** *******
//* Calculate what our new X, Y point of origin should be *
//************************************************** *******
NX := Image_Main.Left + X - SX;
NY := Image_Main.Top + Y - SY;
//************************************************** *********
//* If the range of our new calculated X point falls within *
//* 0 - width of image, and negative (image width - scroll *
//* box width) then set new point of origin X to NX *
//************************************************** *********
if (NX < 0) and (NX > LX) then
Image_Main.Left := NX;
//************************************************** *********
//* If the range of our new calculated Y point falls within *
//* 0 - height of image, and negative (image height - scroll*
//* box height) then set new point of origin Y to NY *
//************************************************** *********
if (NY < 0) and (NY > LY) then
Image_Main.Top := NY;
//***********************************************
//* ALL DONE!!! IMAGE HAS BEEN RE-POSITIONED!!! *

end;

end.