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

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


Category

  김영대(2003-03-31 00:09:30, Hit : 5346, Vote : 1208
 이미지를 마우스로 drag시 테두리 효과를 주면서 이동 시키기

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: 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 }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  OldXFR, {old focus rectangle posn}
  OldYFR,
  FirstX, {first mouse down position}
  FirstY : integer;
  Drag : boolean; // 드래그 상태(True)을 표시

implementation
{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Drag := true;  // 마우스 드래그를 시작함
  Screen.Cursor := crDrag;
  
  FirstX := X; // 이미지 내에서의 드래그 시작 위치 저장
  FirstY := Y;
  OldXFR := Image1.Left; // 폼 내에서의 이미지 위치 저장
  OldYFR := Image1.Top;

  // 폼에다 이미지 테두리를 그린다
  Form1.Canvas.DrawFocusRect(Rect(OldXFR, OldYFR, OldXFR+Image1.Width, OldYFR+Image1.Height));
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  XFR, YFR : integer;
begin
  if Drag then
  begin
    // 바로전의 이미지 테두리를 지운다
    Form1.Canvas.DrawFocusRect(Rect(OldXFR, OldYFR, OldXFR+Image1.Width, OldYFR+Image1.Height));

    // 이동한 위치를 구하기 위해 이전의 시작 위치(FiratX, FirstY)를 뺀다
    OldXFR := Image1.Left + X - FirstX;
    OldYFR := Image1.Top + Y - FirstY;

    // 폼에다 이미지 테두리를 그린다
    Form1.Canvas.DrawFocusRect(Rect(OldXFR, OldYFR, OldXFR+Image1.Width, OldYFR+Image1.Height));
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Drag then
  begin
    // 바로전의 이미지 테두리를 지운다
    Form1.Canvas.DrawFocusRect(Rect(OldXFR, OldYFR, OldXFR+Image1.Width, OldYFR+Image1.Height));
    
    Drag := false;
    Screen.Cursor := crDefault;
    
    // 실제 위치로 이미지를 이동시킨다
    Image1.Left := Image1.Left + X - FirstX;
    Image1.Top := Image1.Top + Y - FirstY;
  end;
end;

end.





371   [일반/컴포넌트] RichEdit 에서 문자(열)를 찾아 글자속성 바꾸기  김영대 2003/03/06 4658 1210
370   [일반/컴포넌트] StringGrid의 Column의 크기(width) 자동 조절  김영대 2003/03/04 6605 1210
369   [일반/컴포넌트] ListView 의 column header 오른쪽에 이미지 넣기  김영대 2003/03/07 4937 1209
368   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5732 1209
367   [일반/컴포넌트] ListBox의 item을 mouse로 이동시키기  김영대 2003/03/04 4266 1209
  [일반/컴포넌트] 이미지를 마우스로 drag시 테두리 효과를 주면서 이동 시키기  김영대 2003/03/31 5346 1208
365   [윈도우즈 API] KeyDown의 Beep음을 없애자...  김영대 2003/03/06 4547 1208
364   [멀티미디어] wave파일 연주  김영대 2003/03/04 4149 1208
363   [윈도우즈 API] 내 프로그램의 화면을 가리는 프로그램 리스트  김영대 2004/07/24 4527 1207
362   [시스템] 프로세서를 생성시켜보자!  김영대 2003/03/06 4523 1207
361   [일반/컴포넌트] 콤포넌트를 Redraw할때 깜박임을 방지하려면...  김영대 2003/03/05 4678 1207
360   [윈도우즈 API] Taskbar 의 특정 위치에 popup 메뉴 띄우기  김영대 2004/07/24 4573 1206
359   [윈도우즈 API] 외부 프로그램의 크기를 내 프로그램에서 변경하기  김영대 2003/03/07 4563 1206
358   [윈도우즈 API] 스크린 세이버 실행하기  김영대 2003/03/05 4303 1206
357   [일반/컴포넌트] thread-safe Queue 구현  김영대 2003/08/18 6008 1205
356   [윈도우즈 API] 레지스트리가 변경된 사실을 알리려면...  김영대 2003/03/06 4459 1205
355   [일반/컴포넌트] 다이얼로그 박스가 이미 떠있는지 검사하기  김영대 2004/10/16 4462 1204
354   [데이터베이스] how to get records from Oracle StoredProcedure  김영대 2003/03/07 4471 1204
353   [윈도우즈 API] window의 maximize, minimize 알아내기  김영대 2003/03/07 4598 1204
352   [윈도우즈 API] 스크린 세이버 비밀번호 알아내기  김영대 2003/03/07 4874 1203
351   [시스템] PC 스피커 울리기(Sound, NoSound)  김영대 2003/03/07 4409 1203
350   [일반/컴포넌트] ComboBox 가 dropped 상태인지 검사  김영대 2003/03/04 4051 1203
349   [네트웍/인터넷] LAN 에 접속했는지 검사하기  김영대 2003/03/07 4457 1202
348   [시스템] PC에 설치된 DirectX 버전 읽기  김영대 2003/03/07 3890 1202
347   [윈도우즈 API] keyboard, mouse 메시지 무시(skip) 하기  김영대 2003/03/07 4338 1200
346   [COM/OLE] TWebBrowser 순차 네비게이션 예제  김영대 2004/10/01 5231 1199
345   [일반/컴포넌트] 서식(format) 주기  김영대 2003/03/05 4474 1199
344   [윈도우즈 API] 아이콘 변경 화면 띄우기  김영대 2004/08/26 4447 1198
343   [네트웍/인터넷] 윈도우즈 네트워크로 메시지 보내기  김영대 2003/03/30 5279 1198
342   [시스템] 파일의 소유자와 도메인 구하기  김영대 2004/08/04 4292 1197
341   [알고리즘] String Hash 함수  김영대 2004/09/17 4508 1196
340   [일반/컴포넌트] 벽에 들러붙는 자석폼 만들기  김영대 2004/08/06 4735 1196
339   [일반/컴포넌트] ASCII printing  김영대 2003/03/06 4939 1196
338   [시스템] Redirecting DOS Application Output  김영대 2003/03/06 4422 1196
337   [데이터베이스] DataSet의 현재 레코드 복사하여 붙여넣기(?)  김영대 2003/03/05 5207 1196
336   [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4744 1195
335   [데이터베이스] Query한 결과를 수정하기...  김영대 2003/03/07 4861 1195
334   [윈도우즈 API] 네트워크 환경의 "컴퓨터 찾아보기" 화면 띄우기  김영대 2003/04/01 5133 1194
333   [알고리즘] String ELF Hash 함수  김영대 2004/09/17 4646 1193
332   [시스템] CPU 종류 구하기  김영대 2003/03/07 4761 1193

[이전 10개] [1]..[11][12][13][14][15] 16 [17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2021 Zeroboard / skin by zero