unit Main;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, DateUtils, ExtCtrls, FileCtrl, ShellCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
ShellListView1: TShellListView;
ShellTreeView1: TShellTreeView;
procedure FormActivate(Sender: TObject);
procedure ShellListView1ColumnClick(Sender: TObject; Column: TListColumn);
private
procedure DragDropHandler(Sender, Source: TObject; X, Y: integer);
procedure DragOverHandler(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean);
public
end;
var
Form1: TForm1;
var
infile, outfile: string;
type
TOpenShellTreeNode = class(TTreeNode) // Copied from ShellCtrls
private
FFileInfo: TSearchRec;
FBasePath: string;
end;
type
TShellTreeViewOpener = class(TShellTreeView);
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.DragDropHandler(Sender, Source: TObject; X, Y: integer);
var
tv: TTreeView;
iNode: TTreeNode;
begin
tv := TTreeView(Sender);
iNode := tv.GetNodeAt(x, y);
outfile := iNode.GetTextPath;
infile := ShellListview1.root + ShellListView1.Selected.Caption;
ShowMessage(infile + ' ' + outfile);
end;
procedure TForm1.DragOverHandler(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean);
begin
Accept := True;
end;
procedure AddToRoot(ToShellTree: TShellTreeView; const Caption, Path: string; Data: Pointer = nil);
var
RootNode: TOpenShellTreeNode;
RootDir: string;
begin
RootNode := TOpenShellTreeNode(Pointer(ToShellTree.Items.AddChildObject(nil, Caption, Data)));
RootDir := ExcludeTrailingPathDelimiter(Path);
RootNode.FFileInfo.Attr := FileGetAttr(RootDir);
RootNode.FFileInfo.Name := RootDir;
RootNode.FBasePath := '';
RootNode.HasChildren := True;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
TShellTreeViewOpener(ShellTreeView1).OnDragDrop := @DragDropHandler;
TShellTreeViewOpener(ShellTreeView1).OnDragOver := @DragOverHandler;
addtoroot(ShellTreeView1, 'Kodi', '\\kodi\data\');
end;
procedure TForm1.ShellListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
if column.index = 1 then ShellListView1.sorttype := stdata else ShellListView1.sorttype := sttext;
end;
end.