Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.03;
Скачать: CL | DM;

Вниз

двумерный 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-5974
Крутыш
2004-02-05 13:15
2004.03.03
Как вписать уникальный идентификатор в инструкцию insert into ….


8-6164
esVer
2003-10-31 15:41
2004.03.03
Bitmap как результат ф-ции


3-5972
Boroda Oleg
2004-02-04 16:15
2004.03.03
Получение значения из триггера по созданию новой записи


14-6240
ИМХО
2004-02-10 19:37
2004.03.03
Собираю...


1-6102
Neoo
2004-02-21 20:00
2004.03.03
Handle