![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив неизвестной длины [D7, WinXP]
Виталька2006 © (2006-02-07 11:48:00)Здравствуйте мастера.
Вот для хранения списка строчек в делфи есть очень удобно
использовать тип TStrings.
А как лучше всего хранить массив переменной длины,
например, целых чисел или каких-либо записей?
Спасибо.
MBo (2006-02-07 13:42:00) [1]
Pts:TList;
procedure TForm18.FormCreate(Sender: TObject);
begin
Pts:=TList.Create;
end;
procedure TForm18.Button3Click(Sender: TObject);
var
i:Integer;
Pt:TSmallPoint;
begin
for i := 0 to Pts.Count - 1 do begin
Pt:=TSmallPoint(Pts[i]);
ListBox1.Items.Add(Format('%d: %d',[Pt.x, Pt.y]));
end;
end;
procedure TForm18.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Pt:TSmallPoint;
begin
Pt:=SmallPoint(X,Y);
Pts.Add(Pointer(Pt));
end;
evvcom (2006-02-07 13:38:00) [2]
> >С TList и указателями на динамические массивы
> Не понял. При чем тут это. Либо TList, либо дин.массив.
А... Где-то показалось, что массив массивов. С массивом записей все действительно гораздо проще.
Виталька2006 (2006-02-07 13:29:00) [3]спасибо.
>А сохранять нужно координаты точек или что-то еще?
В массиве только координаты хранятся.
А вообще будет объект (или запись) "контур", для которого хранятся
название, тип и тд.. и как одно из полей - граница, тот самый массив точек.
по советам, я так понимаю, что в данном случае ТЛист удобней...
Kolan (2006-02-07 13:25:00) [4]Можно выделить заведомо больший массив, а когда узнаешь сколько точек надо сохранить - уменьшишь его длинну...
MBo (2006-02-07 13:16:00) [5]>Виталька2006
А сохранять нужно координаты точек или что-то еще?
MBo (2006-02-07 13:15:00) [6]>DUDAS © (07.02.06 13:00) [8]
>Можно так
нельзя так.
>Виталька2006 (07.02.06 13:09) [10]
Используй TList.
Vlad (2006-02-07 13:15:00) [7]
> Виталька2006 (07.02.06 13:09) [10]
> Т.е. сохранить все Х-ы и Y-ки.
> А он может как маленький кружочек выделить, так и пол экрана
> обвести..
array of TPoint ?
или TList, куда пишешь PPoint ( = ^TPoint)
Виталька2006 (2006-02-07 13:09:00) [8]>Можно, но потом будешь спрашивать, почему программа долго работает и кучу памяти отъедает...
>Лучше сразу задать массив разумной длины, а при необходимости
>расширения - увеличивать на значительное количество элементов сразу.
В том и дело. У меня задача - сохранить контуры, которые пользователь обводит мышкой. Т.е. сохранить все Х-ы и Y-ки.
А он может как маленький кружочек выделить, так и пол экрана обвести..
Desdechado (2006-02-07 13:06:00) [9]> почему не нравится array of TMyRecord ? может там какие подводные камни?
C неделю назад я описывал их. Повторять лениво. Ищи.
evvcom © (07.02.06 12:48) [5]
>С TList и указателями на динамические массивы
Не понял. При чем тут это. Либо TList, либо дин.массив.
DUDAS (2006-02-07 13:00:00) [10]Можно так:
var
intArray : array of integer;
begin
intArray:=(New(IntArray,100); //Размер массива 100
end;
Ega23 (2006-02-07 12:54:00) [11]Я бы в TList всё хранил.
MBo (2006-02-07 12:49:00) [12]>setlength(myarray, length(myarray) + 1)
Можно, но потом будешь спрашивать, почему программа долго работает и кучу памяти отъедает...
Лучше сразу задать массив разумной длины, а при необходимости расширения - увеличивать на значительное количество элементов сразу.
evvcom (2006-02-07 12:48:00) [13]
> Правильно я понял, что нужно создать динамический массив,
> а потом
> при добавлении элемента делать setlength(myarray, length(myarray)
> + 1) ?
>
> Угу
В частном случае - угу, в общем, все гораздо сложнее.
С TList и указателями на динамические массивы тоже надо быть осторожным, т.к. сами данные могут при ресайзинге "убежать" с одного места в другое.
Kolan (2006-02-07 12:43:00) [14]Правильно я понял, что нужно создать динамический массив, а потом
при добавлении элемента делать setlength(myarray, length(myarray) + 1) ?
Угу
Виталька2006 (2006-02-07 12:23:00) [15]Правильно я понял, что нужно создать динамический массив, а потом
при добавлении элемента делать setlength(myarray, length(myarray) + 1) ?
2 Desdechado: можно поинтересоваться,а почему не нравится array of TMyRecord ? может там какие подводные камни?
Fay (2006-02-07 11:53:00) [16]array of
Desdechado (2006-02-07 11:50:00) [17]TList с указателями на эти записи, имхо
можно просто array of TMyRecord, но мне не нравится