Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Вниздвумерный tlist Найти похожие ветки
← →
race1 (2004-02-21 15:01) [0]есть свой тип-массив (tmyarray = array of чего-то там), и tlist, который должен хранить эти типы-массивы. добавляем новый элемент списка, т.е. массив, мы в процедуре - обьявляем переменную типа tmyarray и заполняем его. потом добавляем в список этот новый массив - mylist.add(myarray).
дело в том что при выходе из проц-ры, где мы заполняем массив-переменную, дельфя чистит его и в mylist мы имеем пустые массивы. как бы сделать что бы дельфя не чистила мои массивы. myarray := nil не помогает...
ps. что-то типа двумерных массивов, просто через tlist удобнее и логичнее в моём случае, чем делать двумерные массивы
← →
Devel (2004-02-21 15:09) [1]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyArray = array[1..10] of Integer;
PMyArray = ^TMyArray;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
List: TList;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
MyArray: PMyArray;
begin
New(MyArray);
List.Add(MyArray);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
List := TList.Create();
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
for I := 0 to List.Count - 1 do
Dispose(PMyArray(List[I]));
List.Free();
end;
end.
← →
race1 (2004-02-21 15:21) [2]:) в самом деле! всё так просто :) спасибо!
← →
Юрий Зотов (2004-02-21 15:22) [3]Объявите тип массива и глобальную переменную GlobalArray этого типа. Тот же тип должна иметь локальная переменная LocalArray в процедуре. Далее так:
SetLength(LocalArray, ...);
...
GlobalArray := LocalArray;
MyList.Add(GlobalArray);
Выделенная строка меняет область видимости массива и увеличивает счетчик ссылок на него. Поэтому после выхода из процедуры он должен сохраниться.
Правда, я не уверен, что после исполнения выделенной строки не будет уничтожен массив, на который GlobalArray указывала ранее. Проверьте и если это так, то, видимо, придется все же использовать не TList, а двумерный динамический массив.
← →
Юрий Зотов (2004-02-21 15:28) [4]> есть свой тип-массив (tmyarray = array of чего-то там),
> TMyArray = array[1..10] of Integer;
В вопросе речь шла все же о динамических массивах. Будет ли работать пример для типа TMyArray = array of Integer ?
← →
race1 (2004-02-21 15:41) [5]спасибо за совет, но это какой-то... угадочный метод - будет или не будет.
тип TMyArray = array of TMyType работает замечательно, с переменной такого типа можно обращаться как с переменной типа array of TMyType. ну, у меня работает :)
я решил мою проблемму через указатели - есть указатель на мой тип массива (PMyArray = ^TMyArray), когда надо - делаю New(pmArray) и обращаюсь к эл-м массива: pmArray^[i].myfield :=
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c