Главная страница
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
3-36536
P0tia
2003-11-20 16:19
2003.12.12
Определение типа таблицы


3-36540
Andrey__
2003-11-20 13:44
2003.12.12
ADO+Access2000+@@identity


4-36902
Raduga
2003-10-16 13:05
2003.12.12
Замена таймера


7-36869
Николашка
2003-10-03 11:44
2003.12.12
Interrupt 21h Function 440Dh Minor Code 4Ah


1-36662
Marina_S
2003-11-30 17:24
2003.12.12
Почему на экране не появляются созданные квадраты