Пользователь может перемещать строки и колонки StringGrid при помощи мышки. Можно ли это сделать программно? В описании TCustomGrid можно увидеть методы MoveColumn и MoveRow, однако они скрыты в TStringGrid. Но нам ничего не мешает просабклассить TStringGrid и объявить эти методы как public:

Code:

{ **** UBPFD *********** ****

>> Обмен строк StringGrid

 Обмен содержимого указанных строк StringGrid.

Варианты без копирования связанных с ячейками объектов и вместе с ними.

Зависимости: Grids

Автор:       Борис Новгородов (MBo), Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., Новосибирск

Copyright:   MBo

***************************************************** }

procedure SGExchangeRows(SG: TStringGrid; Row1, Row2: Integer);

var

TempString: string;

begin

if (Row1 in [0..SG.RowCount - 1]) and (Row2 in [0..SG.RowCount - 1]) then

begin

   TempString := SG.Rows[Row1].Text;

   SG.Rows[Row1].Assign(SG.Rows[Row2]);

   SG.Rows[Row2].Text := TempString;

end;

end;

 

procedure SGExchRowsWithObj(SG: TStringGrid; Row1, Row2: Integer);

var

TempList: TStringList;

begin

with SG do

   if (Row1 in [0..RowCount - 1]) and (Row2 in [0..RowCount - 1]) then

   begin

     TempList := TStringList.Create;

     TempList.Assign(Rows[Row1]);

     Rows[Row1].Assign(Rows[Row2]);

     Rows[Row2].Assign(TempList);

     TempList.Free;

   end;

end;

 

Code:

{

The user can move rows and columns of a StringGrid with the mouse.

Can it also be done by code?

In the help for TCustomGrid you can see the methods MoveColumn and MoveRow,

but they are hidden in TStringGrid.

We can make them accessible again by subclassing TStringGrid and

declaring these methods as public:

}

 

type

TStringGridHack = class(TStringGrid)

public

   procedure MoveColumn(FromIndex, ToIndex: Longint);

   procedure MoveRow(FromIndex, ToIndex: Longint);

end;

 

{

The implementation of these methods simply consists of invoking the

corresponding method of the ancestor:

}

 

procedure TStringGridHack.MoveColumn(FromIndex, ToIndex: Integer);

begin

inherited;

end;

 

procedure TStringGridHack.MoveRow(FromIndex, ToIndex: Integer);

begin

inherited;

end;

 

 

// Example, Beispiel:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

TStringGridHack(StringGrid1).MoveColumn(1, 3);

end;