Показать сообщение отдельно
  #2  
Старый 30.01.2008, 08:29
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

У 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;
Ответить с цитированием