Delphi 트리 컨트롤(TreeView) 결점 간 드래그

TTreeView VCL     。 TreeView               (TTreeNode)。
 
1>. OnMouseDown :       (    ,             )。 
2>. OnDragOver :        (    ,               )。 
3>. OnDragDrop :       (    ,           )。 
4>. ImageIndex:                               。
    SelectIndex:                 。
    stateIndex:             。

1. 먼저 OnMouseDown 이벤트입니다.
procedure TfrmMain.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
var 
    node: TTreeNode; 
begin 
    node := TreeView1.GetNodeAt(X, Y);  //            
    // node.Level       ,  0 ,      (       ) 
     if (node <> nil) and (node.Level > 0) and (Button = mbLeft) then 
          TreeView1.BeginDrag(True);  //      
end; 
      ,TreeView     DragMode      dmManual,       BeginDrag       。DragMode   dmManual。
 
2、      OnDargOver   。
procedure TfrmMain.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); 
var 
   node: TTreeNode; 
begin 
   node := TreeView1.GetNodeAt(X, Y); 
      //                          Accept       
   if (node <> nil) and (node.Level = 0) and (TreeView1.Selected.Parent <> node) then 
         Accept := True //Accept       
   else
          Accept := False; 
end; 
 
3.      OnDragDrop   ,                 。
procedure TfrmMain.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); 
var 
      node: TTreeNode; 
begin
       node := TreeView1.GetNodeAt(X, Y); 
   if (node <> nil) and (node.Level = 0) then 
      begin
       //    StateIndex          ,StateIndex       
         Query1.SQL.Text := 'update TBL_Student set Cid=' + IntToStr(node.StateIndex) + ' where id=' + IntToStr   
                            (TreeView1.Selected.StateIndex); 
      if Query1.ExecSQL() > 0 then 
            //               ,                    
            TreeView1.Selected.MoveTo(node, naAddChild);        
      end; 
end; 

 
4. 소감:
위의 방법은 수동으로 드래그 기능을 시작하지만 실현된 응용 과정에서 결점을 전개하거나 닫을 때 오차가 생기기 쉽다.
실용성이 떨어진다.따라서 TreeView 컨트롤의 DragMode를 dmAutomatic로 설정하는 기본 자동 시작 기능을 사용하는 것이 좋습니다.
이후 위에서 보듯이 OndragOver, OndragDrop 두 가지 이벤트를 설정하면 됩니다.
 
그러나 부동 도구막대를 만들 때 DragMode를 dmAutomatic으로 설정합니다.많은 문제점을 가져왔다.
1. 도구막대를 한 번 눌러도 아무런 드래그도 하지 않으면 부동의 도구막대로 변한다.
2、창문에서 끌어낸 후 부동으로 변하는 도구막대는 원래의 위치에 멈출 수 없습니다.
3. 부동하는 도구막대 창은 닫을 수 있지만 닫으면 꺼낼 수 없습니다.
이런 몇 가지 문제 때문에, 수공적인 방법을 사용해야 한다.
 
 
 

좋은 웹페이지 즐겨찾기