Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

потеря управления контрола [D2005, XP]


Страницы:   1 2

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), и ничего.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо