![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TCollection+TStringGrid
Бывший студент © (2005-04-18 23:33:00)Каким образом лучше связать TCollection.Count и СolCount? Делал через конструктор, но связь получается статической.
Бывший студент (2005-04-20 17:23:00) [1]В Notify cnDeleting заменил на cnExtracting - всё заработало.
Юрий Зотов (2005-04-20 15:52:00) [2]> Бывший студент © (20.04.05 14:29) [11]
> Что делает cnExtracting
А перевести на русский? Или заглянуть в код VCL, чтобы увидеть откуда там вызывается Notify с cnExtracting?
> может здесь проблема?
99% все же за то, что проблема в неверной логике алгоритма удаления. Например, почему в Notify не проверяется состояние флага? Вы же в SizeChanged вызываете Clear - и что произойдет? Чехарда полная произойдет.
Бывший студент (2005-04-20 14:29:00) [3]В run-time ColCount уменьшается как надо при удалении item'а. В design-time нет. Отладчик при удалении показывает сначала cnDeleting(в Notify)-после этого удаляется колонка, потом cnExtracting. Что делает cnExtracting, может здесь проблема?
Бывший студент (2005-04-20 13:18:00) [4]Извиняюсь, всё в порядке.
Бывший студент (2005-04-20 12:55:00) [5]Модуль компонента добавил, что-то всё равно не лезет в него отладчик.
Юрий Зотов (2005-04-19 16:10:00) [6]Забыл - и компилируйте пакет с отладочной информацией.
Юрий Зотов (2005-04-19 16:09:00) [7]Добавьте модуль компонента к проекту.
Бывший студент (2005-04-19 15:59:00) [8]Отладчик не заходит в код компонента, проходит только по телу проекта и юнита с формой. Интересно, что в run-time ColCount уменьшается при удалении item'а, чего нет в design-time.
Юрий Зотов (2005-04-19 14:50:00) [9]Он в run-time работает. Компонент - тоже. Бросьте на форму компонент и пару кнопок (одна - добавляет, другая - удаляет).
Бывший студент (2005-04-19 14:43:00) [10]А он в design-time работает?
Юрий Зотов (2005-04-19 14:39:00) [11]Может, стоит пройти отладчиком?
Бывший студент (2005-04-19 14:32:00) [12]Заместил так:
var RecFlag: Boolean;
.
procedure TColStyles.Notify(Item: TCollectionItem; Action: TCollectionNotification);
begin
RecFlag:=True;
case Action of
cnAdded: FGrid.ColCount:=FGrid.ColCount+1;
cnDeleting: FGrid.ColCount:=FGrid.ColCount-1;
end;
RecFlag:=False;
end;
procedure TTestGrid.SizeChanged(OldColCount, OldRowCount: Longint);
var i:integer;
begin
if not RecFlag then
begin
FColStyles.Clear;
for i:=1 to ColCount do FColStyles.Add;
end;
end;
ColCount не уменьшается при удалении Item'а.
Юрий Зотов (2005-04-19 00:22:00) [13]В TCollection - заместить Notify.
В TStringGrid - заместить SizeChanged.
И ввести флажок, чтобы не возникало рекурсии.
В конструкторе ничего делать не нужно, все произойдет само.