Q&A

  • 마우스 드래그할 때 지정된 도형이 그려지도록 하려면?
마우스로 드래그해서 나타나는 도형의 색갈이 들어가도록해야 합니다

버튼을 만들어서 사각형과 원 을 체크할수있는 버튼이어야 합니다

그래서 사각형을 체크해서 마우스로 드래그하면 사각형이 그려지면서 색깔이

들어가는 것을 만들어야 합니다. 또는 원을 체크해서 드래그 하

면 원이 그려지면서 색깔이 있는 원을 나타내는 뭐 이런것

입니다, 제발좀 가르쳐 주시길 바랍니다.

4  COMMENTS
  • Profile
    컴맹 2000.11.15 05:39
    짧게 한번 만들어 봤는데여..

    대충 이런걸 말씀 하시는 건가여...

    unit Unit2;



    interface



    uses

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

    StdCtrls;



    type

    TForm2 = class(TForm)

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form2: TForm2;

    msX,msY : integer;

    implementation



    {$R *.DFM}



    procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    begin

    MsX := X;

    msY := Y;

    end;



    procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    var

    r : TRect;

    begin

    r.Left := msx;

    r.Top := msY;

    r.Bottom := Y;

    r.Right := X;

    Canvas.Pen.Color := clBlack;

    if RadioButton1.Checked then

    begin //원그리기..



    canvas.Brush.Color := clBlue;

    Canvas.Ellipse(r);



    end

    else

    begin //네모그리기..



    canvas.Brush.Color := clRed;



    Canvas.Rectangle(msX,msY,X,Y);

    canvas.FloodFill(x,y,clmenu,fsSurface );

    end;









    end;



    procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    var

    r : TRect;



    begin

    if shift = [ssLeft] then

    begin

    r.Left := msx;

    r.Top := msY;

    r.Bottom := Y;

    r.Right := X;



    Canvas.Brush.Color := clmenu;

    Canvas.Pen.Color := clwhite;

    Refresh;

    if RadioButton1.Checked then

    begin

    Canvas.Ellipse(r);

    end

    else

    begin

    Canvas.Rectangle(msX,msY,X,Y);

    end;

    end;



    end;



    end.





    peny wrote:

    > 마우스로 드래그해서 나타나는 도형의 색갈이 들어가도록해야 합니다

    > 버튼을 만들어서 사각형과 원 을 체크할수있는 버튼이어야 합니다

    > 그래서 사각형을 체크해서 마우스로 드래그하면 사각형이 그려지면서 색깔이

    > 들어가는 것을 만들어야 합니다. 또는 원을 체크해서 드래그 하

    > 면 원이 그려지면서 색깔이 있는 원을 나타내는 뭐 이런것

    > 입니다, 제발좀 가르쳐 주시길 바랍니다.

  • Profile
    peny 2000.11.15 08:25
    죄송합니다 제가 초보라서 어디에 어떻게 소스를 넣어야 할지 모르겠습니다.

    그리고 콤퍼넌트는 어떻게 만들었는지도 모르겠구요 간단한 주석이나 조금 쉽게 설명을

    해주셨으면 합니다. 정말 감사합니다/

  • Profile
    Mr.Q 2000.11.15 14:48
    peny wrote:

    > 죄송합니다 제가 초보라서 어디에 어떻게 소스를 넣어야 할지 모르겠습니다.

    > 그리고 콤퍼넌트는 어떻게 만들었는지도 모르겠구요 간단한 주석이나 조금 쉽게 설명을

    > 해주셨으면 합니다. 정말 감사합니다/unit Unit2;



    interface



    uses

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

    StdCtrls;



    //--------------------------------------------------------------------------

    // 폼에 라디오버튼을 2개를 올려놓고, 폼마우스이벤트가 선언되었네요.

    //--------------------------------------------------------------------------

    type

    TForm2 = class(TForm)

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    //----------------------------------------------------------------------------

    // 여기에는 두개의 이벤트에서 사용할 몇 가지 사용자 변수가 선언되었습니다.

    //----------------------------------------------------------------------------



    var

    Form2: TForm2;

    msX,msY : integer;

    implementation



    {$R *.DFM}



    procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    begin

    //-----------------------------------------------------------------------------

    // 마우스가 눌러지면, MsX와 msY변수에 마우스의 폼안에서의 위치를 대입

    //-----------------------------------------------------------------------------

    MsX := X;

    msY := Y;

    end;



    procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    var

    r : TRect; // TRect형 변수 선언

    begin



    r.Left := msx; //msx, msY는 마우스Down시 기억시켜놨던, 폼안에서의 마우스의

    r.Top := msY; //x,y좌표를 다시, TRect변수에 대입하고

    r.Bottom := Y; //마우스가 up했을때의 폼안에 마우스의 위치를 대입

    r.Right := X;

    Canvas.Pen.Color := clBlack; //캔버스의 펜 색깔을 검정으로

    if RadioButton1.Checked then //라됴버튼1체크시엔

    begin //원그리기..



    canvas.Brush.Color := clBlue; //붓색깔을 파랑색으로설정하고

    Canvas.Ellipse(r); //캔버스에 타원을 그려라.

    end

    else //버튼2가 눌러졌을때는

    begin //네모그리기..



    canvas.Brush.Color := clRed; //붓색깔을 빨강색으로 설정하고



    Canvas.Rectangle(msX,msY,X,Y); //사각형을 그려라

    canvas.FloodFill(x,y,clmenu,fsSurface ); //지정영역을 지정된 스타일로 색칠하라.

    end;







    죄송합니다. 컴맹님 제가 답변을 해서.. 혹시 실례가 안되었을런지 몰겠슴다.

    지나가다 걍 제가 적었습니다.





  • Profile
    컴맹 2000.11.15 18:13
    죄송이라니요...

    감사드리구여..

    여기서 제대로된 그림을 그리기 위해서는 ...

    또 다른 버퍼가 하나 있어야 하지요...

    그게 필요하다면 소스를 만들어 드리지요...

    그럼 이만...



    Mr.Q wrote:

    > peny wrote:

    > > 죄송합니다 제가 초보라서 어디에 어떻게 소스를 넣어야 할지 모르겠습니다.

    > > 그리고 콤퍼넌트는 어떻게 만들었는지도 모르겠구요 간단한 주석이나 조금 쉽게 설명을

    > > 해주셨으면 합니다. 정말 감사합니다/unit Unit2;

    >

    > interface

    >

    > uses

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

    > StdCtrls;

    >

    > //--------------------------------------------------------------------------

    > // 폼에 라디오버튼을 2개를 올려놓고, 폼마우스이벤트가 선언되었네요.

    > //--------------------------------------------------------------------------

    > type

    > TForm2 = class(TForm)

    > RadioButton1: TRadioButton;

    > RadioButton2: TRadioButton;

    > procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

    > Y: Integer);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > //----------------------------------------------------------------------------

    > // 여기에는 두개의 이벤트에서 사용할 몇 가지 사용자 변수가 선언되었습니다.

    > //----------------------------------------------------------------------------

    >

    > var

    > Form2: TForm2;

    > msX,msY : integer;

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > begin

    > //-----------------------------------------------------------------------------

    > // 마우스가 눌러지면, MsX와 msY변수에 마우스의 폼안에서의 위치를 대입

    > //-----------------------------------------------------------------------------

    > MsX := X;

    > msY := Y;

    > end;

    >

    > procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > var

    > r : TRect; // TRect형 변수 선언

    > begin

    >

    > r.Left := msx; //msx, msY는 마우스Down시 기억시켜놨던, 폼안에서의 마우스의

    > r.Top := msY; //x,y좌표를 다시, TRect변수에 대입하고

    > r.Bottom := Y; //마우스가 up했을때의 폼안에 마우스의 위치를 대입

    > r.Right := X;

    > Canvas.Pen.Color := clBlack; //캔버스의 펜 색깔을 검정으로

    > if RadioButton1.Checked then //라됴버튼1체크시엔

    > begin //원그리기..

    >

    > canvas.Brush.Color := clBlue; //붓색깔을 파랑색으로설정하고

    > Canvas.Ellipse(r); //캔버스에 타원을 그려라.

    > end

    > else //버튼2가 눌러졌을때는

    > begin //네모그리기..

    >

    > canvas.Brush.Color := clRed; //붓색깔을 빨강색으로 설정하고

    >

    > Canvas.Rectangle(msX,msY,X,Y); //사각형을 그려라

    > canvas.FloodFill(x,y,clmenu,fsSurface ); //지정영역을 지정된 스타일로 색칠하라.

    > end;

    >

    >

    >

    > 죄송합니다. 컴맹님 제가 답변을 해서.. 혹시 실례가 안되었을런지 몰겠슴다.

    > 지나가다 걍 제가 적었습니다.

    >

    >