Главная страница
    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.009 c
1-59260
Delphi Maniak
2002-11-07 11:43
2002.11.18
Файлы, файлы, файлы...


1-59232
sterran
2002-11-06 18:23
2002.11.18
Проблема преобразование символов...


1-59214
Pesh
2002-11-06 14:10
2002.11.18
Формат MP3 файлов


1-59111
Part
2002-11-07 15:20
2002.11.18
Еще один простой вопрос!!


1-59218
Lamak
2002-11-03 02:56
2002.11.18
Генератор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский