在 Delphi 11 Alexandria 的 Windows 10 中的 32 位 VCL 應用程式中,我有一個TRzShellTree(來自 GetIt 中可用的 Konopka Signature VCL Controls 7.0):
object RzShellTree1: TRzShellTree
Left = 0
Top = 41
Width = 201
Height = 428
Align = alLeft
BaseFolder.Pidl = {
004301000014001F50E04FD020EA3A6910A2D808002B30309D19002F433A5C00
00000000000000000000000000000000000054003100000000003D5465581100
44454C50484900003E0009000400EFBE1423F90E42549B502E00000000930F00
000001000000000000000000000000000000DFED4800440045004C0050004800
4900000016005A0031000000000042546956100053757065724D525500004200
09000400EFBE2154F655425469562E000000210A000000004B00000000000000
0000000000000000C43CDA00530075007000650072004D005200550000001800
660031000000000042546F56100050524F4A45437E3100004E0009000400EFBE
4254695642546F562E00000043EB0A0000000B00000000000000000000000000
000008E22E00500052004F004A004500430054002000470052004F0055005000
5300000018000000}
Indent = 19
ReadOnly = True
SelectionPen.Color = clBtnShadow
TabOrder = 0
OnDragOver = RzShellTree1DragOver
end
...我嘗試獲取有關從 Windows 檔案資源管理器拖動到OnDragOver事件處理程式中的一個節點上的檔案的資訊:
procedure TForm1.RzShellTree1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
CodeSite.Send('TForm1.RzShellTree1DragOver: Source.ClassName', Source.ClassName);
end;
具體來說,我需要獲取拖到節點上的檔案的檔案路徑。如果檔案是特定型別(例如 .DPROJ),我將設定 var 引數Accept = True,然后進一步處理檔案路徑。
但不幸的是,OnDragOver當我將檔案拖到其中一個節點上時,永遠不會呼叫事件處理程式!
但我只需要接受特定的檔案型別并將其展示給用戶。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
如上評論所述,OnDragDrop 和 OnDragOver 事件專門用于 VCL 內部拖放,不參與 TRzShellTree 實作的 OLE 拖放處理。更復雜的事情是在 TRzShellTree 的 OLE 拖放處理中沒有出現任何事件。處理拖動功能的方法是虛擬的,但我認為這不會導致你想要的。
另一種選擇是關閉 Options 屬性中的 OleDrag 和 OleDrop 設定,并使用 DropMaster 組件來處理拖放功能。您可以使用 DropMaster 更好地控制拖動操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424525.html
標籤:德尔福 拖放 树视图 delphi-11-亚历山大
