Q&A

  • 마우스가 콤포넌트 영역을 벗어났을때의 처리는 어떻게 할까요?
이미지로 마우스가 이미지 위에 올라갔을때
그림이 변하게 하고
그 영역을 벗어났을때 다시 원래 그림으로 만들려고 하는데.
onMounseMove이벤트로 영역에 들어오는것을 잡고 나서
벗어났을때의 처리를 어떻게 해야 할지 모르겠더라고요..

실행했을때 좌측예는
소속된 페널에다가도 move이벤트를 주어
원래 이미지로 변환하는걸로 하면 되기는 되는데
마우스를 빠르게 움직이면 이벤트를 인식하지 못합니다.
완전한 방법이 아닌것 같아서요..

우측 예는
이미지를 클릭했을때
위치가 변했다가 1정도 후에 이미지를 원래 위치에 되돌리려 하는데
타이머를 사용한다는건 좀 우스운것 같고
(그리고 타이머가 시스템 시간으로 작동하기 때문에 1초라는 시간이 정확치 않더라고요 어떨땐 1초마다 어떨땐 0.1초로 동작합니다.. ㅡㅡ;;)
sleep가 어떻게 동작하는 건지 잘 몰라거 그런건지..
이미지가 눈에 보이지 않는 순간같이 빨리 변화되어 버리더군요..
예제한번 봐주셨으면하고 부탁드립니다..
감사합니다.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image3Click(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);
begin
  Image1.Visible := false;
  Image2.Visible := true;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Visible := true;
  Image2.Visible := false;
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
  Image3.Left := Image3.Left + 5;
  Image3.Top := Image3.Top + 5;

  sleep(1000);

  Image3.Left := Image3.Left - 5;
  Image3.Top := Image3.Top - 5;
end;

end.
1  COMMENTS
  • Profile
    이중철 2002.12.17 04:39
    전 스레드를 썼어요..

      if ((mouse.CursorPos.X > left) And (mouse.CursorPos.X < (labcaption.Width + left)) And
        (mouse.CursorPos.Y > Top) And (mouse.CursorPos.Y <(labcaption.Height + Top))) then

      begin
        if labcaption.Color = clSilver then
        begin
          labcaption.Color := clActiveCaption;
          labcaption.Font.Color := clRed;
        end;
      end
      else
      begin
          if labcaption.Color = clActiveCaption then
          begin
            labcaption.Color := clSilver;
            labcaption.Font.Color := clBlack;
          end;
      end;

    위에 소스는 스레드 안에 있는거에요..

    더 좋은방법이 있으면 답변좀 저도 궁금하네요..

    일단은 잘 작동 되네요.


    • 최용일
      2002.12.18 00:04
      안녕하세요. 최용일입니다. 두개의 데이터 형을 비교해보시면 되겠죠... 엑셀의 값은 Variant형으로 TVa...
    • 도니
    • 2002.12.17 22:46
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 빙구
      2002.12.18 01:20
      인디를 예전에 좀써보다가 요즘은 잘 안써서 기억이 잘안나지만 데이타가 다 올때까지 기다리던가?..가물...
    • 최용일
      2002.12.17 23:38
      안녕하세요. 최용일입니다. ReadString을 쓰시지 마시고 ReadLn을 쓰세요. 보낼때는 WriteLn을 쓰시구요...
    • 도니
      2002.12.18 00:51
      매번 답변에 감사드리면서.. 질문하나 또 하겠습니다.>^^;; OnExecute 는 클라이언트에서 접속을 하면...
    • 최용일
      2002.12.18 07:43
      안녕하세요. 최용일입니다. 무한으로 계속해서 도는것은 님께서 루프문을 사용하셔서 그러는것 같구요.....
    • 최용석
    • 2002.12.17 21:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_hyun
      2002.12.17 22:41
      자게 보구선 찔려서 수정 합니다.. 기간을 받는다고 햇으니 기간을 for 문으로 돌리고요.. for i := ...
    • 구창민
      2002.12.17 21:45
      델파이의 날짜형은 수치이지요. 즉 연산이 가능합니다. 날짜연산에 대한 팁을 참조하시면 금방 해결...
    • 델파이탐크루즈
      2002.12.17 22:36
      var   a,b : Tdate;   c : integer; begin   a := strToDatetime('2002...
    • 나옹이
    • 2002.12.17 21:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 나옹이
      2002.12.18 01:55
      지금... ocx/servers/msppt8.pas 뜯어보고 있는뎅... 쇼보기에 관한건....찾아도 아뉘 보이니.... ...
    • 구창민
      2002.12.17 21:49
      원격의 컴에 네트웍 드라이브를 잡는다는 말씀이 그 컴에 공유된 디렉토리를 자신의 컴에서 네트웍 드라...
    • 유종근
      2002.12.17 21:14
      db에 파일의 경로와 파일이름을 저장해놓은 후 Client에서 불러보면 될텐데여 그렇게 어렵진 않겠네여..
    • 이대희
    • 2002.12.17 20:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 23:05
      DBGrid1.Columns[0].FieldName := qr_sel.Field('BUREAU_CODE').AsString; 위문장에서 TQuery에 Field...
    • 최은석
      2002.12.17 22:24
      다음처럼 해보시지요... 디비그리드,데이타소스,쿼리 컴포넌트를 하나씩 배치... 데이타소스의 dataset...
    • 열심히
      2002.12.18 01:12
      덧붙이자면 아래의 inherited문이없다면 try문중에 에러가 발생한다면 상위 루틴을 타지 않게되는데요....
    • 구창민
      2002.12.17 21:58
      안녕하세요~ 구창민입니다. except 는 에러가 날 시에만 타게 되는 반면, finally 구문은 에러가 발...
    • 델파이탐크루즈
      2002.12.17 19:30
      try ~ finally의 문법은 책을 보심이 더 좋을듯 하네여... 그리고 try ~ finally 안에있는건 Reg.Free ...
    • 조일영
    • 2002.12.17 19:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 다롱이
    • 2002.12.17 18:18
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 우소
    • 2002.12.17 12:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2002.12.17 23:58
      http://www.delphi.pe.kr  <-- 이곳에 가셔서 팁/강좌란에서 "서비스" 란 단어로 검색해보...
    • 우소
      2002.12.18 19:01
      마른 하늘에 단비가 온것 같네여. 정말 감사 합니다...
    • 김성복
    • 2002.12.17 07:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.12.17 20:23
    • 2002.12.17 19:02
      TBitmap.SaveToFile 은 깨지지만, Bitmap을 Jpeg로 Assign해서 TJpegImage.SaveToFile을 사용하여 저장하...
    • 백재원
    • 2002.12.17 05:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 오승호
      2002.12.17 18:06
      제가 실행해봤는데 잘 되는군요 핼프에 보면 실행 리턴값이 32이하일때는 에러라고 했습니다. 42라면 정...
    • 백재원
      2002.12.17 19:57
      답변 고맙습니다. 제가 디버깅 상태에서 했기 때문입니다. 만들어진 exe파일에서 돌려 보니 잘돌아 가더군...
    • 최용일
      2002.12.17 08:43
      안녕하세요. 최용일입니다. StrToInt에는 숫자로 된 문자열이 와야 하는데... '1,000'같은 문자열이 오...
    • 임장현
    • 2002.12.17 04:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2002.12.17 04:39
      전 스레드를 썼어요..   if ((mouse.CursorPos.X > left) And (mouse.CursorPos.X < (l...
    • 이추형
    • 2002.12.17 03:38
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.17 05:03
      안녕하세요. 최용일입니다. BDE유닛에 아래와 같이 설명되어있네요... 참고하세요... const  &...
    • 이추형
      2002.12.19 03:43
      DataModule을 새로 맹글어 기존의 DataModule을 대치 했습니다. 그랬더니 잘 되는군요.. 단순 BDE문제는 ...
    • 서정길
    • 2002.12.17 02:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.17 05:09
      안녕하세요. 최용일입니다. 프로젝트가 있는 폴더에 보시면 프로젝트명.dsk란 파일이 있을겁니다. 이...