Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14051] Re:Re:Re:Re:스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요?
하두고 [hadugo] 1697 읽음    2012-01-11 21:39
장성호님 감사합니다.
원하는데로 됬습니다.

장성호 님이 쓰신 글 :
: 음....
:
: 그것은?
:
: MouseUp이벤는 MouseDown이 된 컨트롤(Window)에서 항상 발생합니다.
: (예외도 있음)
:
: 이경우 MouseDown에서 Mouse좌표와 Up에서 좌표를
: ScrollBox기준으로 변환을 해서 처리하시면 될듯합니다.
:
:
: pt:=GetCursorPos;
: pt:=ScrollBox.ScreenToClient(pt);
: 

:
: 그럼..
:
:
: 하두고 님이 쓰신 글 :
: : 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.
: : : 

: : :
: : :
: : : 하두고 님이 쓰신 글 :
: : : : 폼위에 스코롤박스가 있고
: : : : 스코롤박스 안에 여러개의 체크박스가 있습니다.
: : : :
: : : : 체크박스를 하나씩 클릭해서 선택하려니 사용자가 귀찮을 것 같습니다.
: : : : 그렇다고 리스트박스로 구현하기는 좀 곤란한 문제가 있구요.
: : : :
: : : : 스코롤박스안에 있는 여러개의 체크박스를 마우스로 드레그하여 한 번에 선택하게 하고 싶은데
: : : : 어떻게 해야 할지 모르겠습니다.
: : : :
: : : : 도움 부탁드립니다.

+ -

관련 글 리스트
14042 스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요? 하두고 1866 2012/01/10
14046     Re:스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요? civilian 1872 2012/01/11
14049         Re:Re:스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요? 하두고 1807 2012/01/11
14050             Re:Re:Re:스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요? 장성호 1760 2012/01/11
14051                 Re:Re:Re:Re:스코롤박스안에 있는 여러개의 체크박스를 드레그로 선택하려면 어떻게 하나요? 하두고 1697 2012/01/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.