У DBGrid установить свойства:
DragKind = dkDrag (установлено по умолчанию),
DragMode = dkManual.
На DBGrid.OnMouseMove пишем обработчик:
Код:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (ssLeft in Shift) then
DBGrid1.BeginDrag(False);
end;
У ListBox пишем обработчики событий
OnDragOver и
OnDragDrop. Параметр
Source указывает на компонент-источник:
Код:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
i: Integer;
S: String;
begin
// Узнаем на какой строке ListBox была отпущена мышка
i := ListBox1.ItemAtPos(Point(X, Y), True);
if i <> -1 then begin
// И чего-нибудь делаем. В данном случае выводим информацию
// о том, что куда перетащили
S := (Source as TDBGrid).DataSource.DataSet.FieldByName('Name').AsString;
ShowMessage(S + ' -> ' + ListBox1.Items[i]);
end;
end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
// Принимаем Drag&Drop только от DBGrid1
Accept := Source = DBGrid1;
end;