![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TCollection. run-time VS desine-time
DevilDevil © (2006-09-26 14:32:00)Программирую таблицу. Есть свойство
ColsCount- количество столбцов. Каждому столбцу в таблице соответствует классTCol.
Теобходимо написать редактор столбцов.
Для реализации этого свойства [Columns ...] использую коллекцию. Мне не хочется наследовать уже готовыйTColотTCollectionItem. Поэтому я реализую "соответствие"; в моём классе-элементе коллекции в разделе publicсодержится свойствоColumn : TCol.
При изменении количества столбцов (свойства ColsCount) соответствующим образом должна изменяться коллекция:
void __fastcall TInfoTable::SetColsCount(int Count)
{
...>
Если, например, было 0</B, а стало Count [ 1</B например]
if (Count > FColsCount)
{
FCols.Count = Count;
for (int i = FColsCount; i < Count; i++)
{
TCol *Buf = new TCol(this);
FCols.Memory[i] = Buf;
// -->>>
FColumns->Add()->Column = Buf;
}
}
...
Так всё вроде нормально работает (кроме случаев удаления элементов коллекции в дизайнере).
Стал добавлять свойства в мойTColumnItem- потомокTCollectionItem; в частности свойствоTitle : string;:
void __fastcall TColumnItem::SetTitle(AnsiString S)
{
FCol->Title = S;
}
И так всё работает [в desine-time]. Зато при запуске приложения в ран-тайм, ошибка доступа к данным. Начал трассировать, оказывается, FCol = nil. Начал трассировать дальше, оказалась вообще ерунда какая-то...TColumnItemсначала создаётся, потом даже вызывается его деструктор, потом...
Очень прошу помощи. Что я делаю не так?
DimaBr (2006-09-27 15:46:00) [21]
private
fColumns: TCollection;
published
property Columns: TCollection read fColumns write fColumns;
property ColCount: integer read GetColCount write SetColCount;
и не дай бог наоборот
DevilDevil (2006-09-27 15:33:00) [22]В приведённом тобой случае, что сохраниться в dfm и в каком порядке будет работать?
DimaBr (2006-09-26 16:24:00) [23]
> Необходимо иметь возможность в дизайн-тайм изменять Title,
> Width и др свойства столбца.
Для этого достаточно иметь published свойтство типа TCollection, тогда в инспекторе у этого свойства появится "..." с окном для редактирования коллекции. Если вы хотите изменять ReadOnly свойство ColCount, то я бы написал так
fColumns: TCollection;
property Columns: TCollection read fColumns write fColumns;
property ColCount: integer read GetColCount write SetColCount;
function TForm1.GetColCount: integer;
begin
Result := fColumns.Count;
end;
procedure TForm1.SetColCount(const Value: integer);
begin
while ColCount < Value do Columns.Add;
while ColCount > Value do Columns.Delete(ColCount-1);
end;
DevilDevil (2006-09-26 15:18:00) [24]> Теобходимо написать редактор столбцов.
?????
Необходимо иметь возможность в дизайн-тайм изменять Title, Width и др свойства столбца.
> 1. что раньше - создаётся коллекция или назначаются количество столбцов ?
конструктор коллекции выполняется в конструкторе таблицы. Количество столбцов назначается... при изменении published свойства Таблица.ColsCount
> 2. что раньше в published Column или ColsCount ?
ColsCount
DimaBr (2006-09-26 15:11:00) [25]не видно конструктора и описания класса.
1. что раньше - создаётся коллекция или назначаютсяколичество столбцов ?
2. что раньше в published Column или ColsCount ?
> Теобходимо написать редактор столбцов.
?????
DevilDevil (2006-09-26 14:35:00) [26]sorry за опечатку в тегах