Главная страница
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.011 c
6-6177
Diablo
2003-12-09 23:16
2004.03.03
Создание компонент в потоках


11-6001
Angel_vv
2003-06-17 21:04
2004.03.03
Help!!! Как организовать сетевой досту к бд (dbf)?


11-6006
grumbler
2003-06-17 13:00
2004.03.03
brush.brushstyle=bsClear


1-6060
Drozdov A
2004-02-18 15:22
2004.03.03
If ....Then


1-6120
czech
2004-02-20 15:56
2004.03.03
Tisk.