![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потеря управления контрола [D2005, XP]
jacksotnik © (2012-01-30 11:37:00)Всем привет. подскажите как сделать так чтобы после нажатия на кнопку в ней вызывается процедура, и чтоб после того как отработала процедура не возвращалось в процедуру onclick кнопки
jacksotnik (2012-01-30 14:05:00) [1]Спасибо. Попробуем
Юрий Зотов (2012-01-30 14:01:00) [2]
> jacksotnik (30.01.12 13:34) [29]
Да, это, конечно, довод серьезный, что и говорить. Примерно, как стоматолог начнет лечить зуб не так, как обычные врачи делают, а через другое отверстие.
Смотрите конструктор и деструктор TTimer, а в них - AllocateHWnd и DeallocateHWnd. Сделайте по аналогии - получите окно, которое и будет диспетчером Ваших объектов.
jacksotnik (2012-01-30 13:34:00) [3]
> Блин, еще раз спрашиваю - почему?
Так я и сам уже сделал. Хочу по-другому
Ega23 (2012-01-30 13:27:00) [4]Кто тебе мешает эти кнопки на фрейм кидать?
Плохиш (2012-01-30 13:18:00) [5]Высосать проблему из пальца, а потом героически еë решать.
Только фигли на форум-то припëрся?
Юрий Зотов (2012-01-30 13:17:00) [6]
> jacksotnik (30.01.12 12:58) [25]
> Блин еще раз повторяю обработчика этого сообщения не должно
> быть в мейнформе
Блин, еще раз спрашиваю - почему?
jacksotnik (2012-01-30 12:58:00) [7]Блин еще раз повторяю обработчика этого сообщения не должно быть в мейнформе
Юрий Зотов (2012-01-30 12:57:00) [8]Или Application.MainForm.Handle
jacksotnik (2012-01-30 12:56:00) [9]
> А что тебе мешает его создать?
Имеешь ввиду, создать поле типа Cardinal? А как ему правильно значение присвоить?
Сергей М. (2012-01-30 12:51:00) [10]
> кому отправлять сообщение если у объекта моего класса нет
> handle
Зато наверняка есть у приложения, ибо оно у тебя гуёвое.
Вот и отправляй сообщение окну с хендлом Application.Handle
Ega23 (2012-01-30 12:40:00) [11]
> Это хорошо но кому отправлять сообщение если у объекта моего
> класса нет handle
А что тебе мешает его создать?
jacksotnik (2012-01-30 12:39:00) [12]
> Была такая задача. Решил так: в обработчике генерирую свое
> сообщение. В обработчике своего сообщения удаляю объекты.
>
Это хорошо но кому отправлять сообщение если у объекта моего класса нет handle
Юрий Зотов (2012-01-30 12:39:00) [13]
> jacksotnik (30.01.12 12:25) [16]
А почему нельзя использовать PostMessage?
Ega23 (2012-01-30 12:38:00) [14]
> Это нужно что код был универсален. т.е из главной программы
> надо выполнит только вызов процедуры которая наплодит объекты,
> а все остальные действия должен выполнять сам объект
Создавай менеджер своих объектов. С очередью сообщений.
И. Павел (2012-01-30 12:36:00) [15]> [16] jacksotnik (30.01.12 12:25)
Такой код может получится не универсальным а неконтролируемым. Не зря многие не советуют использовать Thread.FreeOnTerminate без особой на то необходимости.
jacksotnik (2012-01-30 12:25:00) [16]Это нужно что код был универсален. т.е из главной программы надо выполнит только вызов процедуры которая наплодит объекты, а все остальные действия должен выполнять сам объект
AV (2012-01-30 12:19:00) [17]
> После отработки обработчика события управление вернется
> в код класса и если в нем есть обращения к полям объекта,
> то будет AV.
собственно.
AV (2012-01-30 12:18:00) [18]RWolf © (30.01.12 11:58) [12]
там не так просто
если глянуть
FreeThread := Thread.FFreeOnTerminate;
Result := Thread.FReturnValue;
Thread.DoTerminate;
Thread.FFinished := True;
SignalSyncEvent;
if FreeThread then Thread.Free;
а чего же тогда не
if Thread.FFreeOnTerminate; then Thread.Free;
Юрий Зотов (2012-01-30 12:10:00) [19]
> RWolf © (30.01.12 11:58) [12]
После отработки обработчика события управление вернется в код класса и если в нем есть обращения к полям объекта, то будет AV.
Нормальное решение - PostMessage форме (или другому диспетчеру), но по каким-то причинам (непонятным) человек не хочет этого делать. Да и вообще, если возникает необходимость в таких штуках, то часто это говорит об огрехах в архитектуре. Поэтому и возникает подозрение на X, Y, Z.
RWolf (2012-01-30 11:58:00) [20]почему бы объекту не уничтожать самого себя?
TThread вон уничтожает (FreeOnTerminate), и ничего.