Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.012 c
1-1265878460
Владимир З.
2010-02-11 11:54
2011.09.11
Что приходит в flash?


15-1306238817
boriskb
2011-05-24 16:06
2011.09.11
скорость передачи данных составила 26 терабит в секунду


15-1305915698
palva
2011-05-20 22:21
2011.09.11
Goodbye, IE6


4-1250942387
VladimirVB
2009-08-22 15:59
2011.09.11
Ресурсы


2-1306057843
Criptonik
2011-05-22 13:50
2011.09.11
Вывод системных файлов