Часть OnDragDrop, относящаяся к внутреннему переносу:
Code: |
var ACol, ARow, c, r: Integer; GR: TGridRect; begin StringGrid1.MouseToCell(X, Y, ACol, ARow); if Source = StringGrid1 then with StringGrid1 do begin Cells[Acol, Arow] := Cells[Col,Row]; //копируем ячейку-источник в приемник if Tag = 1 then Cells[Col,Row] := ''; // очищаем источник, если было нажато Alt Tag := 0; end; |
А вот из StringGrid2 сделаем перенос выбранного диапазона ячеек с помощью правой кнопки, для этого в OnMouseDown
Code: |
if Button = mbRight then StringGrid2.BeginDrag(True); |
И теперь часть StringGrid1DragDrop, относящаяся к переносу из StringGrid2:
Code: |
if Source = StringGrid2 then begin GR := StringGrid2.Selection; // Selection - выделенные в StringGrid2 ячейки for r := 0 to GR.Bottom - GR.Top do for c := 0 to GR.Right - GR.Left do if (ACol + c < StringGrid1.ColCount) and (ARow + r < StringGrid1.RowCount) then // застрахуемся от записи вне StringGrid1 StringGrid1.Cells[ACol + c, ARow + r] := StringGrid2.Cells[c + GR.Left, r + GR.Top]; end; |
Теперь покажем, как этот диапазон ячеек из StringGrid2 перенести в Memo2. Для этого в OnDragOver Memo2 пишем:
Code: |
Accept := (Source = StringGrid2) or (Source = DBGrid1); |
и в OnDragDrop Memo2:
Code: |
var c, r: integer; s: string; begin Memo2.Clear; if Source = StringGrid2 then with StringGrid2 do for r := Selection.Top to Selection.Bottom do begin s := ''; for c := Selection.Left to Selection.Right do s := s + Cells[c, r] + #9; // разделим ячейки табуляцией memo2.lines.add(s); end |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!