Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Вниз

Предложите идею/решение   Найти похожие ветки 

 
Сатир   (2002-11-06 17:23) [0]

есть такой класс:
TColorMap = class(TComponent)
...
published
property Base: TColorMap read fBase write SetBase
...
end;

Если поместить на форму два экземпляра Colormap1, Colormap2 данного класса, то можно
для первого задать с помощью инспектора объектов
Colormap1.Base := Colormap2
и для второго
Colormap2.Base := Colormap1

в результате IDE выдаст ошибку переполнения стека:(

Как программно можно исключить такую ситуацию?

Заранее благодарен за любые идеи


 
Smithson   (2002-11-06 17:32) [1]

Никак. У тебя вечная рекурсия


 
Digitman   (2002-11-06 17:33) [2]

похоже на циклическую ссылку
а что делается в теле SetBase() ?


 
Андрей Прокофьев   (2002-11-06 17:36) [3]

В SetBase(P : TColorBase)
как-то проверить циклические ссылки
if P.Base = Self then
raise...


 
han_malign   (2002-11-06 17:37) [4]

TColorMap = class(TComponent)
...
fInside: boolean;
published
property Base: TColorMap read fBase write SetBase
...
end;

procedure TColorMap.Do;
begin
if(not fInside)then begin
fInside := true;
Base.Do;
end;
fInside:=false;
end;

простейший случай семафора.


 
Сатир   (2002-11-06 17:50) [5]

2Digitman © (06.11.02 17:33)
procedure TColorMap.SetBase(const Value: TColorMap);
begin
if (fBase <> Value) and (Value<>Self) then
begin
if fBase<>nil then fBase.fChilds.Remove(Self);
fBase := Value;
if fBase<>nil then fBase.fChilds.Add(Self);
UpdateColors(0);
end;
end;


2han_malign © (06.11.02 17:37)
а куда этот метод Do присобачить?


 
han_malign   (2002-11-06 17:57) [6]

Do для примера - внутри своих методов сделай проверку на повторное вхождение. Правда это криво и по умум нужно продумать получше взаимодействие между объектами, но изредка мне приходилось это делать, дабы не плодить лишних методов(от лени короче).


 
Сатир   (2002-11-06 18:13) [7]

о, появилась идея!
в
procedure TColorMap.SetBase(const Value: TColorMap);

добавить

if Value.Base = self then Exit;


 
Андрей Прокофьев   (2002-11-06 18:15) [8]

Сатир © (06.11.02 18:13)
Угу :)) см Андрей Прокофьев © (06.11.02 17:36)



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

Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
3-59038
PavelOKES
2002-10-29 08:33
2002.11.18
BDE error


1-59205
Weare
2002-11-06 13:31
2002.11.18
Install InterBase5


7-59446
Мак
2002-09-18 05:26
2002.11.18
Помогите !!!


14-59362
AL2002
2002-10-29 15:31
2002.11.18
Сжималка ехешника


1-59222
@andrew
2002-11-06 16:14
2002.11.18
И снова Drag&Drop. Где можно почитать: как зарегистрировать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский