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

Вниз

Процедура вызывает AV   Найти похожие ветки 

 
sniknik ©   (2010-04-28 00:57) [80]

> Какое отношение Release имеет к обработчикам событий компонент, я честно не понимаю.
только одно отношение, это аналог, когда "убивают" себя из своего же обработчика. с формой такая ситуация происходит чаще, вот и позаботились.
и также это путь к обходу сабжа, ничего не мешает сделать тоже самое для имеджа например.


 
sniknik ©   (2010-04-28 01:01) [81]

> только одно отношение
+ все компоненты формы "помрут" вместе с ней, т.что и из обработчика компонент лежащих на форме делать Free форме противопоказано.


 
Игорь Шевченко ©   (2010-04-28 01:09) [82]


> только одно отношение, это аналог, когда "убивают" себя
> из своего же обработчика


Free в release тоже вызывается из обработчика сообщения. Сообщения CM_RELEASE

procedure TCustomForm.Release;
begin
 PostMessage(Handle, CM_RELEASE, 0, 0);
end;

procedure TCustomForm.CMRelease;
begin
 Free;
end;


из OnClick почему нельзя убивать - выяснили, Click срабатывает на MouseDown, а кроме него еще есть MouseUp к тому же контролу, уже в очереди.


 
sniknik ©   (2010-04-28 01:20) [83]

> Free в release тоже вызывается из обработчика сообщения. Сообщения CM_RELEASE
ну и что? он же по событию вызовется в общей очереди между обработчиками, после отработавших и до возможных... после "убийства" формы отправленных в "никуда" (событие на не существующий хендл к AV не приводят, только к невыполнению события).

вызов Free это не баг, и не приводит к багу, если только он не сделан в неправильном месте (до обращений к обьекту).

> из OnClick почему нельзя убивать
лучше считай откуда можно... меньше получится.


 
Германн ©   (2010-04-28 02:00) [84]


> лучше считай откуда можно... меньше получится.

+1
Опередил.

> И обсуждалось подобное не раз, чудес не было, только "свезло/не
> свезло".

(c) LVT


 
Игорь Шевченко ©   (2010-04-28 10:33) [85]

sniknik ©   (28.04.10 01:20) [83]


> он же по событию вызовется в общей очереди между обработчиками,
>  после отработавших и до возможных


переведи. Это обычный обработчик сообщения, тот же самый динамический метод, как и в WM_MOUSEUP


> вызов Free это не баг, и не приводит к багу


Вызов Free это не баг, но может привести к багу.


> лучше считай откуда можно... меньше получится.


Я начну считать, тебе мало не покажется


 
sniknik ©   (2010-04-28 12:55) [86]

> переведи.
по русски написано.

> Это обычный обработчик сообщения, тот же самый динамический метод, как и в WM_MOUSEUP
а ты не путай, при сабжевом глюке событие не вызывается вызывается метод.

> Вызов Free это не баг, но может привести к багу.
ВСЕ может привести к багу.


 
Игорь Шевченко ©   (2010-04-28 13:03) [87]


> а ты не путай, при сабжевом глюке событие не вызывается
> вызывается метод.


в чем разница ?


 
oxffff ©   (2010-04-28 15:01) [88]

Читаю с середины второй день подряд.
И не могу понять в чем суть обсуждения?

Если во вложенном методе будет разрушен объект и это не приведет к проблемам, то ничего плохого нет.

А плохое это не только использование разрушенногого объекта, но и использование частично деинициализированного объекта.
Но ведь Tobject.Free по факту ссылается на выходе на разрушенный объект и работает же.
Это вопрос логики.


 
sniknik ©   (2010-04-28 15:49) [89]

> в чем разница ?
для тебя ни в чем... а глюк в одном случае считай происками шайтана, нормальную работу в другом замыслом создателя...
плевать в общем, считай чем хочешь.


 
Игорь Шевченко ©   (2010-04-28 16:36) [90]

sniknik ©   (28.04.10 15:49) [89]

не плюйся, вылетит, не поймаешь


 
12 ©   (2010-04-28 16:44) [91]

грустно смотреть


 
pavel_guzhanov ©   (2010-04-29 08:49) [92]

Всем спасибо. По крайней мере я понял причину, по которой получается AV.

Буду думать, как сделать по-другому :о)


 
sniknik ©   (2010-04-29 10:03) [93]

> Буду думать, как сделать по-другому :о)
чего тут думать? еще в [35] было указание на то как борлад подобное "обходит", посмотреть код в генофонде (несколько строк всего), да модифицировать "под себя".

а в [42] прямой пример замены ничего не меняющей ни в отображении и в логике, только проверки станут другими, не на nil а на видитмость.


 
Плохиш ©   (2010-04-29 10:20) [94]


> 12 ©   (28.04.10 16:44) [91]
>
> грустно смотреть

Просто весеннее обострение ;-)



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

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

Наверх




Память: 0.63 MB
Время: 0.048 c
15-1270759152
Nickola2
2010-04-09 00:39
2010.08.27
Борьба с рекламными баннерами не увенчалась успехом


15-1271172177
bss
2010-04-13 19:22
2010.08.27
Объясните, пожалуйста, насчет синтаксиса XSD


15-1264519606
Igor_guest
2010-01-26 18:26
2010.08.27
распространение продукта на Delphi


2-1268242784
rust-02
2010-03-10 20:39
2010.08.27
Как считать строки из текстового файла как массив


15-1274432547
boriskb
2010-05-21 13:02
2010.08.27
Можно не всё сразу а выборочно?