|
Вопрос # 38/ вопрос открыт / |
|
Есть ли какая-то функция (может, не совсем функция), которая бы возвращала номер строки, в которой она написана?
Showmessage('Текущая строка ' + intTOStr(эта функция)')
 |
Вопрос задал: mvp (статус: 4-ый класс)
Вопрос отправлен: 14 июня 2006, 16:51
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Alexander A. Gribanov
Подобной функции что-то не припомню, но может чем-то поможет Assert() ?
 |
Ответ отправил: Alexander A. Gribanov (статус: 2-ой класс)
Время отправки: 14 июня 2006, 18:06
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 16 июня 2006, 20:21; участников в обсуждении: 2.
|
mvp (статус: 4-ый класс), 16 июня 2006, 17:30 [#1]:
Как-раз то, что нужно! Спасибо
|
|
DNK (статус: Студент), 16 июня 2006, 20:04 [#2]:
Что-то глючит. Почему-то не могу ответить на вопрос. Говорит: Вопроса не существует. Пускай Адрей разбирается.
Конкретней:
Есть стандартная процедура:
procedure Assert(expr : Boolean [; const msg: string]);
Обработчик по умалчиванию вызывает программное исключение (EAssertionFailed, увидите веселое окошко с крестиком), с которым передается имя модуля, номер строки, адрес места откуда была вызвана прецедура.
Однако если прописать по адресу AssertErrorProc свой обработчик, то ситуацию можно изменить.
Программа должна обязательно быть откомпилированна с включенным флажком Project Options -> Compiller -> Assertions или в коде должна стоять директива $ASSERTIONS ON ($C +)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
begin
ShowMessage(Format('%s'#13#13'(Модуль: %s,'#13'линия %d,'#13'адрес $%x)',
[Message, ExtractFileName(Filename), LineNumber, Pred(Integer(ErrorAddr))]));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Приготовиться!');
Assert(false, 'Assert Message!!!');
ShowMessage('Ok!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AssertErrorProc := @AssertErrorHandler
end;
end.
"Digital Networked Knight"
|
|
mvp (статус: 4-ый класс), 16 июня 2006, 20:21 [#3]:
То, что нужно - спасибо
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|