Главная страница
    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.47 MB
Время: 0.011 c
3-20009
mod
2003-06-14 16:21
2003.07.07
SQL


3-19950
NewD
2003-06-10 13:30
2003.07.07
Как через ADO установить связь с файлами FOXPRO и DBASE


3-19992
kaif
2003-06-10 18:38
2003.07.07
Как ловить причину зависания сервера?


1-20069
anod
2003-06-25 15:55
2003.07.07
Как определить одновременное нажатие клавиш


14-20278
alxx
2003-06-18 15:25
2003.07.07
Как врубить двустороннюю печать у драйвера принтера?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский