Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi"


Паскаль, Делфи


 #0 Go © 17.07.06 15:54:54 - 17.07.06 17:06:57

Хнык



А может вы встречались с таким глюком/багом !? Где выход !? :)
Есть моя компонента :) В рантайме все работает как надо. а вот в дизайн-тайме при закрытие формы с энтой т.ск. компонентой, виснет вся делфя.. намертво.. Никаких виолейшеноф.. ничего..
Проверяла несколько раз.. все вроде освобождается. Да и рантайм ведь тоже показатель ..
В чем может быть проблема, куда копать!?
Цитата

 #1 Andrey © 17.07.06 16:01:49

Очередь сообщений переопределена? Определены дефолтные обработчики для WM_***, CM_***...? От кого порождена компонента?
 #2 Go © 17.07.06 16:05:26

ничего из сообщений не переопределяется.
от  TComponent
 #3 Go © 17.07.06 16:07:14

сейчас сброшу упрощенную модель
 #4 Старый маразматик © 17.07.06 16:08:33

конкретно такого никогда не было. потому сказать сложно, да еще и не видя, шо там такое у тебя.
а чего было... просто тупо не могу форму уничтожить в рантайме. на четверке и закрыть не всегда мог в дизайнере, в пятерке полегчало. так и не поборол, приходися оставлять ее винде на добрую и долгую память.
 #5 Go © 17.07.06 16:14:19

более детально :)
на датамодуле висит  TLangBoss
на форме  TLangAgent
Закрываю форму с агентом  - висим ;) МОжет я просто чего-то  тупо не вижу :(
исходники

TLangAgent = class(TComponent)
  private
    flangBoss: TLangBoss;
    procedure setLangBoss(ABoss: TLangBoss);
  public
    destructor Destroy; override;
  published
    property langBoss: TLangBoss read flangBoss write setLangBoss;
  end;
  
  TLangBoss = class(TComponent)
  private
    fAgentList: TList;
  public
    constructor Create(Aowner: TComponent); override;
    destructor Destroy; override;

    procedure registryAgent(agent: TLangAgent);
    procedure unRegistryAgent(agent: TLangAgent);
  published

  end;
  
  //===========
destructor TLangAgent.Destroy;
begin
 if langBoss <> nil then langBoss.unRegistryAgent(self);
 inherited Destroy;
end;

procedure TLangAgent.setLangBoss(ABoss: TLangBoss);
begin
 if flangBoss = ABoss then exit;
  if flangBoss <> nil then flangBoss.unRegistryAgent(self);
 flangBoss := ABoss;
  if flangBoss <> nil then flangBoss.RegistryAgent(self);
end;

procedure TLangBoss.registryAgent(agent: TLangAgent);
begin
 if fAgentList.IndexOf(Pointer(agent)) < 0 then fAgentList.Add(Pointer(agent));
end;

procedure TLangBoss.unRegistryAgent(agent: TLangAgent);
var i: Integer;
begin
 i := fAgentList.IndexOf(Pointer(agent));
 if i >= 0 then begin
   fAgentList.Delete(i);
 end;
end;
 #6 Старый маразматик © 17.07.06 16:43:20

вроде как ничего такого не увидел криминального. единственно, где создаем fAgentList и соотвецтвенно, уничтожаем?
 #7 Go © 17.07.06 16:58:52

мда.. похоже что это из-за метода Notification.. в котором забыла вызвать
inherited notification(acomponent, Operation);

хотя  теперь никак не получается добиться зависания.. что с inherited,  что без

спасибо всем громадное! :)

 #8 Deep © 17.07.06 16:59:56

>  #6   Старый маразматик ©
угу, видно что создаются и уничтожаются элементы списка. А где создается и уничтожается сам список не видно.... По идее его нужно в конструкторе создавать, а он здесь "не озвучен"....
 #9 Старый маразматик © 17.07.06 17:02:02

> #8  Deep ©

судя по всему, тут много чего не озвучено, потому гадать не стоит
 #10 Andrey © 17.07.06 17:05:45

Не, ну тут всё честно...
С таким набором компонент тоже зависает? Тоесть нулёвый проэкт с 1 формой и 1 датамодулем?

У меня мысли только про while True где-то в секции if csDesigning in ComponentState...
 #11 Andrey © 17.07.06 17:06:57

>#7 Go
Ну вот и ладушки )




  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов