::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-06 21:33:52, Hit : 3605, Vote : 1023
 이미지를 마우스로 drag 해서 zoom 하기

// Image1에 원본 그림을 불러다 놓고 컴파일하셔서 사용하세요

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    DragOrigin: TPoint;
    MovePoint: TPoint;
    FinalRect: TRect;
    IsFocusRect: Boolean; // 드래그 상태(True)을 표시
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // 마우스 드래그를 처음 시작할때
  if ((Button = mbLeft) and not(IsFocusRect))then
  begin
    DragOrigin := Point(x,y); // 마우스 드래그 시작위치(x,y) 저장
    MovePoint := DragOrigin;
    IsFocusRect := True; // 마우스 드래그를 시작함
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if IsFocusRect then
  begin
    // 바로전의 선택 직사각형을 지운다
    Image1.Canvas.DrawFocusRect(rect(DragOrigin.x, DragOrigin.y, MovePoint.X, MovePoint.Y));

    // 마우스 드래그 시작위치부터 현재 위치까지 선택 직사각형을 그린다
    Image1.Canvas.DrawFocusRect(rect(DragOrigin.x, DragOrigin.y, X, Y));

    // 최근 선택 직사각형을 저장한다
    FinalRect := rect(DragOrigin.x, DragOrigin.y, X, Y);

    // 최근 드래그 위치를 저장
    MovePoint := point(x,y);
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  bmp: TBitmap;
begin
  if (IsFocusRect and (Button = mbLeft)) then
  begin
    // 선택한 영역의 이미지를 Image2로 복사
    bmp := TBitmap.Create; // 임시저장용 Bitmap
    try
      bmp.width := ord(FinalRect.Right - FinalRect.Left);
      bmp.height := ord(FinalRect.Bottom - FinalRect.Top);
      bmp.Canvas.CopyRect(rect(0, 0, bmp.width,bmp.height), image1.Canvas,FinalRect);
      Image2.Canvas.StretchDraw(Image2.ClientRect, bmp);
    finally
      bmp.free;
    end;

    // 바로전의 선택 직사각형을 지우고 변수들을 초기화함
    Image1.Canvas.DrawFocusRect(FinalRect);
    IsFocusRect := False;
    FinalRect := Rect(0,0,0,0);
  end;
end;

end.





611   [데이터베이스] DB에 저장된 JPEG(JPG)를 DBGrid에 출력하기  김영대 2003/03/06 5247 1255
610   [데이터베이스] 동적으로 인덱스 만들기  김영대 2003/03/06 4467 1130
609   [데이터베이스] Excel ODBC를 사용하여 xls를 테이블로 사용하기  김영대 2003/03/06 6868 1604
608   [데이터베이스] DB alias중 ORACLE alias 명 구하기  김영대 2003/03/06 4011 973
607   [일반/컴포넌트] QuickReport에서 프린터 바꾸어서 출력하기  김영대 2003/03/06 6244 1547
606   [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기  김영대 2003/03/06 3356 876
605   [일반/컴포넌트] RichEdit 에서 문자(열)를 찾아 글자속성 바꾸기  김영대 2003/03/06 4746 1212
604   [일반/컴포넌트] RichEdit 에서 커서를 처음, 마지막으로 보내기  김영대 2003/03/06 6891 1480
603   [윈도우즈 API] 실행중인 모든 프로그램 Minimized 시키기  김영대 2003/03/06 4661 1237
602   [시스템] 델파이로 DOS 프로그램(Console application) 만들기  김영대 2003/03/06 17061 7528
601   [COM/OLE] Registering *.tlb files without Delphi  김영대 2003/03/06 5001 1133
600   [네트웍/인터넷] How to bring a network down - "Win Nuke"  김영대 2003/03/06 7309 1994
599   [윈도우즈 API] 폴더나 파일의 윈도우즈 등록정보 dialog 띄우기  김영대 2003/03/06 5097 1475
  [일반/컴포넌트] 이미지를 마우스로 drag 해서 zoom 하기  김영대 2003/03/06 3605 1023
597   [윈도우즈 API] 외부 프로그램을 최상위로 설정하기  김영대 2003/03/06 5226 1234
596   [일반/컴포넌트] TObject의 프로퍼티를 문자열로 참조하기  김영대 2003/03/06 5227 1594
595   [윈도우즈 API] 프로그램으로 Screensaver 등록하는 두가지 방법  김영대 2003/03/06 4501 1268
594   [데이터베이스] 특정 폼의 현재 편집중인 DB Field 구하기  김영대 2003/03/06 4089 1111
593   [윈도우즈 API] KeyDown의 Beep음을 없애자...  김영대 2003/03/06 4632 1211
592   [시스템] How do I use SetWindowsHookEx ?  김영대 2003/03/06 6839 957
591   [시스템] Redirecting DOS Application Output  김영대 2003/03/06 4642 1207
590   [일반/컴포넌트] 두개의 RichEdit 사이에 내용 복사하기  김영대 2003/03/06 5859 1364
589   [일반/컴포넌트] 특정 Color의 Invert Color 구하기  김영대 2003/03/06 4313 1315
588   [일반/컴포넌트] 문자열 수식문장(expression)의 결과 구하기  김영대 2003/03/06 3378 878
587   [시스템] 오디오 CD의 볼륨 조절하기  김영대 2003/03/06 3616 1026
586   [일반/컴포넌트] 윈도우즈 "날짜/시간" 설정화면 띄우기  김영대 2003/03/06 6207 1822
585   [시스템] 마이크 볼륨 조절하기  김영대 2003/03/06 4651 1285
584   [멀티미디어] JPEG, WAVE 를 resource 파일에 넣고 읽어오기  김영대 2003/03/06 5262 1224
583   [일반/컴포넌트] desktop 배경화면을 폼의 배경화면으로 그리기  김영대 2003/03/06 3676 1037
582   [윈도우즈 API] 레지스트리의 변경여부 알리는 2가지 방법  김영대 2003/03/06 4759 1282
581   [일반/컴포넌트] StringGrid 의 내용을 클립보드로 복사하기  김영대 2003/03/06 4466 1060
580   [데이터베이스] Save DBGrid To Excel  김영대 2003/03/06 6992 1849
579   [COM/OLE] Delphi의 OCX를 InstallShield로 배포하는 방법  김영대 2003/03/06 8333 5623
578   [일반/컴포넌트] ASCII printing  김영대 2003/03/06 5282 1213
577   [일반/컴포넌트] OEM conversion  김영대 2003/03/06 4321 1265
576   [일반/컴포넌트] Memo의 행의 문자수를 제한하고 WordWrap시키기  김영대 2003/03/06 5231 1314
575   [윈도우즈 API] DDE 쓰지 않고 IE의 현재 URL 가져오기  김영대 2003/03/06 5986 1676
574   [윈도우즈 API] RichEdit에 입력한 문장의 실제 높이 구하기  김영대 2003/03/06 5046 1429
573   [일반/컴포넌트] StringGrid 의 선택영역만 클립보드로 복사하기  김영대 2003/03/06 4863 1077
572   [일반/컴포넌트] StringGrid 에서 프로그램으로 MultiSelect 시키기  김영대 2003/03/06 5410 1187

[1][2][3][4][5][6][7][8][9] 10 ..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero