Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

TCollection+TStringGrid   Найти похожие ветки 

 
Бывший студент ©   (2005-04-18 23:33) [0]

Каким образом лучше связать TCollection.Count и СolCount? Делал через конструктор, но связь получается статической.


 
Юрий Зотов ©   (2005-04-19 00:22) [1]

В TCollection - заместить Notify.
В TStringGrid - заместить SizeChanged.
И ввести флажок, чтобы не возникало рекурсии.

В конструкторе ничего делать не нужно, все произойдет само.


 
Бывший студент ©   (2005-04-19 14:32) [2]

Заместил так:

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 14:39) [3]

Может, стоит пройти отладчиком?


 
Бывший студент ©   (2005-04-19 14:43) [4]

А он в design-time работает?


 
Юрий Зотов ©   (2005-04-19 14:50) [5]

Он в run-time работает. Компонент - тоже. Бросьте на форму компонент и пару кнопок (одна - добавляет, другая - удаляет).


 
Бывший студент ©   (2005-04-19 15:59) [6]

Отладчик не заходит в код компонента, проходит только по телу проекта и юнита с формой. Интересно, что в run-time ColCount уменьшается при удалении item"а, чего нет в design-time.


 
Юрий Зотов ©   (2005-04-19 16:09) [7]

Добавьте модуль компонента к проекту.


 
Юрий Зотов ©   (2005-04-19 16:10) [8]

Забыл - и компилируйте пакет с отладочной информацией.


 
Бывший студент ©   (2005-04-20 12:55) [9]

Модуль компонента добавил, что-то всё равно не лезет в него отладчик.


 
Бывший студент ©   (2005-04-20 13:18) [10]

Извиняюсь, всё в порядке.


 
Бывший студент ©   (2005-04-20 14:29) [11]

В run-time ColCount уменьшается как надо при удалении item"а. В design-time нет. Отладчик при удалении показывает сначала cnDeleting(в Notify)-после этого удаляется колонка, потом cnExtracting. Что делает cnExtracting, может здесь проблема?


 
Юрий Зотов ©   (2005-04-20 15:52) [12]

> Бывший студент ©   (20.04.05 14:29) [11]

> Что делает cnExtracting

А перевести на русский? Или заглянуть в код VCL, чтобы увидеть откуда там вызывается Notify с cnExtracting?

> может здесь проблема?

99% все же за то, что проблема в неверной логике алгоритма удаления. Например, почему в Notify не проверяется состояние флага? Вы же в SizeChanged вызываете Clear - и что произойдет? Чехарда полная произойдет.


 
Бывший студент ©   (2005-04-20 17:23) [13]

В Notify cnDeleting заменил на cnExtracting - всё заработало.



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

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.289 c
5-1115295849
Priest
2005-05-05 16:24
2005.12.04
Редактор компонент в RunTime


3-1129644747
DancerMan
2005-10-18 18:12
2005.12.04
DBGridEh. Как изменить цвет строки по клику на ней?


3-1129654773
mmms
2005-10-18 20:59
2005.12.04
Проектирование БД под репликацию


6-1124781103
tomkat
2005-08-23 11:11
2005.12.04
Как в INDY SMTP вложить атач ?


2-1132165578
Ji
2005-11-16 21:26
2005.12.04
Хочу написать нечто наподобие прокси