트리뷰에다 드래그&드롭을 하려는데 트리뷰가 X만 해가지고서리...
윈도우즈탐색기처럼 우아하게 움직이게 하고싶은데
특별한 설명을 찾을수 없어서 여쭙습니다.
아쉬운대로 DragOver시에 마우스좌표를 조사해서 한계위치에 오면
TreeView의 TopItem 프로퍼티로 조정을 해주고
다시 repaint를 해주는 무식한 방식으로 하는데(안그러면 무지 지저분해짐)
윈도우 메시지를 가지고 스크롤시키는 방법은 없나요?
다른 VCL스트롤 시키는 방법으로 했더니 요상한 일이 벌어져서리ㅠ.ㅠ
메시지쪽은 영 꽝이라서리... 이상한 대문자 나오고 핸들야그 나오면
온몸에 닭살이...
아시는분은 꼭 알려주세요.
> 트리뷰에다 드래그&드롭을 하려는데 트리뷰가 X만 해가지고서리...
> 윈도우즈탐색기처럼 우아하게 움직이게 하고싶은데
> 특별한 설명을 찾을수 없어서 여쭙습니다.
>
> 아쉬운대로 DragOver시에 마우스좌표를 조사해서 한계위치에 오면
> TreeView의 TopItem 프로퍼티로 조정을 해주고
> 다시 repaint를 해주는 무식한 방식으로 하는데(안그러면 무지 지저분해짐)
> 윈도우 메시지를 가지고 스크롤시키는 방법은 없나요?
> 다른 VCL스트롤 시키는 방법으로 했더니 요상한 일이 벌어져서리ㅠ.ㅠ
>
> 메시지쪽은 영 꽝이라서리... 이상한 대문자 나오고 핸들야그 나오면
> 온몸에 닭살이...
>
> 아시는분은 꼭 알려주세요.
>
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TempNode: TTreeNode;
begin
if Source = TreeView1 then // 위치 이동
begin
TempNode := TreeView1.GetNodeAt(X, Y);
Accept := TempNode <> nil;
end;
If (Y < 15) Then //On the upper edge - should scroll up
SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEUP, 0)
else If (TreeView1.Height - Y < 15) Then // On the lower edge - should scroll down
SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
end;
이렇게 하면 스크롤은 되는데, 스크롤 되는 속도가 무척(?) 빠르더군요. 밑으로 많이 드래그하면 주루룩 내려가던데... 탐색기에서는 천천히 내려가거든요. 그건 아마도 타이머를 돌린게 아닌가 생각됩니다.
좋은 저녁 되시길...