Форум: "KOL";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
ВнизКак правильно объявить и вызвать функц., доступную из всех Юнитов Найти похожие ветки
← →
Ал (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 вся ветка
Форум: "KOL";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c