Q&A

  • 이미지 스크롤 하는 방법 좀 가르쳐 주세요.


TScrollBox를 사용하지 않고 Image를 스크롤하는 방법좀 알려 주세요.

3  COMMENTS
  • Profile
    컴맹.. 2001.04.06 19:53
    기냥 스크롤바를 이용해서 한번 만들어 봤습니다...



    한번 해보시구여...



    안되면 다시한번 올려주세여..

    그럼 멜로 풀소스를 보내드리져..



    그럼 이만....





    unit ScrollDCU;



    interface



    uses

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

    StdCtrls, ExtCtrls;



    type

    TForm1 = class(TForm)

    Image1: TImage;

    ScrollBar1: TScrollBar;

    ScrollBar2: TScrollBar;

    procedure FormCreate(Sender: TObject);

    procedure ScrollBar1Change(Sender: TObject);

    procedure ScrollBar2Change(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    PreviousX, PreviousY: Integer; // tracks the previous scroll offset



    implementation



    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    {initialize the scroll bars}

    ScrollBar1.Max := Image1.Picture.Bitmap.Width-Image1.Width;

    ScrollBar2.Max := Image1.Picture.Bitmap.Height-Image1.Height;



    {initialize the offset tracking variables}

    PreviousX := 0;

    PreviousY := 0;

    end;



    procedure TForm1.ScrollBar1Change(Sender: TObject);

    var

    ScrollRect, // the rectangular area to be scrolled

    ClipRect, // the clipping rectangle of the scrolled area

    UpdateRect: TRect; // the area uncovered by scrolling

    begin

    {initialize the scrolling and clipping rectangles to the entire area

    of the image}

    ScrollRect := Image1.BoundsRect;

    ClipRect := Image1.BoundsRect;



    {scroll the area horizontally by the specified amount}

    ScrollDC(Canvas.Handle, PreviousX-ScrollBar1.Position, 0, ScrollRect,

    ClipRect, 0, @UpdateRect);



    {copy the appropriate area of the original bitmap into the newly uncovered

    area}

    Canvas.CopyRect(UpdateRect, Image1.Picture.Bitmap.Canvas,

    Rect((UpdateRect.Left-Image1.Left)+ScrollBar1.Position,

    ScrollBar2.Position, (UpdateRect.Left-Image1.Left)+

    ScrollBar1.Position+(UpdateRect.Right-UpdateRect.Left),

    Image1.Height+ScrollBar2.Position));



    {record the current position}

    PreviousX := ScrollBar1.Position;

    end;



    procedure TForm1.ScrollBar2Change(Sender: TObject);

    var

    ScrollRect, // the rectangular area to be scrolled

    ClipRect, // the clipping rectangle of the scrolled area

    UpdateRect: TRect; // the area uncovered by scrolling

    begin

    {initialize the scrolling and clipping rectangles to the entire area

    of the image}

    ScrollRect := Image1.BoundsRect;

    ClipRect := Image1.BoundsRect;



    {scroll the area vertically by the specified amount}

    ScrollDC(Canvas.Handle, 0, PreviousY-ScrollBar2.Position, ScrollRect,

    ClipRect, 0, @UpdateRect);



    {copy the appropriate area of the original bitmap into the newly uncovered

    area}

    Canvas.CopyRect(UpdateRect, Image1.Picture.Bitmap.Canvas,

    Rect(ScrollBar1.Position, (UpdateRect.Top-Image1.Top)+

    ScrollBar2.Position, Image1.Width+ScrollBar1.Position,

    (UpdateRect.Top-Image1.Top)+ScrollBar2.Position+

    (UpdateRect.Bottom-UpdateRect.Top)));



    {record the current position}

    PreviousY := ScrollBar2.Position;



    end;



    end.



    김광수 wrote:

    >

    > TScrollBox를 사용하지 않고 Image를 스크롤하는 방법좀 알려 주세요.

  • Profile
    델초 2001.04.05 18:54
    델파이 자료실에 가면 전철호님의 홈페이지에 있는것을

    본것 같습니다. 소스로 되어있는것 같아요..



    김광수 wrote:

    >

    > TScrollBox를 사용하지 않고 Image를 스크롤하는 방법좀 알려 주세요.

  • Profile
    김광수 2001.04.06 00:15
    제가 직접 TScrollBox를 분석하려고 했지만 제 지식으론 안되네요.



    API를이용해서 Image를 스크롤하는 방법 좀 알려주세요.



    델초 wrote:

    > 델파이 자료실에 가면 전철호님의 홈페이지에 있는것을

    > 본것 같습니다. 소스로 되어있는것 같아요..

    >

    > 김광수 wrote:

    > >

    > > TScrollBox를 사용하지 않고 Image를 스크롤하는 방법좀 알려 주세요.