Главная страница
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.052 c
6-1149245388
Dush
2006-06-02 14:49
2006.11.05
IP адрес выданный провайдером


1-1158867543
Алексей А.
2006-09-21 23:39
2006.11.05
Как запихнуть форму в tPanel


2-1161038070
Show
2006-10-17 02:34
2006.11.05
Как правильно соединить кнопку TToolBar с пуктом меню?


8-1143743821
Malik
2006-03-30 22:37
2006.11.05
Быстрый запуск MP3


15-1161074442
ZeroDivide
2006-10-17 12:40
2006.11.05
Мне стыдно за мой универ :(