Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Вниз

Очистка 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
6-20177
stas_a
2003-04-30 10:33
2003.07.07
Модемное соединение


1-20033
VitaL
2003-06-24 03:28
2003.07.07
Как добавить иконку в трей


1-20057
avkiev
2003-06-25 16:55
2003.07.07
Преобразование строковой даты к TFileTime


1-20085
Карелин Артем
2003-06-24 12:37
2003.07.07
Как раскодировать/закодировать текст в формат UCS2?


14-20270
mikhasenko.anton
2003-06-20 12:05
2003.07.07
интерфейс Delph 5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский