:: MVP ::
|
|
:: RSS ::
|
|
|
Как запретить редактирование ячеек в TStringGrid по условию?
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if (ACol = 1) and (ARow = 1) then
StringGrid1.Options := StringGrid1.Options - [goEditing]
else
StringGrid1.Options := StringGrid1.Options + [goEditing];
end;
|
Как сделать размер ползунка в TStringGrid пропорциональным содержимому?
procedure TForm1.Button1Click(Sender: TObject);
var
Info: TScrollInfo;
begin
FillChar(Info, SizeOf(Info), 0);
with Info do
begin
cbSize := SizeOf(Info);
fMask := SIF_ALL;
GetScrollInfo(StringGrid1.Handle, SB_VERT, Info);
fMask := fMask or SIF_PAGE;
nPage := 5 * (nMax - nMin) div StringGrid1.RowCount;
end;
SetScrollInfo(StringGrid1.Handle, SB_VERT, Info, True);
end;
|
Как изменить цвет фона редактиреумей ячейки в TStringGrid?
type
THackStringGrid = class(TStringGrid);
implementation
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
THackStringGrid(Sender).InplaceEditor.Brush.Color := clBlack;
end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
begin
THackStringGrid(Sender).InplaceEditor.Brush.Color := clWhite;
end;
|
Как выделить группу ячеек в TStringGrid?
procedure TForm1.Button1Click(Sender: TObject);
var
SelectedRect: TGridRect;
begin
SelectedRect.Left := 1; // Левая граница
SelectedRect.Top := 1; // Верхняя граница
SelectedRect.Right := 4; // Правая граница
SelectedRect.Bottom := 3; // Нижняя граница
StringGrid1.Selection := SelectedRect;
end;
|
Как получить пиксельные координаты ячейки таблицы в TStringGrid?
procedure TForm1.StringGrid1Click(Sender: TObject);
var
Rect: TRect;
begin
Rect := StringGrid1.CellRect(StringGrid1.Col, StringGrid1.Row);
Caption := Format('Left: %d; Top: %d', [Rect.Left, Rect.Top]);
end;
// Если нужно считать от левого верхнего угла клиентской
// части формы а на StringGrid'а, добавьте к полученным
// координатам значения StringGrid1.Left и StringGrid1.Top
procedure TForm1.StringGrid1Click(Sender: TObject);
var
Rect: TRect;
begin
Rect := StringGrid1.CellRect(StringGrid1.Col, StringGrid1.Row);
Caption := Format('Left: %d; Top: %d', [Rect.Left + StringGrid1.Left,
Rect.Top + StringGrid1.Top]);
end;
|
Как сохранить содержимое TStringGrid в текстовый файл и загрузить обратно?
type
TStringGrid = class(Vcl.Grids.TStringGrid)
public
procedure SaveToFile(FileName: string);
procedure LoadFromFile(FileName: string);
end;
implementation
{ TStringGrid }
procedure TStringGrid.SaveToFile(FileName: string);
var
i, j: Integer;
sl: TStrings;
s: string;
begin
sl := TStringList.Create;
// В первой строке хранится общее количество и
// количество фиксированных строк и столбцов
sl.Add(IntToStr(Self.RowCount) + #9 + IntToStr(Self.ColCount) + #9 +
IntToStr(Self.FixedRows) + #9 + IntToStr(Self.FixedCols));
for i := 0 to Self.ColCount-1 do
begin
s := '';
for j := 0 to Self.RowCount-1 do
begin
s := s + AnsiQuotedStr(Cells[j, i], '"');
if j < Self.RowCount-1 then
s := s + #9;
end;
sl.Add(s);
end;
sl.SaveToFile(FileName);
sl.Free;
end;
procedure TStringGrid.LoadFromFile(FileName: string);
var
i, j, k: Integer;
sl, tmp: TStrings;
s: string;
begin
sl := TStringList.Create;
sl.LoadFromFile(FileName);
tmp := TStringList.Create;
tmp.Delimiter := #9;
tmp.DelimitedText := sl[0];
Self.RowCount := StrToInt(tmp[0]);
Self.ColCount := StrToInt(tmp[1]);
Self.FixedRows := StrToInt(tmp[2]);
Self.FixedCols := StrToInt(tmp[3]);
for i := 1 to sl.Count-1 do
begin
tmp.DelimitedText := sl[i];
for j := 0 to tmp.Count-1 do
Self.Cells[j, i-1] := AnsiDequotedStr(tmp[j], '"');
end;
tmp.Free;
sl.Free;
end;
|
Как встроить редактор на основе выподающего списка в ячейку TStringGrid?
type
TStringGrid = class({Vcl.}Grids.TStringGrid)
protected
function CreateEditor: TInplaceEdit; override;
function GetEditStyle(ACol: Integer; ARow: Integer): TEditStyle; override;
private
procedure GetCbxItems(ACol, ARow: Integer; Items: TStrings);
end;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
{...}
end;
implementation
{ TForm1 }
procedure TForm29.FormCreate(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options + [goEditing];
end;
{ TStringGrid }
function TStringGrid.CreateEditor: TInplaceEdit;
var
Inplace: TInplaceEditList;
begin
Inplace := TInplaceEditList.Create(Self);
Inplace.DropDownRows := 5;
Inplace.OnGetPickListitems := GetCbxItems;
Result := Inplace;
end;
procedure TStringGrid.GetCbxItems(ACol, ARow: Integer; Items: TStrings);
begin
Items.Clear;
case ACol of
2: begin
Items.Add('Вариант 1');
Items.Add('Вариант 2');
Items.Add('Вариант 3');
end;
else
Items.Add('Поле 1');
Items.Add('Поле 2');
Items.Add('Поле 3');
end;
end;
function TStringGrid.GetEditStyle(ACol, ARow: Integer): TEditStyle;
begin
Result := esPickList;
end;
|
При использовании материала - ссылка на сайт обязательна
|
|