I don't know how to get filenames dropped at specific locations in a list (if that is what you are asking). But the functionality for dropping files is already built-in to TForm, which provides an OnDropFiles event. Here's a simple example that you can build by adapting a new blank Lazarus project by adding an OnCreate and an OnDropFiles event.
unit mainFilesDragDrop;
{$mode objfpc}{$H+}
interface
uses
Forms, Controls, ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
private
lv: TListView;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormDropFiles(Sender: TObject; const FileNames: array of String);
var
i: integer;
li: TListItem;
begin
lv.Clear;
for i:=Low(FileNames) to High(FileNames) do begin
li:=lv.Items.Add;
li.Caption:=FileNames[i];
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
col: TListColumn;
begin
AllowDropFiles:=True;
Caption:='Drop Files example';
lv:=TListView.Create(Self);
lv.Align:=alClient;
lv.ViewStyle:=vsReport;
lv.Parent:=Self;
col:=lv.Columns.Add;
col.Caption:='Dropped Files';
col.MinWidth:=ClientWidth;
col.Width:=ClientWidth;
end;
end.