Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Вниз

Динамический массив классов   Найти похожие ветки 

 
Злой!!!   (2002-08-29 19:03) [0]

Уважаемый All!
Помогите чайнику разобраться. Есть у меня класс TSmeta, нужно работать с несколькими экземплярами этого класса, но сколько их будет не знаю. Я объявляю массив указателей:

smeta: array of ^TSmeta;

Потом, при добавлении нового элемента пишу:

tmp:=Length(smeta)+1;
SetLength(smeta,tmp);
GetMem(smeta[tmp-1],SizeOf(TSmeta));
smeta[tmp-1]^.Discription:=LabeledEdit1.Text;CODE>

Вроде как все нормально работает. Записываю результат в сроку стриггрида:

Form1.StringGridSmeta.Cells[1,i+1]:=smeta[i]^.Discription;

ругается - "Asccess violation...", причем даже если добавлять любую строку :((
С индексами все нормально, 10 раз проверял. Если убрать добавление нового элемента массива, то любую строку в грид пишет. Выделять память с помощью new пробовал, результат тот же. Фантазия закончилась, чего делать не знаю.

Подскажите плз, что не так делаю, заранее спасибо!


 
Skier   (2002-08-29 19:12) [1]

>Злой!!!
1)smeta: array of TSmeta;
2) нужно создавать объекты (экземпляры класса TSmeta) и обязательно их потом уничтожать

соответственно :


var
ASmeta : TSmeta;
begin
//..............
ASmeta := TSmeta.Create(...);
try
//здесь работаешь с объектов ASmeta
finally
FreeAndNil(ASmeta);
end; //try
//..............

3) Form1.StringGridSmeta.Cells[1,i+1]:=smeta[i].Discription


 
Skier   (2002-08-29 19:19) [2]

>Злой!!!
И ещё : лучше используй не дин. массив для
своей цели а классы TList или TObjectList
(или их потомки)...


 
Юрий Зотов   (2002-08-29 20:28) [3]

> Вроде как все нормально работает

Это только "вроде как". На самом деле дела плохи.

var
Smeta: array of TSmeta; // Не надо указателей.

Добавление нового элемента:

SetLength(Smeta, Length(Smeta) + 1); // И GetMem не нужно.
Smeta[High(Smeta)] := TSmeta.Create; // А вот это нужно.
Smeta[High(Smeta)].Description := LabeledEdit1.Text;

Запись в StringGrid:
Form1.StringGridSmeta.Cells[1, i + 1] := Smeta[i].Description;

Уничтожение i-го элемента:
Smeta[i].Free;

Уничтожение самого массива (после уничтожения всех элементов):
Smeta := nil;


 
Злой!!!   (2002-08-30 11:18) [4]

Всем бАльшое спасибо!
Последний вариант получился.
Обджектлисты обязательно помучаю.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.006 c
1-35790
Егор
2002-08-27 15:33
2002.09.12
Почему я немогу найти спецпапку?


1-35753
Mr. Faga
2002-08-30 16:53
2002.09.12
Delphi 7


14-35894
kalenih
2002-08-19 14:09
2002.09.12
Привет


1-35682
Igorianez
2002-09-02 14:01
2002.09.12
FastReport


1-35670
lipskiy
2002-09-01 18:02
2002.09.12
Как получить цвет точки компонента-родителся под моим компонентом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский