Q&A

  • 이미지스크롤에 대해
이미지 뷰어를 만드는데 이미지컴포넌트를 스크롤박스에 넣어 이미지가

클경우 스크롤이 생기도록 하였습니다.

그런데 스크롤을 움직일때 스크롤 바를 쓰지 않고 이미지위에 마우스를

드래그해서 스크롤바를 움직이게 하는 방법이 없나요???

아도브 아크로뱃 처럼요????

2  COMMENTS
  • Profile
    Mr.Q 2000.08.20 09:16
    황현 wrote:

    > 이미지 뷰어를 만드는데 이미지컴포넌트를 스크롤박스에 넣어 이미지가

    > 클경우 스크롤이 생기도록 하였습니다.

    > 그런데 스크롤을 움직일때 스크롤 바를 쓰지 않고 이미지위에 마우스를

    > 드래그해서 스크롤바를 움직이게 하는 방법이 없나요???

    > 아도브 아크로뱃 처럼요????



    다음소스를 참고하세요.

    OnMouseMove대신, OnMouseDown과 OnMouseUp이벤트를 사용해서

    약간 수정해주면 될겁니다.





    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ExtDlgs, ExtCtrls, Jpeg;



    type

    TForm1 = class(TForm)

    ScrollBox1: TScrollBox;

    Image1: TImage;

    OpenPictureDialog1: TOpenPictureDialog;

    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    procedure ScrollBox1DblClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormResize(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    var

    m_MaxVertPosition, m_MaxHoriPosition:integer;

    begin

    m_MaxVertPosition:=Image1.Height - ScrollBox1.ClientHeight;

    m_MaxHoriPosition:=Image1.Width - ScrollBox1.ClientWidth;



    ScrollBox1.HorzScrollBar.Position:=

    (m_MaxHoriPosition * x) div Image1.Width;

    ScrollBox1.VertScrollBar.Position:=

    (m_MaxVertPosition * y) div Image1.Height;

    end;



    procedure TForm1.ScrollBox1DblClick(Sender: TObject);

    begin

    if OpenPictureDialog1.Execute then

    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);



    ScrollBox1.VertScrollBar.Position:=0;

    ScrollBox1.HorzScrollBar.Position:=0;



    //수평가운데로 정렬

    if Image1.Width > ScrollBox1.Width then

    Image1.Left:=0

    else Image1.Left:= (ScrollBox1.Width - Image1.Width) div 2;



    //수직가운데로 정렬

    if Image1.Height > ScrollBox1.Height then

    Image1.Top:=0

    else Image1.Top:= (ScrollBox1.Height - Image1.Height) div 2;



    //스크롤바 Range

    ScrollBox1.HorzScrollBar.Range:=Image1.Width;

    ScrollBox1.VertScrollBar.Range:=Image1.Height;



    //스크롤바 Position

    ScrollBox1.HorzScrollBar.Position:=

    (Image1.Width div 2) - (ScrollBox1.Width div 2);

    ScrollBox1.VertScrollBar.Position:=

    (Image1.Height div 2) - (ScrollBox1.Width div 2);

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    ScrollBox1.Color:=clBlack;

    end;



    procedure TForm1.FormResize(Sender: TObject);

    begin

    ScrollBox1.VertScrollBar.Position:=0;

    ScrollBox1.HorzScrollBar.Position:=0;



    //수평가운데로 정렬

    if Image1.Width > ScrollBox1.Width then

    Image1.Left:=0

    else Image1.Left:= (ScrollBox1.Width - Image1.Width) div 2;



    //수직가운데로 정렬

    if Image1.Height > ScrollBox1.Height then

    Image1.Top:=0

    else Image1.Top:= (ScrollBox1.Height - Image1.Height) div 2;



    //스크롤바 Range

    ScrollBox1.HorzScrollBar.Range:=Image1.Width;

    ScrollBox1.VertScrollBar.Range:=Image1.Height;



    //스크롤바 Position

    ScrollBox1.HorzScrollBar.Position:=

    (Image1.Width div 2) - (ScrollBox1.Width div 2);

    ScrollBox1.VertScrollBar.Position:=

    (Image1.Height div 2) - (ScrollBox1.Width div 2);

    end;



    end.





  • Profile
    황현 2000.08.20 23:56
    답변 감사 합니다....^^