StringGrid
Автор: Alex Schlecht
StringGrids / DBGrids с цветными ячейками смотрятся очень красиво, и Вы можете информировать пользователя о важных данных внутри Grid.
Совместимость: все версии Delphi
К сожалению, невозможно применить один и тот же метод к StringGrids и к DBGrids. Итак сперва рассмотрим как это сделать в StringGrid:
1. StringGrid
=============
Для раскрашивания будем использовать событие "OnDrawCell". Следующий код показывает, как сделать в Grid красный бэкраунд. Бэкграунд второй колонки будет зелёным.
- Подробности
- Родительская категория: StringGrid
- Категория: Цвета текста, ячеек, столбцов и колонок
Автор: Dennis Passmore
Поскольку свойство Cols[x] компонента TStringGrid реально является компонентом TStrings, все методы TStrings применимы также и к Cols[x].
Недавно в интернете я нашел реализацию расширенных функций TStringGrid:
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
Code: |
Procedure GridRemoveColumn(StrGrid: TStringGrid; DelColumn: Integer); Var Column: Integer; begin If DelColumn <= StrGrid.ColCount then Begin For Column := DelColumn To StrGrid.ColCount-1 do StrGrid.Cols[Column-1].Assign(StrGrid.Cols[Column]); StrGrid.ColCount := StrGrid.ColCount-1; End; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
Code: |
procedure SGInsertRow(SG: TStringGrid; NewRow: Integer); var i: Integer; begin if NewRow < 0 then NewRow := 0; // либо 1, задайте нужное вам поведение with SG do begin RowCount := RowCount + 1; if NewRow < RowCount - 1 then begin for i := RowCount - 1 downto NewRow + 1 do Rows[i].Assign(Rows[i - 1]); end; Rows[NewRow].Clear; end; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
В обработчике события OnDrawCell элемента StringGrid поместите следующий код:
Code: |
with (Sender as TStringGrid) do with Canvas do begin {...} Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic); {...} end; |
Используйте метод Draw() или StretchDraw() класса TCanvas. Image1 - это TImage с предварительно загруженным в него bitmap-ом.
- Подробности
- Родительская категория: StringGrid
- Категория: Вставка объектов в ячейки
Code: |
Procedure GridAddColumn(StrGrid: TStringGrid; NewColumn: Integer); Var Column: Integer; begin StrGrid.ColCount := StrGrid.ColCount+1; For Column := StrGrid.ColCount-1 downto NewColumn do StrGrid.Cols[Column].Assign(StrGrid.Cols[Column-1]); StrGrid.Cols[NewColumn-1].Text := ''; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
Code: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
const cell_x = 2; cell_y = 2;
var Form1: TForm1; CheckBox1: TCheckBox;
implementation
{$R *.DFM}
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var r:trect; begin if(cell_x>=StringGrid1.LeftCol) and (cell_x<=StringGrid1.LeftCol+StringGrid1.VisibleColCount) and (cell_y>=StringGrid1.TopRow) and (cell_x<=StringGrid1.TopRow+StringGrid1.VisibleRowCount) then CheckBox1.Visible:=true else CheckBox1.Visible:=false;
if (acol=cell_x) and (arow=cell_y) then begin r:=stringgrid1.CellRect(cell_x,cell_y); r.Left:=r.left+stringgrid1.left+2; r.right:=r.right+stringgrid1.left+2; r.top:=r.top+stringgrid1.top+2; r.bottom:=r.bottom+stringgrid1.top+2; CheckBox1.BoundsRect:=r; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin CheckBox1:=TCheckBox.Create(form1); CheckBox1.parent:=form1; CheckBox1.Caption:='proba'; end;
end.
|
- Подробности
- Родительская категория: StringGrid
- Категория: Вставка объектов в ячейки
Можно сделать наследника от TCustomGrid. А у последнего есть метод - DeleteRow.
Автор: Song
Например удаление текущей строки:
Code: |
Type TFakeGrid=class(TCustomGrid); {©Drkb v.3(2007): www.drkb.ru, ®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}
procedure TForm1.MyDelete(Sender: TObject); begin TFakeGrid(Grid).DeleteRow(Grid.row); end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
Code: |
procedure TForm1.FormCreate(Sender: TObject); begin {Высоту combobox'а не изменишь, так что вместо combobox'а будем изменять высоту строки grid'а !} StringGrid1.DefaultRowHeight := ComboBox1.Height; {Спрятать combobox} ComboBox1.Visible := False; ComboBox1.Items.Add('Delphi Kingdom'); ComboBox1.Items.Add('Королевство Дельфи'); end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin {Перебросим выбранное в значение из ComboBox в grid} StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; ComboBox1.Visible := False; StringGrid1.SetFocus; end;
procedure TForm1.ComboBox1Exit(Sender: TObject); begin {Перебросим выбранное в значение из ComboBox в grid} StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; ComboBox1.Visible := False; StringGrid1.SetFocus; end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var R: TRect; begin if ((ACol = 3) and (ARow <> 0)) then begin {Ширина и положение ComboBox должно соответствовать ячейке StringGrid} R := StringGrid1.CellRect(ACol, ARow); R.Left := R.Left + StringGrid1.Left; R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top; R.Bottom := R.Bottom + StringGrid1.Top; ComboBox1.Left := R.Left + 1; ComboBox1.Top := R.Top + 1; ComboBox1.Width := (R.Right + 1) - R.Left; ComboBox1.Height := (R.Bottom + 1) - R.Top; {Покажем combobox} ComboBox1.Visible := True; ComboBox1.SetFocus; end; CanSelect := True; end;
|
- Подробности
- Родительская категория: StringGrid
- Категория: Вставка объектов в ячейки
Code: |
procedure TForm1.Button1Click(Sender: TObject); var i, k: Integer; begin with StringGrid1 do for i := 0 to ColCount - 1 do for k := 0 to RowCount - 1 do Cells[i, k] := ''; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Удаление и добавление столбцов и колонок
Автор: SottNick
Если в таблице вы используете событие OnDrawCell для помещения в ячейку рисунка, причем различного, в зависимости, например, от соответствующего значения в двумерном массиве, и вам надо, чтобы после изменения значения в массиве обновилось изображение (Refresh не подходит, т.к. будет мелькать), то измените значение у ячейки (DrawGrid не годится):
Code: |
StringGrid1.Cells[i,j]:=''; |
или
Code: |
StringGrid1.Cells[i,j]:=StringGrid1.Cells[i,j]; |
если там что-то хранится
- Подробности
- Родительская категория: StringGrid
- Категория: Вставка объектов в ячейки
Страница 5 из 6