![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст в ячейках Stringrid и память [D6]
Medved_ © (2006-12-01 13:42:00)Здраствуйте.
Уважаемые мастера, скажите как
съэкономить память в данном примере для Stringgrid(если
неотпускаешь кнопку вниз или PageDown) идет
колоссальная потеря памяти.
var
SizeLeftCol:integer;
procedure TForm1.sgTopLeftChanged(Sender: TObject);
var
i:integer;
begin
if sg.FixedCols >0 then
begin
for i:=sg.TopRow to (sg.TopRow+sg.TopRow+sg.VisibleRowCount-1) do
sg.Cells[0,i]:=inttostr(i-1);
SizeLeftCol:=sg.Canvas.TextWidth(inttostr(sg.TopRow+sg.VisibleRowCount-1));
sg.ColWidths[0]:=SizeLeftCol+10;
end;
end;
Заранее спасибо.
ЮЮ (2006-12-02 09:29:00) [1]Какая же это загрузка?
StringGrid1.RowCount := 65536; и отрисовывать номер в OnDrawCell, а не создавать 65536 тысяч строк, в смысле string
Medved_ (2006-12-02 08:56:00) [2]Самое главное забыл сказать:
RowCount = 65536 (как в Excel) и для того, чтобы при загрузке
программы - она быстро открывалась я выбрал тот вариант.
Если же при загрузке сразу писать
if sg.FixedCols >0 then
begin
for i:=0 to sg.RowCount-1 do
sg.Cells[0,i]:=inttostr(i+1);
SizeLeftCol:=sg.Canvas.TextWidth(inttostr(sg.TopRow+sg.VisibleRowCount-1));
sg.ColWidths[0]:=SizeLeftCol+10;
end;
то загрузка занимает очень много времени.
И при этом, если если
неотпускаешь кнопку вниз или PageDown) идет постоянное опускание увеличение Row и памяти расходуется по возрастающей.
В Excele такого нет, хотя я думаю подход у них такой же, только
с память они как-то организовали процесс.
Igor_Zal (2006-12-01 23:41:00) [3]Нажмите CTR+ALT+DEl с программой, реализующий данный алгоритм и все станет ясно.
Jeer (2006-12-01 17:32:00) [4]
> колоссальная потеря памяти.
Чьей ?