Newsgroup: it.comp.lang.delphi
Titolo: Trascinare un file su un controllo

Vorrei che un controllo su una mia form sia abilitato a trascinarci sopra i
file.
Ovvero vorrei che preso un file da explorer lo si possa trascinare sul
controllo (un TEdit), e vorrei poter mettere una procedura che gestisce
l'evento.. sapete come si fa?
Spero di essermi spiegato :D                {MSX}
--
{MSX}  -  
http://msx.rules.it
Mantenitore delle FAQ di it.comp.lang.delphi,
reperibili qui: 
http://gpi.infomedia.it/abc/delphi/FaqDelphi.txt

Ti riporto un esempio di componente preso su D&D sul drop dei file esterni
sull'applicazione Delphi. So che tu sei capace, saprai come adattarlo al tuo
caso.
Ciao,
  Fabio
unit DropHelperEx;
interface
uses
  Windows, Classes, Messages;
type
  TDropHelperEx = class(TComponent)
  private
    FDropHandle: THandle;
    FFileCount: Integer;
    FFileNames: TStringList;
    FParentOldWndProc: TWndMethod;
    FOnDropFiles: TNotifyEvent;
    procedure DropFiles;
    function GetFiles(const Index: Integer): string;
    function GetFileNames: TStrings;
    function GetFileNameSize(const Index: Integer): Integer;
    procedure SetDropHandle(const Value: THandle);
    procedure SubClassWndProc(var Msg: TMessage);
  public
    constructor Create(AnOwner: TComponent); override;
    destructor Destroy; override;
    property FileNames: TStrings read GetFileNames;
    { lista dei nomi dei file oggetto dell'operazione di drop }
    property DropHandle: THandle read FDropHandle write SetDropHandle;
    { proprietą per far funzionare il componente in modalitą "manuale" }
  published
    property OnDropFiles: TNotifyEvent read FOnDropFiles write FOnDropFiles;
    { evento che si verifica al momento del drop di file sul componente
    proprietario; infatti non č possibile utilizzare gli eventi OnDragDrop e
    OnDragOver del componente proprietario per il semplice fatto che non si
    verificano }
  end;
procedure Register;
implementation
uses
  Controls, SysUtils, ShellAPI;
procedure Register;
begin
  RegisterComponents('DeD', [TDropHelperEx]);
end;
constructor TDropHelperEx.Create(AnOwner: TComponent);
begin
  inherited Create(AnOwner);
  FFileNames:= TStringList.Create;
  if AnOwner is TWinControl then
    with AnOwner as TWinControl do
    begin
      DragAcceptFiles(Handle, True);
      FParentOldWndProc:= WindowProc;
      WindowProc:= SubClassWndProc;
    end
end;
destructor TDropHelperEx.Destroy;
begin
  FFileNames.Free;
  if Owner is TWinControl then
    with Owner as TWinControl do
    begin
      DragAcceptFiles(Handle, False);
      WindowProc:= FParentOldWndProc;
    end;
  inherited Destroy;
end;
procedure TDropHelperEx.DropFiles;
begin
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self);
end;
function TDropHelperEx.GetFileNames: TStrings;
var
  c: Integer;
begin
  FFileNames.Clear;
  FFileNames.Capacity:= FFileCount;
  for c:= 0 to Pred(FFileCount) do
    FFileNames.Add(GetFiles(c));
  Result:= FFileNames;
end;
function TDropHelperEx.GetFileNameSize(const Index: Integer): Integer;
begin
  Result:= DragQueryFile(FDropHandle, Index, nil, 0);
end;
function TDropHelperEx.GetFiles(const Index: Integer): string;
var
  PCharFName: PChar;
  PCharSize: Integer;
begin
  PCharSize:= GetFileNameSize(Index);
  GetMem(PCharFName, PCharSize + 1);  //aggiunto + 1
  DragQueryFile(FDropHandle, Index, PCharFName, PCharSize + 1);  //aggiunto
+ 1
  Result:= string(PCharFName);
  FreeMem(PCharFName);
end;
procedure TDropHelperEx.SetDropHandle(const Value: THandle);
const
  NUM_OF_FILES_ID = $FFFFFFFF;
begin
  if FDropHandle <> Value then
  begin
    FDropHandle:= Value;
    FFileCount:= DragQueryFile(FDropHandle, NUM_OF_FILES_ID, nil, 0);
    DropFiles;
  end;
end;
procedure TDropHelperEx.SubClassWndProc(var Msg: TMessage);
begin
  if Msg.Msg = WM_DROPFILES then
    SetDropHandle(Msg.WParam)
  else
    FParentOldWndProc(Msg);
end;
end.

..che ne dici di:
procedure TForm14.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle:=Params.ExStyle+WS_EX_ACCEPTFILES;
end;
CB.
"{MSX}" <nlugat...@THISinwind.it> ha scritto nel messaggio
news:Rtj19.155822$vm5.5...@news2.tin.it...
