Содержание материала

 

Часть 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

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить