Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 38

/ вопрос открыт /

Есть ли какая-то функция (может, не совсем функция), которая бы возвращала номер строки, в которой она написана?

Showmessage('Текущая строка ' + intTOStr(эта функция)')

mvp Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

mvp (статус: 4-ый класс), 16 июня 2006, 17:30 [#1]:

Как-раз то, что нужно! Спасибо
DNK

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

mvp (статус: 4-ый класс), 16 июня 2006, 20:21 [#3]:

То, что нужно - спасибо

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.