kotompazb писал(а):Там все очень упрощенно. Эвента там всего четыре: OnDragBegin, OnDragEnd, OnDragGetFileList, OnDragGetStringData.
Понятно. Там только DataSource реализован, а DropTarget нет.
Предлагаю, сделать правильным путём, а не обходным! Займёт чуток больше времени, но в итоге дложно красиво получиться.
Добавлено спустя 3 часа 4 минуты:вот "NativeDropTarget" компонент. Как использовать (после установки в Lazarus, доступен в закладке "System").
1) Положить на форму
2) Назначить "Control" (тот контрол в который файлы складываются)
3) Назначать OnDragAction - что делать при DragEnter, DragOver
4) Назначить OnDrop - что делать при дропе.
События OnDragAction и OnDrop имеют одинаковые параметры
* Sender: TObject; - (ссылка на TNativeDropTarget)
* Data: TNativeDataSource; - объект, которые показывает, что "притащили"
* X, Y: Integer; - коордианты мышки (относительно контрола)
* AShiftState: TShiftState; - состояние клавиатуры + мышки
* var AAction: TNativeDropAction -  какое действие нужно соверщить при drop-е. (в завимисомти от Action-а поменяется и курсор). Возможные значения:
** ndaNodrop - файлы не принимаются
** ndaCopy - файлы "будут скопированы"
** ndaMove - файлы "будут перенесены"
** ndaLink - файлам "создаться линк"
В DragAction ешё дополнительно есть
* ADragAction: TDragState;  - DragEnter, DragMove и DragLeave. Состояние добавлено параметром, вместо того чтобы плодить три метода.
У объекта Data есть два метода
* GetType() которые вернёт тип данных - либо dsFile (если файлы) либо dsOther (если что-то нещё)
* GetFiles() - получить список файлов.
Пример использования
- Код: Выделить всё
 procedure TForm1.NativeDropTarget1DragAction(Sender: TObject;
  Data: TNativeDataSource; ADragAction: TDragState; X, Y: Integer;
  AShiftState: TShiftState; var AAction: TNativeDropAction);
begin
  if Data.GetType=dsFiles then 
    AAction:=ndaCopy
  else
    AAction:=ndaNodrop;
end;
procedure TForm1.NativeDropTarget1Drop(Sender: TObject;
  Data: TNativeDataSource; X, Y: Integer; AShiftState: TShiftState;
  var AAction: TNativeDropAction);
var
  st: TStringList;
begin
  st:=TStringList.Create;
  try
    Data.GetFiles(st);
    Memo1.Lines.Assign(st);  
  finally
    st.Free;
  end
end;
Работаем только под винду.
 
			У вас нет необходимых прав для просмотра вложений в этом сообщении.