Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 00:40   #1
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию Drag&Drop из TStringGrid

Нужно перетаскивать данные из стрингрида, но как только dragmode ставлю в dmAutomatic, то перестают выбираться ячейки стрингридовские, т.е. любое нажатие мышкой компонент расценивает как попытку перетащить данные.... Как это побороть?
Sergey2 вне форума Ответить с цитированием
Старый 01.09.2009, 08:45   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вот есть код из букваря - коменты я думаю помогут понять ....
Код:
implementation
{$R *.DFM}
var
  SourceCol, SourceRow: integer;// переменные нужные ...

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Устанавливаем режим перетаскивания для управлениям им с помощью нашего кода }
  SG.DragMode := dmManual; 
  { Как-нить заполняем грид  }
  SG.Cells[2, 2] := 'A';
  SG.Cells[3, 2] := 'B';
  SG.Cells[4, 2] := 'C';
end;

procedure TForm1.SGMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: integer);
begin
  { переводим мышиные координаты в координаты грида }
  SG.MouseToCell(X, Y, SourceCol, SourceRow);
  { начинаем "тянуть" с точностью 4 пикселя }
  if (SourceCol > 0) and (SourceRow > 0) then SG.BeginDrag(False, 4);
end;

procedure TForm1.SGDragOver(Sender, Source: TObject; X, Y: Integer;  State: TDragState; var Accept: Boolean);
var
  CurrentCol, CurrentRow: integer;
begin
  SG.MouseToCell(X, Y, CurrentCol, CurrentRow); // convert mouse coord.
  { когда уже тянем - проверяем туда ли вообще тянем ? И если что - запрещаем тянуть ... } 
  Accept := (Sender = Source) and (CurrentCol > 0) and (CurrentRow > 0);
end;

procedure TForm1.SGDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DestCol, DestRow: Integer;
begin
  SG.MouseToCell(X, Y, DestCol, DestRow); // опять перевод координат
  { перемещаем ячейку }
  SG.Cells[DestCol, DestRow] := SG.Cells[SourceCol, SourceRow];
  if (SourceCol <> DestCol) or (SourceRow <> DestRow) then
    SG.Cells[SourceCol, SourceRow] := '';
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.09.2009, 23:02   #3
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

А с DragMode := dmAutomatic; работать не будет? Просто в интернете есть примеры где это все в автомате, но у меня не работает
Sergey2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag & Drop + HBitmap BOBAH13 Win Api 6 19.07.2009 00:17
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag&Drop в ListBox'ах MAKEDON Общие вопросы Delphi 3 21.08.2008 13:12
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04