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

Вниз

Как правильно объявить и вызвать функц., доступную из всех Юнитов   Найти похожие ветки 

 
Ал   (2003-03-28 14:12) [0]

Обявляю:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm1 = ^TForm1;
TForm1 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
procedure Button1Click(Sender: PObj);
procedure ReadThemeFile(Sender: PObj); {<<<<<============!!!!!!!!}
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
StayOnTop : Boolean;
end;

........................


Вызываю:

procedure TForm1.Button1Click(Sender: PObj);
begin
try
Form1.ReadThemeFile(Form1.Form); {<<<<<<<<==================!!!!!!!}
except
MsgOk("Не могу вызвать ReadThemeFile(Form1.Form)");
( наверное, неправильно) Обявляю:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm1 = ^TForm1;
TForm1 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
procedure Button1Click(Sender: PObj);
procedure ReadThemeFile(Sender: PObj); {<<<<<============!!!!!!!!}
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
StayOnTop : Boolean;
end;

........................


Вызываю:

procedure TForm1.Button1Click(Sender: PObj);
begin
try
Form1.ReadThemeFile(Form1.Form); {<<<<<<<<==================!!!!!!!}
except
MsgOk("Не могу вызвать ReadThemeFile(Form1.Form)");
end;
end;

В Win95,98 при щелчке по Botton1 процедура вызывается и исполняется без вопросов!
В Win2000,XP ломается с RunTime Error 216, причем try-except не перехватывает эту ошибку!
Знатоки, подскажите, как поступить.
Процедуру объявлял так (наверное, неправильно), чтобы можно было ее вызывать из любого Юнита и там были видны Public переменные, объявленные в Unit1.

Пробовал D6+KOL, D4+KOL.


 
Bartov   (2003-03-28 16:12) [1]

> причем try-except не перехватывает эту ошибку!

http://bonanzas.rinet.ru/kol_err.zip

... и обеспечивает работу конструкций try-finally, try-except, raise с минимальными изменениями в коде.


 
Ал   (2003-03-31 14:04) [2]

Спасибо за ответ!

Kol_err я использую.

Причина оказалась в другом:
в ломающейся процедуре стоял вызов API-функции CharLower, в которую в качестве аргумента передавался PChar(строка).
Причем в Win 95, 98 строка нулевой длины обрабатывалась корректно, а в 2000, XP - с ошибкой RunTime Error = 216.

Причем try-except не ловил ее!

Заменил вызов CharLower на AnsiLowerCase из KOL - и все заработало.


 
Bartov   (2003-03-31 15:08) [3]

> Причем в Win 95, 98 строка нулевой длины обрабатывалась корректно, а в 2000, XP - с ошибкой RunTime Error = 216.

А ты сделай так и все будет отлично работать:
var
pc: PChar;
begin
...
pc := #0;
...
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
1-36613
BaDeVlad
2003-12-01 14:05
2003.12.12
Можно ли задать размер файла на диске ничего не записывая?


1-36627
pashaz
2003-11-29 08:49
2003.12.12
SMExport


1-36757
bug008
2003-11-30 21:52
2003.12.12
StayOnTop


1-36705
Artog
2003-12-02 15:17
2003.12.12
динамический массив


14-36841
don-do
2003-11-19 14:56
2003.12.12
Господа, я тут ссылку нашел, крутой debuger, сходите, не пожалеет