| 
| Описание |  | Ключевое слово 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
 
 |  |