El código original debe funcionar. El único problema que le veo es en
Código Delphi
[-]
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TImage) ;
Accept := (Source is TPanel) ;
end;
Si lo que arrastras es una imagen, la primera línea indica al formulario que debe aceptar el objeto, pero la segunda línea lo contradice puesto que Source es una imagen y no un panel.
El código debería ser así:
Código Delphi
[-]
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TImage) or (Source is TPanel) ;
end;
Sin ánimos de demeritar, creo que es mejor adherirse a los eventos de la VCL que ir a "bajo nivel".
// Saludos