Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
3-5952
Labert
2004-02-05 17:01
2004.03.03
Документация по DOA на русском?


1-6077
alless
2004-02-20 19:30
2004.03.03
ScrollBar


1-6119
qwerty2
2004-01-23 13:34
2004.03.03
Уничтожить OleVariant


14-6187
Rouse_
2004-02-11 20:26
2004.03.03
Принтеры для компактов


1-6115
Miwa
2004-02-20 17:18
2004.03.03
Как в TStringList.AddObject вместо объекта integer засунуть?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский