Merhaba...
- Belki daha basit bir yolu vardır ama ben TümeVarım metodunu tercih ettim. Eksik yönlerini de biraz ilüzyon ile çözüme ulaştırdık...

(
İlüzyon nerede diye sorarsan, Windowed Control olmayan nesneleri pencerelendirme)
- Şimdi; dışardan form üzerine kabul ettiğin dosya/dosyaların hangileri olduğunu bulduğun kod örneğinde de gördüğün üzere
DragQueryFile ile alabildiğini anlamışsındır.

Peki mouse ile hangi noktaya bırakıldığını tespit edip edemeyeceğini merak ettin mi

Etmediysen bile şimdi ediyorsundur, cevabı
DragQueryPoint komutudur...

Şimdi gelen dosya/dosyaların bırakıldığı
Mouse Koordinatını TPoint olarak bulduğumuza göre geriye ne kalıyor,
bu koordinatlarda hangi nesnemiz var 
'ı bulmak...

Sırası gelmişken unutulmaması gereken nokta
ClientToScreen fonksiyonu ile bu TPoint değerinin Form üzerindeki koordinat tipine dönüştürülmesini sağlayıp öyle kontrole sokmalısın.
FindVCLWindow komutu da burada yardımımıza yetişiyor...

Bir anlamda verdiğin
TPoint'deki nesnenin gölgesi halini alıyor... Geriye dosyaların kabul göreceği nesnelerin seçimi kalıyor. Ben en çok TAG değerleri vererek kullanmayı seviyorum ve sana da tavsiye ediyorum...

Demişsin ki formda 4 farklı nesne var. Sen şimdi bu nesnelerin TAG'ına birer rakam ata ve
FindVCLWindow ile bulduğun nesnenin bu TAG numarasına göre basit bir CASE içinde değer aktarımını yap...

Yine sırası gelmişken,
FindVCLWindow ile sadece Windowed Control özelliği olan nesneleri bulabiliyor.
TImage TLabel gibi bu özellikten yoksun nesne/nesneler varsa bunları basit bir
TPanel içine al ve bu Panel'i Image nesnesi kabul edecek şekilde stratejini belirle...

Sıra ürüne geldi. Aşağıda senin için bir örnek hazırladım. 1
TMemo, 1
TEdit ve (
TPanel içine alınmış) 1
TImage olmak üzere 3 farklı nesne var.
Resim drag/drop edilirse
TImage'e resim olarak load ediliyor. Bir dizi dosya seçilirse memo haricindekiler sadece ilk sıradakini değerlendiriyor.

Bahsetmeye çalıştığım noktaları kavrarsan benzeri tekniği sıkıştığın her yerde kullanabilirsin...

Ben öyle yapıyorum...
Kod: Tümünü seç
procedure TForm1.AppMessage(var Msg: Tmsg; var Handled: Boolean);
const
BufferLength : DWORD = 511;
var
xPoint : TPoint;
DroppedFilename : string;
FileIndex : DWORD;
NumDroppedFiles : DWORD;
pDroppedFilename : array [0..511] of Char;
begin
if Msg.message = WM_DROPFILES then
begin
FileIndex := $FFFFFFFF;
DragQueryPoint(Msg.wParam, xPoint);
NumDroppedFiles := DragQueryFile(Msg.WParam, FileIndex,
pDroppedFilename, BufferLength);
Case FindVCLWindow(ClientToScreen(xPoint)).Tag of
1: begin // Image olan TPanel
DragQueryFile(Msg.WParam, 0, pDroppedFilename, BufferLength);
Image1.Picture.LoadFromFile(StrPas(pDroppedFilename));
end;
2: begin // TEdit
DragQueryFile(Msg.WParam, 0, pDroppedFilename, BufferLength);
Edit1.Text := StrPas(pDroppedFilename);
end;
3: begin // TMemo
Memo1.Lines.Clear;
for FileIndex := 0 to (NumDroppedFiles - 1) do
begin
DragQueryFile( Msg.WParam,
FileIndex,
pDroppedFilename,
BufferLength );
DroppedFilename := StrPas(pDroppedFilename);
Memo1.Lines.Add(Format('(%d,%d) Dosya Adı :%s', [xPoint.X, xPoint.Y, pDroppedFilename]));
end;
end;
end; // Case
DragFinish(Msg.WParam);
Handled := true;
end;
end;

Çalışmalarında başarılar... Forum adına güzel bir soru ve örnek teşkil etti...