Главная страница
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.009 c
15-1306165114
bss
2011-05-23 19:38
2011.09.11
Автоматизация логистики, курьерская служба


1-1265882575
Term
2010-02-11 13:02
2011.09.11
Отправка сообщения с помощью MAPI


2-1306712358
And7
2011-05-30 03:39
2011.09.11
Skrolbar в Memo


4-1250528858
ivanoff
2009-08-17 21:07
2011.09.11
как наити нужный Edit в чужом приложении


2-1306717948
Lutdan
2011-05-30 05:12
2011.09.11
Rave Reports ошибка