Главная страница
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.049 c
15-1160334434
kaif
2006-10-08 23:07
2006.11.05
Учение чучхе, голод и атомная бомба


15-1160987668
MacroDenS
2006-10-16 12:34
2006.11.05
Поздравляю с первым снегом!!!!


15-1160661814
Один из
2006-10-12 18:03
2006.11.05
Возможно ли заработать на встраиваемой рекламе?


2-1161674453
dera
2006-10-24 11:20
2006.11.05
Как убрать пароль на открытие любой БД в MS Access?


3-1157714659
NotGooDP
2006-09-08 15:24
2006.11.05
Проблема с передачей параметров