아주 알면 유용한것이 있어서 소스를 작성해 봤습니다.
보통때 같았으면 SendMessage를 사용하세요... 그냥 있랬을 텐데..
사실 그래야 연구도 하고 많이 공부를 하실테지만 이번것은 사실 여러가지(?) 테크닉
이 필요합니다.
shl이라는 연산자도 알아야 할것 같구요...
먼저 소스를 보세요... mousedown이벤트에서...
procedure TForm1.FileListBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
P : Integer;
begin
P := Y shl 16;
P := P or X;
If Shift=[ssRIght] then
begin
SendMessage(FileListBox1.Handle, WM_LBUTTONDOWN, MK_LBUTTON, P);
SendMessage(FileListBox1.Handle, WM_LBUTTONUP, MK_LBUTTON, P);
end;
end;
위를 보시면 아실 수 있을 테지만...
Y shl 16하는 부분은 Y값을 P의 상위 16바이트로 옮겨주는것입니다.
WM_LBUTTONDOWN이라는 메세지의 lParam값에는 마우스의 X,Y좌표가 들어가는데
그것이 상위16바이트, 하위16바이트를 사용하게 됩니다.
상위 16바이트에 값을 넣어준후 하위값은 OR 연산자를 통해서 넣어주면 맞는
결과가 나오게 됩니다.
또한가지 알아 두어야 할것은 WM_LBUTTONDOWN메세지를 줬으면 꼭! WM_LBUTTONUP이라는 메세지를 보내주어야 한다는것이죠.
도움이 되셨기를...
|