Главная страница
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.47 MB
Время: 0.018 c
4-36897
Max_one
2003-10-13 17:27
2003.12.12
mciSendCommand что неправильно?


1-36639
SDW_syscoder
2003-12-01 09:56
2003.12.12
Преобразование HEX-кода в ASCII


1-36591
maya
2003-12-03 12:57
2003.12.12
Приложение в браузере


14-36810
Хрюначок
2003-11-19 16:12
2003.12.12
Копирование


1-36628
man
2003-12-01 10:53
2003.12.12
установка real