Пользователь может перемещать строки и колонки 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;
|
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!