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

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

Code:

type

TStringGridX = class(TStringGrid)

public

   procedure MoveColumn(FromIndex, ToIndex: Longint);

   procedure MoveRow(FromIndex, ToIndex: Longint);

end;

 

Чтобы воспользоваться этими методами, достаточно вызвать соответствующий метод предка:

Code:

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

begin

inherited;

end;

 

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

begin

inherited;

end;

 

 

Этот компонент не нужно регистрировать в палитре компонентов. Просто используйте потомка TStringGrid или любого TCustomGrid, и вызывайте его методы:

Code:

procedure TForm1.Button1Click(Sender: TObject);

begin

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

end;

 


Примечание от Vit: код можно написать значительно компактнее:

 

Code:

type TFake = class(TStringGrid);

...

 

procedure TForm1.Button1Click(Sender: TObject);

{©Drkb v.3(2007): www.drkb.ru,

®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}

begin

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

end;

 


 

Code:

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Перестановка строки в StringGrid в другую позицию

 

Передвигает строку StringGrid из позиции FromRow в позицию ToRow, сдвигая остальные

 

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

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

Copyright:   MBo

Дата:        28 апреля 2002 г.

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

 

procedure SGMoveRow(SG: TStringGrid; FromRow, ToRow: Integer);

var

TempList: TStringList;

i: Integer;

begin

with SG do

   if (FromRow in [0..RowCount - 1]) and (ToRow in [0..RowCount - 1]) then

   begin

     TempList := TStringList.Create;

     TempList.Assign(Rows[FromRow]);

     if FromRow > ToRow then

       for i := FromRow downto ToRow + 1 do

         Rows[i].Assign(Rows[i - 1])

     else

       for i := FromRow to ToRow - 1 do

         Rows[i].Assign(Rows[i + 1]);

     Rows[ToRow].Assign(TempList);

     TempList.Free;

   end;

end;

 

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

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

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

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


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