Текущий архив: 2011.09.11;
Скачать: CL | DM;
Вниз
Разрушение объекта при двойном щелчке на объекте Найти похожие ветки
← →
Leonid Troyanovsky © (2010-02-18 14:34) [40]
> Riply © (18.02.10 13:17) [35]
> вместе с резюме "Общих решений таких проблем, по видимому
> не существует"
Мы тут как-то не очень давно с ИШ обсуждали похожую тему,
и я предлагал примерно такой вариант, во многом свободный от
недостатков PostMessage:
type
EForceFreeException = class(Exception)
private
DestroyedObject: TObject;
function This: EForceFreeException;
end;
function EForceFreeException.This;
begin
Result := Self;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with EForceFreeException.Create("Free: "+(Sender as TButton).Caption) do
begin
DestroyedObject := Sender;
raise This;
end;
Application.ProcessMessages;
end;
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if E is EForceFreeException then
begin
EForceFreeException(E).DestroyedObject.Free;
Application.ShowException(E);
end;
end;
Про не гуевы приложения особо не задумывался.
--
Regards, LVT.
← →
oxffff © (2010-02-18 15:09) [41]
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> with EForceFreeException.Create("Free: "+(Sender as TButton).
> Caption) do
> begin
> DestroyedObject := Sender;
> raise This;
> end;
> Application.ProcessMessages;
> end;
Что это?
Назначение строчки не раскрыто.
← →
Leonid Troyanovsky © (2010-02-18 15:20) [42]
> oxffff © (18.02.10 15:09) [41]
> Назначение строчки не раскрыто.
У Post*Message/Release на этом месте возникают проблемы.
А, во-ще, что там стоит уже не важно.
Вот и то обсуждение:
http://www.delphimaster.net/view/2-1192180654/40-79
Как оказалось, что кроме ИШ там многие поучаствовали ;)
--
Regards, LVT.
← →
oxffff © (2010-02-18 15:28) [43]
> Leonid Troyanovsky © (18.02.10 15:20) [42]
>
> > oxffff © (18.02.10 15:09) [41]
>
> > Назначение строчки не раскрыто.
>
> У Post*Message/Release на этом месте возникают проблемы.
>
Я не понял о каких проблемах. Ведь это недостижимый код.
>А, во-ще, что там стоит уже не важно.
И я про это. :)
← →
Leonid Troyanovsky © (2010-02-18 15:34) [44]
> oxffff © (18.02.10 15:28) [43]
> Я не понял о каких проблемах. Ведь это недостижимый код.
Ну, чего там непонятного. Сначало было
procedure TForm1.Button1Click(Sender: TObject);
begin
Release;
Application.ProcessMessages;
end;
Потом я вспоминал, что должно быть вместо Release.
А строчка так и осталась. Считай, для сравнения.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2010-02-18 16:09) [45]
> oxffff © (18.02.10 15:28) [43]
> И я про это. :)
А..вот, еще кое-что вспомнил.
Чтобы корректно обработать еще пару объектов:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
if E is EForceFreeException then
with EForceFreeException(E) do
if (DestroyedObject = Application.MainForm) or
(DestroyedObject = Application) then
Application.Terminate
else
DestroyedObject.Free;
Application.ShowException(E);
end;
--
Regards, LVT.
Страницы: 1 2 вся ветка
Текущий архив: 2011.09.11;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.008 c