Автор: Dennis Passmore
Поскольку свойство Cols[x] компонента TStringGrid реально является компонентом TStrings, все методы TStrings применимы также и к Cols[x].
Недавно в интернете я нашел реализацию расширенных функций TStringGrid:
Code: |
{ Создано: Dennis Passmore 1929 Mango Tree Drive Edgewater, Fl. 32141 CIS: 71640,2464 Март 1, 1996 Данный код свободен в использовании при одном условии: в исходном коде должна присутствовать указанная выше кредитка со ссылкой на автора.
Примечание по использованию кода: Всякий раз при удалении Row (строки) или Column (колонки) проверяйте наличие и удаляйте любые объекты, которые могли быть назначены любой ячейке в строке или колонке, которые вы собираетесь удалять, поскольку данный код не может знать ни размера, ни типа ассигнованных ими объектов.
}
unit GridFunc;
interface
uses Sysutils, WinProcs, Grids;
procedure InsertRow(Sender: TStringGrid; ToIndex: Longint); procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint); procedure InsertColumn(Sender: TStringGrid; ToIndex: Longint); procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);
implementation
type TCSGrid = class(TStringGrid) private public procedure MoveRow(FromIndex, ToIndex: Longint); procedure MoveColumn(FromIndex, ToIndex: Longint); end;
procedure TCSGrid.MoveRow(FromIndex, ToIndex: Longint); begin RowMoved(FromIndex, ToIndex); { Защищенный метод TStringGrid } end;
procedure TCSGrid.MoveColumn(FromIndex, ToIndex: Longint); begin ColumnMoved(FromIndex, ToIndex); { Защищенный метод TStringGrid } end;
procedure InsertRow(Sender: TStringGrid; ToIndex: Longint); var xx, yy: Integer; begin if ToIndex >= 0 then with TCSGrid(Sender) do if (ToIndex <= RowCount) then begin RowCount := RowCount + 1; xx := RowCount - 1; for yy := 0 to ColCount - 1 do begin Cells[yy, xx] := ' '; ObJects[yy, xx] := nil; end; if ToIndex < RowCount - 1 then MoveRow(RowCount - 1, ToIndex); end else MessageBeep(0) else MessageBeep(0); end;
procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint); begin if FromIndex > l; = 0 then with TCSGrid(Sender) do if (RowCount > 0) and (FromIndex < RowCount) then begin if (FromIndex < RowCount - 1) then MoveRow(FromIndex, RowCount - 1); Rows[RowCount - 1].Clear; RowCount := RowCount - 1; end else MessageBeep(0) else MessageBeep(0); end;
procedure InsertColumn(Sender: TStringGrid; ToIndex: Longint); var xx, yy: Integer; begin if ToIndex >= 0 then with TCSGrid(Sender) do if (ToIndex <= ColCount) then begin ColCount := ColCount + 1; xx := ColCount - 1; Cols[xx].BeginUpdate; for yy := 0 to RowCount - 1 do begin Cells[xx, yy] := ' '; ObJects[xx, yy] := nil; end; Cols[xx].EndUpdate; if ToIndex < ColCount - 1 then MoveColumn(ColCount - 1, ToIndex); end else MessageBeep(0) else MessageBeep(0); end;
procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint); begin if FromIndex >= 0 then with TCSGrid(Sender) do if (ColCount > 0) and (FromIndex < ColCount) then begin if (FromIndex < ColCount - 1) then MoveColumn(FromIndex, ColCount - 1); Cols[ColCount - 1].Clear; ColCount := ColCount - 1; end else MessageBeep(0) else MessageBeep(0); end;
end.
|
Code: |
// For this tip you need a StringGrid1 and a Button1. // Fur diesen Tip braucht man ein StringGrid1 und einen Button1.
{...} type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; procedure Button1Click(Sender: TObject); private {...} public {...} end;
type TStringGridHack = class(TStringGrid) protected procedure DeleteRow(ARow: Longint); reintroduce; procedure InsertRow(ARow: Longint); end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TStringGridHack.DeleteRow(ARow: Longint); var GemRow: Integer; begin GemRow := Row; if RowCount > FixedRows + 1 then inherited DeleteRow(ARow) else Rows[ARow].Clear; if GemRow < RowCount then Row := GemRow; end;
procedure TStringGridHack.InsertRow(ARow: Longint); var GemRow: Integer; begin GemRow := Row; while ARow < FixedRows do Inc(ARow); RowCount := RowCount + 1; MoveRow(RowCount - 1, ARow); Row := GemRow; Rows[Row].Clear; end;
procedure TForm1.Button1Click(Sender: TObject); begin // Insert Row, Zeile hinzufugen TStringGridHack(StringGrid1).InsertRow(1); // Remove Row, Zeile entfernen TStringGridHack(StringGrid1).DeleteRow(2); end;
end. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!