Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TCollection. run-time VS desine-time


Страницы:   1 2

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 за опечатку в тегах


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо