Q&A

  • 마우스를 움직일때.....
마우스를 움직일때 마다 바둑판 형식으로 마우스 좌표 끝에 동그라미가

따라다니도록 만들었습니다.

동그라미는 켄버스에 Ellipse메소드로 그렸구요..

근데 지나간 자리는 다시 예전의 모습으로 되돌리고 싶은데

어떻게 해야 하나요?

전  CopyRect메소드로 다시 그려주면 될거라고 생각했는데

구현하기가 어렵네요..초보인지라....

답변 부탁드립니다. 그럼 즐거운 주말 되시고요.
2  COMMENTS
  • Profile
    이명훈 2002.02.17 06:11
    제가 함 짜봤습니다. 허접해도 이해를..ㅜㅜ 소스에여..

    unit Unit1;

    interface

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

    type
      TForm1 = class(TForm)
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

      TMyCursor = Class
        oldRect : TRect;
        Constructor Create;
        Destructor Destory;
      private
        procedure DoMove( x , y: Integer);
      end;

    var
      Form1   : TForm1;
      MyCursor: TMyCursor;

    implementation

    {$R *.DFM}

    procedure TForm1.FormCreate(Sender: TObject);
    var
      I,J, wC, hC        : Integer;
    begin
      wC:= Image1.Width  div 32;
      hC:= Image1.Height div 32;
      For I:=1 to wc-1 do
        Begin
          Image1.Canvas.MoveTo(I*32 , 0);
          Image1.Canvas.LineTo(I*32 , Image1.Height);
        end;
      For J:=1 to hC-1 do
        Begin
          Image1.Canvas.MoveTo(0 , J*32);
          Image1.Canvas.LineTo(Image1.Width , J*32);
        end;
      MyCursor:= TMyCursor.Create;
      DoubleBuffered:= True;
    end;

    { TMyCursor }

    constructor TMyCursor.Create;
    var
      sPoint, NowPoint   : TPoint;
    begin
      GetCursorPos(sPoint);
      NowPoint:= Form1.Image1.ScreenToClient(sPoint);
      Form1.Image1.Canvas.Ellipse(NowPoint.x-10, NowPoint.y-10, NowPoint.x+10, NowPoint.y+10);
      OldRect:= Rect(NowPoint.x-10, NowPoint.y-10, NowPoint.x+10, NowPoint.y+10);
    end;

    destructor TMyCursor.Destory;
    begin
      Inherited;
    end;

    procedure TMyCursor.DoMove(x, y: Integer);
    var
      OldPenMode: TPenMode;
    begin
      OldPenMode:= Form1.Image1.Canvas.Pen.Mode;
      With Form1 do
        Begin
          Image1.Canvas.Pen.Mode:= pmNotXor;
          Image1.Canvas.Ellipse(OldRect);
          Image1.Canvas.Ellipse(x-10, y-10, x+10, y+10);
          OldRect:= Rect(x-10, y-10, x+10, y+10);
          Image1.Canvas.Pen.Mode:= OldPenMode;
        end;
    end;

    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      MyCursor.DoMove(x,y);
    end;

    end.

  • Profile
    memory 2002.02.17 08:31
    전 간단한줄 알았는데 이렇게 까지 복잡하다니....정말 대단하시네요..

    제가 초보라 그런건지..정말 어렵다..ㅜㅜ

    정말 감사하구요 앞으로도 많은 도움 부탁드립니다.

    참 실행해 보니까 정말 잘되네요^^