civilian님 여러사람들에게 항상 많은 도움을 주셔서 감사드립니다.
올려주신 소스대로 해보니 아주 잘 됩니다.
그런데 제가 만든 리스트박스안의 체크박스들은 여백이 거의 없어서
체크박스들 사이의 공간에서 마우스를 누르고
마우스를 놓을때도 체크박스들 사이에서 해야 합니다.
그래서 제가 MouseDown이벤트와 MouseUp이벤트를 체크박스이벤트로 옮겼는데요.
그렇게 하니 MouseDown이벤트는 정상적으로 들어옵니다.
그런데 MouseUp이벤트의 Sender가 마우스를 놓을때 위치에 있는 체크박스가 아닌
마우스를 누를때 위치에 있던 체크박스가 들어옵니다.
그러다 보니 마우스를 누를때 위치에 있는 체크박스 하나만 선택이 되버립니다.
마우스를 누를때와 놓을때 콘트롤이 다른 경우에는 어떻게 처리해야 할지 모르겠습니다.
나름대로 방법을 찾아보고 싶었지만 아는게 없다보니 재질문 올리게 되네요.
다시 한 번 도움 부탁드리겠습니다.
civilian 님이 쓰신 글 :
:
: unit Unit1;
:
: interface
:
: uses
: Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
: Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
:
: type
: TForm1 = class(TForm)
: ScrollBox1: TScrollBox;
: CheckBox1: TCheckBox;
: CheckBox2: TCheckBox;
: CheckBox3: TCheckBox;
: procedure ScrollBox1MouseDown(Sender: TObject; Button: TMouseButton;
: Shift: TShiftState; X, Y: Integer);
: procedure ScrollBox1MouseUp(Sender: TObject; Button: TMouseButton;
: Shift: TShiftState; X, Y: Integer);
: private
: { Private declarations }
: FDown: Boolean;
: FStartPos: TPoint;
: public
: { Public declarations }
: end;
:
: var
: Form1: TForm1;
:
: implementation
:
: {$R *.dfm}
:
: procedure TForm1.ScrollBox1MouseDown(Sender: TObject; Button: TMouseButton;
: Shift: TShiftState; X, Y: Integer);
: begin
: if (Button = mbLeft) and (Shift = [ssLeft]) then
: begin
: FDown := True;
: FStartPos := Point(X, Y);
: end;
: end;
:
: procedure TForm1.ScrollBox1MouseUp(Sender: TObject; Button: TMouseButton;
: Shift: TShiftState; X, Y: Integer);
: var
: ControlPos: TPoint;
: SelectRect: TRect;
: i: Integer;
: CheckBox: TCheckBox;
: begin
: if FDown then
: begin
: FDown := False;
:
: SelectRect := Rect(FStartPos.X, FStartPos.Y, X, Y);
:
: for i := 0 to ScrollBox1.ControlCount-1 do
: begin
: if ScrollBox1.Controls[i] is TCheckBox then
: begin
: CheckBox := ScrollBox1.Controls[i] as TCheckBox;
: ControlPos := Point(CheckBox.Left, CheckBox.Top);
:
: if PtInRect(SelectRect, ControlPos) then
: CheckBox.Checked := not CheckBox.Checked;
: end;
: end;
: end;
: end;
:
: end.
:
:
:
: 하두고 님이 쓰신 글 :
: : 폼위에 스코롤박스가 있고
: : 스코롤박스 안에 여러개의 체크박스가 있습니다.
: :
: : 체크박스를 하나씩 클릭해서 선택하려니 사용자가 귀찮을 것 같습니다.
: : 그렇다고 리스트박스로 구현하기는 좀 곤란한 문제가 있구요.
: :
: : 스코롤박스안에 있는 여러개의 체크박스를 마우스로 드레그하여 한 번에 선택하게 하고 싶은데
: : 어떻게 해야 할지 모르겠습니다.
: :
: : 도움 부탁드립니다.