![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
То ли классы не работают, то ли я... [D6, WinXP]
Agent[007] © (2007-01-17 17:03:00)Народ... Я уже ниче не пойму... Посмотрите... Я тут создал класс и подклассы:
TMenuItem = class
public
Caption : string;
Hint : string;
end;
TMenuSub = class(TMenuItem)
public
Items: array of TMenuItem;
procedure AddItem(...);
end;
TMenuButton = class(TMenuItem)
public
Action : string;
end;
И описал процедуру:
procedure TMenuSub.AddItem(...);
var
...
begin
...
SetLength(Items, Length(Items) + 1);
...
end;
И у меня возникает EAccessViolation на строке, где я меняю размер массива... Что же делать?! ПОМОГИТЕ, ПОЖАЛУЙСТА !!!
Agent[007] (2007-01-24 09:28:00) [1]А как пользоваться этими TCollection ?..
Ega23 (2007-01-17 18:47:00) [2]
> SetLength(Items, Length(Items) + 1);
Почему массив? Почему не List?
гостъ (2007-01-17 18:19:00) [3]У меня не возникает AV ни в той, ни в других строках, я просто скопировал твой класс и откомпилировал в тем виде, что ты показал.
Вопрос - а как ты создаешь экземпляр(ы) своих классов?
Кстати, советую смотреть, при таких вариантах классов как у тебя, в сторону наследников от TCollection, TCollectionItem, примеры работы есть в тех же исходниках Дельфи.
Будет выглядеть поаккуратнее и соответствуя "концепции" :), примерно так:
type
TMenuCollection = class ( TCollection )
end;
TMenuCollectionItem = class ( TCollectionItem )
end;
TMenuCollectionItemClass = class of TMenuCollectionItem;
----------------
Борланд может использовать все что хочет, что не ограничивает меня в использовании того, что хочу использовать я...
Конечно, не желательно давать своим классам имена уже объявленных классов, но хмм.. "какого хрена" - это не ошибка компилятора.
Сергей М. (2007-01-17 17:06:00) [4]
> TMenuItem
Какого хрена ты использовал имя класса, ужеиспользованное Борландом ?