4

VirtualTreeView を使用する場合のドラッグ操作のデフォルトは です[doCopy,doMove]。移動操作は小さなボックス付きの矢印ポインターで示され、コピー操作は同じポインター アイコンで示されますが、横に [+] が追加されます。

デフォルトでは、VT はコピー操作を使用し、修飾キー (SHIFTキー) を押すと操作が移動に変更されるため、ポインターから [+] が削除されます。

必要なものは次のとおりです。

  • 操作を逆にします(デフォルトは移動、修飾キーを押したまま-コピー)、したがってポインター矢印も逆にします
  • 修飾キーを置き換える -CTRLの代わりにSHIFT
  • 2 つの操作のどちらが発生したかをイベントで読み取り、コピーまたは移動操作を開始する

正しい方向へのポインタは高く評価されます。

4

1 に答える 1

5

修飾子を変更するだけでなく、OnDragOverイベントハンドラーで実行する操作を変更する必要があります。したがって、コピー操作修飾子としてキーを追加するには、CTRL次のように記述します。このEffectイベントで設定されたパラメータ値は、選択した操作に応じてドラッグカーソルも変更します。それがイベントに渡される値であることを除いてOnDragDrop、ドロップされたソースをどうするかを決定することができます。

procedure TForm1.VirtualStringTree1DragOver(Sender: TBaseVirtualTree;
  Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
  Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
begin
  Accept := True;
  if Shift = [ssCtrl] then
    Effect := DROPEFFECT_COPY;
end;

イベントハンドラーでは、OnDragDrop使用された効果を判別できます。

procedure TForm1.VirtualStringTree1DragDrop(Sender: TBaseVirtualTree;
  Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
  Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
begin
  case Effect of
    DROPEFFECT_COPY: ShowMessage('DROPEFFECT_COPY');
    DROPEFFECT_MOVE: ShowMessage('DROPEFFECT_MOVE');
  end;
end;
于 2012-10-20T22:52:58.483 に答える