Главная страница
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.008 c
15-1306182593
Юрий
2011-05-24 00:29
2011.09.11
С днем рождения ! 24 мая 2011 вторник


15-1306184686
R_R
2011-05-24 01:04
2011.09.11
Как в delphi одинарную ковычку вставить в строку?


2-1306344649
xozain
2011-05-25 21:30
2011.09.11
Работа с ТХТ


2-1306827736
Handle
2011-05-31 11:42
2011.09.11
не определяется версия приложения


3-1263764617
dars73
2010-01-18 00:43
2011.09.11
SQL запрос - где грабли?