Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
Raise
Ключевое слово
Поднимает исключение unit
  
1 Raise

2 Raise Object reference

3 Raise Object reference At Address pointer
Описание
Ключевое слово Raise создает объект исключения, который передается обработчику исключений Delphi.

Вы можете поднимать исключения только в буквально исключительных случаях. Это не только из-за понесенных накладных расходов ресурсов при выполнении, но также и потому, что есть наиболее лучшие пути для обработки ошибок приложения, таких как коды возврата от функций.

Версия 1:
Raise используется в предложении Except инструкции Try. Она просто, переподнимает текущее исключение в приложении для того, чтобы обратиться к нему на более высоком уровне.

Версия 2:
Использует новый объект исключения для сообщения об исключении. Обычно, вы можете использовать объект Exception, или унаследованный объект Exception.

Вы можете создать объект во время исключения:

Raise Exception.Create('Error happened');

Версия 3: как и версии 2, но с изменением значения адреса исключения. Во всех случаях, когда запрос Raise сделан, выполнения кода переходит к обработчику исключений Delphi - он или заканчивает программу, или использует текущую инструкцию Try, чтобы обработать её.
Похожие команды
Except  Начинает предложение заманивающее в ловушку ошибки Try инструкции

Finally  Начинает безоговорочный раздел кода инструкции Try

On  Определяет обработку особых ситуаций в предложении Try Except

Try  Начинает код, который перехватывает ошибки

 
Пример кода : Использование функции Raise
var
  fred, jim : string;
begin
  // Установка некоторых типовые названий
  fred := 'Good name';
  jim  := 'Badname  ';

  // Попытка менять эти названия
  try
    ShowMessage(fred+' поменялся = '+SwapNames(fred));
    ShowMessage(jim+' поменялся = '+SwapNames(jim));
  except
    On E : Exception do
      ShowMessage(E.Message);
  end;
end;

// Перестановка первого и второго названия в переданной строке названия
// Поднимает исключение, если название недопустимо
function TForm1.SwapNames(name: string): string;
var
  blankPos : Integer;
  i        : Integer;
  nameLen  : Integer;
begin
  // Очистка строки результата, чтобы указать, что нет никакого результата
  Result := '';

  // Нахождение позицию последнего названия
  blankPos := Pos(' ', name);

  // Если найдено, и позиция меньше конца названия
  // тогда пока всё нормально
  nameLen := Length(name);
  if (blankPos > 0) and (blankPos   then
  begin
    // Нахождение начала второго названия
    i := blankPos + 1;
    repeat
      // Если начало последнего названия найденно, меняем первое и последнее название
      if name[i] <> ' '
      then Result := Copy(name, i, nameLen-i+1) + ' ' +
                     Copy(name, 1, blankPos-1)

      else Inc(i);
    until (i > nameLen) or (Length(Result) > 0);
  end;

  // Не удалось поменять первое и второе название ?
  if Length(Result) = 0
  then Raise Exception.CreateFmt('Недопустимое название : ''%s''', [name]);
end;
Good name поменялся = name Good
Недопустимое название : 'Badname '
 
Пример кода : Поднимаем новый тип исключения
var
  age : Integer;
  exc : EBadAge;
begin
  // Простой код, который поднимает новый тип исключения
  age := 23;
  if age <30
  then
  begin
    // Создание нового объекта исключения EBadAge
    exc := EBadAge.CreateFmt('Bad age : %d',[age]);

    // Теперь поднимаем этот новый объект исключения
    Raise exc;
  end;
end;
Диалог ошибки Delphi покажет сообщение :

Bad age : 23
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия