Перетаскивание в DBGrid:
| Код | type TDBNew = class(TDBGrid); // определяем новый тип, чтобы было доступен метод MouseCoord из секции protected end; .... procedure Tform1.DbGrid1DragDrop(Sender, Source: Tobject; X, Y: Integer); var gc: TGridCoord; begin gc := TDBNew(DBGrid1).MouseCoord(x,y); if (gc.y > 0) and (gc.x > 0) then begin dbgrid1.datasource.dataset.moveby(gc.y - tdbnew(dbgrid1).row); dbgrid1.datasource.dataset.edit; dbgrid1.columns.items[gc.x - 1].field.asstring := Edit1.text; //текст перетаскиваемого Edit end; dbgrid1.setfocus; end;
|
здесь пример на тектовом поле таблицы и перетаскиваемом edit'e
Первая операция определяет ячейку над которой была отпущена кнопка мыши. обладая координатами курсора мыши, обращаемся к методу MouseCoord для того чтобы определить столбец и строку в таблице. Если целевая ячейка располагается не в первом ряду, в котором обычно находится заголовок, и не в первом столбце, в котором находится индикатор, то перемещаем указатель на текущую запись, используя разницу между номером строки (gc.y) и текущей активной строкой. Далее переводим набор данных в режим редактирования, извлекается значение поля из целевого столбца и изменяется его текст.
|