Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.01 c
3-19978
ERDEN
2003-06-13 09:42
2003.07.07
Query.RecordCount ....


1-20146
maxic
2003-06-25 10:50
2003.07.07
Проблемы с dll


4-20339
Nick Denry
2003-05-02 01:59
2003.07.07
Ресурсы. UpdateResource.


14-20223
Пубертанец
2003-06-19 11:40
2003.07.07
Как в прикладухе на время защитить/заблокировать файл от записи?


3-19987
Parusstepu
2003-06-13 10:05
2003.07.07
Запрос на добавление записей