Форум: "Начинающим";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];
Внизпотеря управления контрола Найти похожие ветки
← →
jacksotnik (2012-01-30 11:37) [0]Всем привет. подскажите как сделать так чтобы после нажатия на кнопку в ней вызывается процедура, и чтоб после того как отработала процедура не возвращалось в процедуру onclick кнопки
← →
RWolf © (2012-01-30 11:42) [1]смысл?
← →
Юрий Зотов © (2012-01-30 11:43) [2]> как сделать так чтобы после нажатия на кнопку в ней вызывается
> процедура
Из OnClick эту процедуру и вызвать.
> и чтоб после того как отработала процедура не
> возвращалось в процедуру onclick кнопки
Никак. Но можно в OnClick больше ничего не делать.
← →
AV © (2012-01-30 11:44) [3]procedure PPP;
begin
ShowMessage( "procedure PPP;");
raise Exception.Create("");
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage( "before PPP;");
PPP;
ShowMessage( "after PPP;");
end;
← →
Юрий Зотов © (2012-01-30 11:44) [4]Есть подозрение на X, Y, Z. Объясните, зачем все это?
← →
И. Павел © (2012-01-30 11:46) [5]> [0] jacksotnik (30.01.12 11:37)
Если я правильно понял вопрос, то должен помочь вызов Abort в конце вложенной процедуры. Тогда возникнет исключение и проскочится весь код в OnClick (если там, конечно, нет нужного catch).
← →
Ega23 © (2012-01-30 11:46) [6]
function PPP: Boolean;
begin
Result := MessageBox(Handle, "ttt", "ttt", MB_OKCANCEL) = IDOK;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage( "before PPP;");
if PPP then
ShowMessage( "after PPP;");
end;
← →
jacksotnik (2012-01-30 11:52) [7]Мне надо удалить объект класса при нажатии на кнопочку созданную внутри класса, тоесть должна уничтожиться и кнопка на которую нажали. но все это надо организовать без передачи сообщения в мейн форму. попробую с генерацией эксепшена
← →
И. Павел © (2012-01-30 11:55) [8]> [7] jacksotnik (30.01.12 11:52)
Была такая задача. Решил так: в обработчике генерирую свое сообщение. В обработчике своего сообщения удаляю объекты.
← →
AV © (2012-01-30 11:55) [9]т.е. уничтожение объекта из самого объекта?
ерунда.
PostMessage диспетчеру - православный выход
← →
И. Павел © (2012-01-30 11:55) [10]> в обработчике генерирую свое сообщение
В вашем случае — в обработчике onclick.
← →
Юрий Зотов © (2012-01-30 11:57) [11]
> jacksotnik (30.01.12 11:52) [7]
> Мне надо удалить объект класса при нажатии на кнопочку созданную
> внутри класса, тоесть должна уничтожиться и кнопка на которую
> нажали.
Похоже, подозрение на X, Y, Z находит свое подтверждение. Зачем это нужно, расскажите.
← →
RWolf © (2012-01-30 11:58) [12]почему бы объекту не уничтожать самого себя?
TThread вон уничтожает (FreeOnTerminate), и ничего.
← →
Юрий Зотов © (2012-01-30 12:10) [13]
> RWolf © (30.01.12 11:58) [12]
После отработки обработчика события управление вернется в код класса и если в нем есть обращения к полям объекта, то будет AV.
Нормальное решение - PostMessage форме (или другому диспетчеру), но по каким-то причинам (непонятным) человек не хочет этого делать. Да и вообще, если возникает необходимость в таких штуках, то часто это говорит об огрехах в архитектуре. Поэтому и возникает подозрение на X, Y, Z.
← →
AV © (2012-01-30 12:18) [14]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;
← →
AV © (2012-01-30 12:19) [15]
> После отработки обработчика события управление вернется
> в код класса и если в нем есть обращения к полям объекта,
> то будет AV.
собственно.
← →
jacksotnik (2012-01-30 12:25) [16]Это нужно что код был универсален. т.е из главной программы надо выполнит только вызов процедуры которая наплодит объекты, а все остальные действия должен выполнять сам объект
← →
И. Павел © (2012-01-30 12:36) [17]> [16] jacksotnik (30.01.12 12:25)
Такой код может получится не универсальным а неконтролируемым. Не зря многие не советуют использовать Thread.FreeOnTerminate без особой на то необходимости.
← →
Ega23 © (2012-01-30 12:38) [18]
> Это нужно что код был универсален. т.е из главной программы
> надо выполнит только вызов процедуры которая наплодит объекты,
> а все остальные действия должен выполнять сам объект
Создавай менеджер своих объектов. С очередью сообщений.
← →
Юрий Зотов © (2012-01-30 12:39) [19]
> jacksotnik (30.01.12 12:25) [16]
А почему нельзя использовать PostMessage?
← →
jacksotnik (2012-01-30 12:39) [20]
> Была такая задача. Решил так: в обработчике генерирую свое
> сообщение. В обработчике своего сообщения удаляю объекты.
>
Это хорошо но кому отправлять сообщение если у объекта моего класса нет handle
← →
Ega23 © (2012-01-30 12:40) [21]
> Это хорошо но кому отправлять сообщение если у объекта моего
> класса нет handle
А что тебе мешает его создать?
← →
Сергей М. © (2012-01-30 12:51) [22]
> кому отправлять сообщение если у объекта моего класса нет
> handle
Зато наверняка есть у приложения, ибо оно у тебя гуёвое.
Вот и отправляй сообщение окну с хендлом Application.Handle
← →
jacksotnik (2012-01-30 12:56) [23]
> А что тебе мешает его создать?
Имеешь ввиду, создать поле типа Cardinal? А как ему правильно значение присвоить?
← →
Юрий Зотов © (2012-01-30 12:57) [24]Или Application.MainForm.Handle
← →
jacksotnik (2012-01-30 12:58) [25]Блин еще раз повторяю обработчика этого сообщения не должно быть в мейнформе
← →
Юрий Зотов © (2012-01-30 13:17) [26]
> jacksotnik (30.01.12 12:58) [25]
> Блин еще раз повторяю обработчика этого сообщения не должно
> быть в мейнформе
Блин, еще раз спрашиваю - почему?
← →
Плохиш © (2012-01-30 13:18) [27]Высосать проблему из пальца, а потом героически еë решать.
Только фигли на форум-то припëрся?
← →
Ega23 © (2012-01-30 13:27) [28]Кто тебе мешает эти кнопки на фрейм кидать?
← →
jacksotnik (2012-01-30 13:34) [29]
> Блин, еще раз спрашиваю - почему?
Так я и сам уже сделал. Хочу по-другому
← →
Юрий Зотов © (2012-01-30 14:01) [30]
> jacksotnik (30.01.12 13:34) [29]
Да, это, конечно, довод серьезный, что и говорить. Примерно, как стоматолог начнет лечить зуб не так, как обычные врачи делают, а через другое отверстие.
Смотрите конструктор и деструктор TTimer, а в них - AllocateHWnd и DeallocateHWnd. Сделайте по аналогии - получите окно, которое и будет диспетчером Ваших объектов.
← →
jacksotnik (2012-01-30 14:05) [31]Спасибо. Попробуем
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.004 c