Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Требуется создать динамический двумерный массив real [D7, XP]


kay ©   (2006-04-07 16:18:00) 

Есть таблица TStringGrid со значениями в текстовом виде
Нужно создать такого же размера массив, чтобы он хранил эти же значения в REAl.

битый час бьюсь с TList, но ничего не получается. прошу помощи.


balepa   (2006-04-08 09:06:00) [1]


> kay ©   (07.04.06 17:53) [10]
>
> ладно, если использовать SetLength
> то по завершению программы надо как-то массив очищать?


Finalize(Array)

F1 + Dynamic arrays
Dynamic arrays are automatically released when their reference-count drops to zero.
Вроде не надо.


kay   (2006-04-07 18:18:00) [2]

я сделал так:
procedure TFrecoupment.GridKey_Press(Sender: TObject; var Key: Char);
begin
 if Key='.' then Key:=',';
 if Key in ['0'..'9',#8,#13,','] then
   begin
   if Key=',' then
     if Pos(',',TStringGrid(Sender).Cells[Col,Row])=0 then
       Key:=','
     else
       Key:=#0;
   end
 else
   Key:=#0;
 if Key=#13 then
   begin
     Key:=#0;
     //calc();
   end;
 //eko_form.modified:=true;
end;


procedure TFrecoupment.InvestsGridSetEditText(Sender: TObject; ACol,
 ARow: Integer; const Value: String);
begin
 encode();
end;


procedure TFrecoupment.encode();
var
 i,j:integer;
begin
 with InvestsGrid do
   begin
     for i:=0 to ColCount-1 do
       for j:=0 to RowCount-2 do
         begin
           FloatCells[i,j]:=StrToFloatDef(Cells[i,j+1],0);
         end;
   end;
end;


Amoeba   (2006-04-07 18:07:00) [3]

Используй DrawGrid + 2-мерный динамический массив.

У DrawGrid установи в Options goEditing
Задай обработчики событий OnDrawCell, OnGetEditText, OnSetEditText, можно и OnGetEditMask

Я лично использую DrawGrid в аналогичной ситуации.


kay   (2006-04-07 17:53:00) [4]

ладно, если использовать SetLength
то по завершению программы надо как-то массив очищать?


kay   (2006-04-07 17:23:00) [5]

неужели никто не знает как это реализовать?


kay   (2006-04-07 16:57:00) [6]


> 1. Нужно использовать приведение типа к указателю на массив

это как? не совсем понял.


> 2. Не раскрыта темы выделения памяти под temp(каждый раз
> новая?)

я temp использую как шаблон.

короче говоря я в дельфи не совсем понимаю как работать с указателями, раньше писал на Си, там проще.

в итоге хочу добиться, чтобы класс был точно такой же как и TStringsGrid, только вместо строк содержал тип real или extended.


MBo   (2006-04-07 16:52:00) [7]

1. Нужно использовать приведение типа к указателю на массив
2. Не раскрыта темы выделения памяти под temp(каждый раз новая?)


kay   (2006-04-07 16:40:00) [8]

Сначала заполняю массив так:

temp:array[0..10] of real;
     for i:=0 to ColCount-1 do
       CellList.Add(@temp);


а для обращения вроде бы так нужно делать, но не работает:
(CellList.Items[ACol]^)[ARow]:=2.234;


kay   (2006-04-07 16:30:00) [9]

не знаю, религия или нет, но задумал всё сделать с помощью класса TList, вот и решил помощи просить. Может кто делал уже.


Desdechado   (2006-04-07 16:28:00) [10]

а обращаться к сетке с преобразованием типа религия не позволяет? так же как и "постоянно память выделять"...


kay   (2006-04-07 16:25:00) [11]

это не подойдёт, так как постоянно память выделять надо...
желательно в классе всё устроить.


kay   (2006-04-07 16:23:00) [12]

нужно, чтобы обращение к нему было вроде
CellList.Items[ACol,ARow]:=2.43;


MBo   (2006-04-07 16:23:00) [13]

array of array of Double


Наверх

Титульная страница Поиск, карта сайта Написать письмо