Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Обработка исключений   Найти похожие ветки 

 
-=Mike=-   (2006-01-18 03:50) [0]

В своем проекте я использую модуль err.pas. Много где пользуюсь процедурой Abort.
Но возникает одна проблема: т.к. в KOL нет обработчика исключений по умолчанию как например в VCL это сделано повторением в цикле операторов:
       try
         HandleMessage;
       except
         HandleException(Self);
       end;


Т.о. процедура Abort приводит к аварийному завершению программы.

Подскажите, как можно решить эту проблему???


 
ECM ©   (2006-01-18 14:30) [1]

Можно так же как и в VCL  :))
Добавляем в проект новый Unit:

unit HandledRun;

interface
uses Windows,KOL;

procedure RunSafe( var AppletWnd: PControl );

implementation

procedure RunSafe( var AppletWnd: PControl );
begin
 AppletRunning := True;
 Applet := AppletWnd;
 AppletWnd.CreateWindow; //virtual!!!
 while not AppletTerminated do
 begin
   try
     WaitMessage;
     AppletWnd.ProcessMessages;
     {$IFDEF USE_OnIdle}
     ProcessIdle( AppletWnd );
     {$ENDIF}
   except
   // Пишем тут обработчик (если нужен)
   end;
 end;
 if AppletWnd <> nil then
   TerminateExecution( AppletWnd );
end;

end.


Открываем файл ProjectName_1.inc и добавляем две строки:

{ xxx_1.inc
 This file is for you. Place here any code to run it
 just following Applet creation (if it present) but
 before creating other forms. E.g., You can place here
 <IF> statement, which prevents running of application
 in some cases. TIP: always use Applet for such checks
 and make it invisible until final decision if to run
 application or not. }

 RunSafe(Form1.Form );
 Halt(0);


собственно всё...:))


 
ECM ©   (2006-01-18 14:34) [2]

З.Ы. сорри (опечатка) - надо использовать не ProjectName_1.inc а
ProjectName_3.inc иначе доп. формы никогда не появятся ... :))


 
-=Mike=-   (2006-01-18 19:59) [3]

Спасибо!
Попробую этот вариант


 
Thaddy   (2006-01-18 21:03) [4]

Another usefull trick is this:

try
 //your code
except
//hardware interrupt
asm
  int 3
end;
end;

Then you can examine the callstack to find the last working routine...



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.13 c
2-1161588260
mike ilin
2006-10-23 11:24
2006.11.05
работа с компонентами


2-1161622479
markers
2006-10-23 20:54
2006.11.05
Естьли numeric_format в Delphi?


6-1146778260
Sergio77
2006-05-05 01:31
2006.11.05
данные от сервера INDY всем клиентам INDY


15-1160666005
vidiv
2006-10-12 19:13
2006.11.05
дайте скачать 3dsmax =)


2-1161519769
beglec
2006-10-22 16:22
2006.11.05
Проблема с массивом неизвестного размера