|
꼭 OnClick 이벤트에서 처리를 하셔야 하는지요..
그게 아니라면 간단하게 처리하는 방법이 있긴합니다.
OnChange 이벤트에서요..
void __fastcall TForm1::TreeView1Change(TObject *Sender, TTreeNode *Node)
{
if(Node == NULL)
return;
ShowMessage(TreeView1->Selected->Text); // 여기에서 DB 처리해주시면 되겠죠..
// Node->Text ...
}
이렇게 하면 되긴합니다.
클릭 순간에 이미 선택 여부를 떠나서 이전 아이템이 먼저 선택이 되어 있습니다.
OnMouseUp이나 다른 부분에서
TreeView1->Selected->Selected = false;
하셔서 선택을 해제 시켜 버릴 수도 있으나,
이렇게 하시면 OnClick 하는 순간에
if(TreeView1->Selected == NULL)
return;
이라는 안전코드를 넣어도 무의미해지죠.
그리고 전백수님이 올리신 코드처럼 마우스 포지션으로 찾을 수 도 있으나..
고려해야 할게 많아서..좀..그렇네요..
도움이 되었길 바랍니다.
전백수 님이 쓰신 글 :
: 트리뷰의 아이템이아닌 트리뷰의 빈공간에 클릭을 해도 아이템과 연결된 데이타베이스의 링크로 연결되는 문제때문에
: 도움을 요청했더니 어떤분(Free0210)께서 알려주신대로 아래와같이 코딩을 했습니다.
:
: 그런데 알려주신데로 했더니 빈영역에 클릭을 하면 사이트로 이동하는
: 현상은 사라졌지만 트리뷰 아이콘들중에서 위에서부터 차례로 몇개만 클릭을 인식을 합니다.
: 아래에 있는 아이콘들은 클릭을 감지하지 못합니다.
:
: 혹시 영역설정이 잘못되어서 그런건지 제가 초보라서 잘모르겠군요.
:
: procedure TMainForm.FavoritesTreeViewClick(Sender: TObject);
: var i:integer; TViewTest : THitTests; MousePt : TPoint; label TheEnd2;
: begin
: Try
: if MainForm.FavoritesTreeView.Selected = nil then Goto theend2;
: GetCursorPos(MousePt);
: MousePt := ScreenToClient(MousePt);
: TViewTest := MainForm.FavoritesTreeView.GetHitTestInfoAt(MousePt.X - MainForm.FavoritesTreeView.Left,MousePt.Y - MainForm.FavoritesTreeView.Top);
: if (htOnButton in TViewTest) then Goto theend2;
: if not (htOnItem in TViewTest) then Goto theend2;
:
:
: with MainForm.FavoritesTreeview.Selected do
: begin
: FavoritesTreeView_OldSelectnode:=MainForm.FavoritesTreeView.selected.Text;
: if MainForm.FavoritesTreeview.Selected.imageindex <> 0 then
: begin
: Click_str_site:=MainForm.FavoritesTreeview.Selected.Text;
: MainForm.BoardBrowser1.Navigate(SiteToTable_Search(MainForm.FavoritesTreeview.Selected.Text,'siteaddress'));
: end;
: end;
: TheEnd2:
: except
: end;
: end;
|