Q&A

  • Ctrl+더블클릭 구현이 안됩니다.
그냥더블클릭할때와 콘트롤키를 누른상태에서 더블클릭했을때 다른일을 시킬려고 합니다.

게시판에서 검색을해서 제나름대로 아래와같이 해보았는데 Ctrl+더블클릭 이 먹지를 않습니다.

이벤트순서때문인가요?

고수님들의 답변을 부탁드립니다.



procedure TMainForm.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin



if(ssCtrl in Shift) and (ssDouble in Shift )then

begin

tree1ctrlnomalmode:=1;

end

else

tree1ctrlnomalmode:=0;



procedure TMainForm.TreeView1DblClick(Sender: TObject);

var i:integer; label TheEnd;

begin



if TreeView1.Selected.Level <> 0 then

begin

if MainForm.Right_Notebook.pageindex <> 1 then MainForm.Right_Notebook.pageindex:=1;

for i:=0 to MainForm.UrlTable.recordcount -1 do

begin

if MainForm.BoardStringGrid1.Cells[ 1, i ]=MainForm.TreeView1.Selected.Text then goto TheEnd;

end;

TheEnd:

if tree1ctrlnomalmode=0 then MainForm.BoardBrowser1.Navigate(MainForm.BoardStringGrid1.Cells[ 2, i ]);

if tree1ctrlnomalmode=1 then MainForm.BoardBrowser1.Navigate(MainForm.BoardStringGrid1.Cells[ 3, i ]);

end;

mainform.button1.caption:=inttostr(tree1ctrlnomalmode);



end;

3  COMMENTS
  • Profile
    홍성락 2001.08.03 03:16
    한성민 wrote:

    > 그냥더블클릭할때와 콘트롤키를 누른상태에서 더블클릭했을때 다른일을 시킬려고 합니다.

    > 게시판에서 검색을해서 제나름대로 아래와같이 해보았는데 Ctrl+더블클릭 이 먹지를 않습니다.

    > 이벤트순서때문인가요?

    > 고수님들의 답변을 부탁드립니다.

    >

    > procedure TMainForm.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    > begin

    >

    > if(ssCtrl in Shift) and (ssDouble in Shift )then

    > begin

    > tree1ctrlnomalmode:=1;

    > end

    > else

    > tree1ctrlnomalmode:=0;

    >

    > procedure TMainForm.TreeView1DblClick(Sender: TObject);

    > var i:integer; label TheEnd;

    > begin

    >

    > if TreeView1.Selected.Level <> 0 then

    > begin

    > if MainForm.Right_Notebook.pageindex <> 1 then MainForm.Right_Notebook.pageindex:=1;

    > for i:=0 to MainForm.UrlTable.recordcount -1 do

    > begin

    > if MainForm.BoardStringGrid1.Cells[ 1, i ]=MainForm.TreeView1.Selected.Text then goto TheEnd;

    > end;

    > TheEnd:

    > if tree1ctrlnomalmode=0 then MainForm.BoardBrowser1.Navigate(MainForm.BoardStringGrid1.Cells[ 2, i ]);

    > if tree1ctrlnomalmode=1 then MainForm.BoardBrowser1.Navigate(MainForm.BoardStringGrid1.Cells[ 3, i ]);

    > end;

    > mainform.button1.caption:=inttostr(tree1ctrlnomalmode);

    >

    > end;

    //////////////////////////////////////////////////////////

    더블클릭시 원클릭이 두번일어나는것도 막고(전역변수이용등의 방법으로), 더불클릭처리는 더블클릭이벤트에서

    처리하는것이 옳습니다. 따라서 원클릭은 각각 두번이생기므로 더블클릭은 감지하지 못할겁니다.

    MouseDown의 내용은 삭제하고 DblClick에 넣으면될겁니다.



  • Profile
    한성민 2001.08.03 02:33
    그런데 더블클릭 이벤트에서는 Shift를 인식못한다고 에러가 납니다.

  • Profile
    홍성락 2001.08.03 03:46
    한성민 wrote:

    > 그런데 더블클릭 이벤트에서는 Shift를 인식못한다고 에러가 납니다.

    /////////////////////////////

    죄송합니다 역시 테스트를해봐야 했는데.

    먼저말한데로 더블클릭시 원클릭이 두번일어나는것도 막는 전역변수이용 방법으로

    해보겠습니다.

    1.먼저전역변수에 DblClick :boolean;를 선언하고

    폼show에 DblClick := False;초기값주고요

    2.procedure TMainForm.TreeView1MouseDown에

    if DblClick = false then

    if ssCtrl in Shift then tree1ctrlnomalmode:=1

    else tree1ctrlnomalmode:=0;

    else

    DblClick := false;

    3.procedure TMainForm.TreeView1DblClick에는

    DblClick := True;한줄만더쓰세요.