Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Очистка StringGrid Найти похожие ветки
← →
McSimm2 (2003-06-23 16:05) [0]Есть какой нибудь нормальный способ осистки StringGrid`а ???
или только в цикле по всем строкам/столбцам "обнулять" значения ячеек ???
← →
Семен Сорокин (2003-06-23 16:07) [1]можно "убить", и создать новый :))
или тока "в цикле по всем строкам/столбцам "обнулять" значения ячеек" ИМХО
← →
ggsoft (2003-06-23 16:58) [2]См. Help
property TStringGrid.Cols[Index: Integer]: TStrings;
property TStringGrid.Rows[Index: Integer]: TStrings;
StringGrid1.Cols[1].Clear, например... тоже цикл, в общем-то будет, если несколько колонок, но короче...
← →
TsvIlya (2003-06-23 17:14) [3]Возможно обнулить значения ColCount и RowCount, а потом восстановить их, но на счет правильности, я не уверен...
← →
Семен Сорокин (2003-06-23 17:19) [4]TsvIlya (23.06.03 17:14)
Верно, но не обнулить, а установить в единицу, но тут нужно смотреть на другие св-ва: FixedCols, FixedRows, а нулевую ячейку все равно тогда чистить вручную.
← →
Anatoly Podgoretsky (2003-06-23 17:27) [5]Free/Create самый оптимальный метод
← →
pasha_golub (2003-06-23 17:41) [6]Colcount & Rowcount значений ячеек не обнуляют.
← →
ggsoft (2003-06-23 20:21) [7]Браво...
> Семен Сорокин ©(23.06.03 16:07) "можно "убить", и создать новый :))"
> Anatoly Podgoretsky ©(23.06.03 17:27)
Решил все-таки убедиться, что быстрее...
1 способ - просто в цикле по всем ячейкам.
2 способ - цикл по колонкам и затем StringGrid1.Cols[I].Clear
3 способ - Free/Create.
Результаты: (в мсек, на моем компьютере, PIII-1200, 256, WinXPsp1)
1. 150-162
2. 282-302 (не ожидал, ну никак не ожидал).
3. 28-30 (!!!)
Если код интересен, сейчас сюда же и выложу...
← →
ggsoft (2003-06-23 20:25) [8]unit MainGridClear;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button4: TButton;
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
FPerfFreq: LARGE_INTEGER;
FPerfCount: LARGE_INTEGER;
procedure FillGrid;
function RunCount: Boolean;
function StopCount: int64;
procedure ShowCounter(const lbToWrite: TLabel; const nCounter: int64);
public
end;
var
Form1: TForm1;
const
cszMsg = "Elapsed time is %d";
cnRows = 2000;
cnCols = 12;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.FillGrid;
var
I, J: Integer;
begin
StringGrid1.ColCount := cnCols;
StringGrid1.RowCount := cnRows;
Randomize;
for I := 0 to cnRows - 1 do
for J := 0 to cnCols - 1 do
StringGrid1.Cells[J, I] := IntToStr(Random(cnCols * cnRows));
end;
function TForm1.RunCount: Boolean;
begin
Result := QueryPerformanceFrequency(int64(FPerfFreq));
if (Result) then QueryPerformanceCounter(int64(FPerfCount));
end;
function TForm1.StopCount: int64;
var
liNow: LARGE_INTEGER;
begin
QueryPerformanceCounter(int64(liNow));
Result := (liNow.QuadPart - FPerfCount.QuadPart) * 1000 div FPerfFreq.QuadPart;
end;
procedure TForm1.ShowCounter(const lbToWrite: TLabel;
const nCounter: int64);
begin
lbToWrite.Caption := Format(cszMsg, [nCounter]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
FillGrid;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I, J: Integer;
begin
if (not RunCount) then Exit;
for I := 0 to cnRows - 1 do
for J := 0 to cnCols - 1 do
StringGrid1.Cells[J, I] := "";
StringGrid1.RowCount := 1;
StringGrid1.ColCount := 1;
ShowCounter(Label1, StopCount);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
begin
if (not RunCount) then Exit;
for I := 0 to cnCols - 1 do StringGrid1.Cols[I].Clear;
StringGrid1.RowCount := 1;
StringGrid1.ColCount := 1;
ShowCounter(Label2, StopCount);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
rcGrig: TRect;
begin
if (not RunCount) then Exit;
rcGrig := StringGrid1.BoundsRect;
FreeAndNil(StringGrid1);
with TStringGrid.Create(Self) do begin
BoundsRect := rcGrig;
RowCount := 1;
ColCount := 1;
Name := "StringGrid1";
Parent := Self;
end;
ShowCounter(Label3, StopCount);
end;
end.
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c