Читать «Виртуальная библиотека Delphi» онлайн - страница 105
Unknown
except
Handle(P);
raise;
end;
finally
Dispose(P);
end;
Первая строка распределяет большой блок памяти. Затем, в блоке try, выполняется несколько операторов, каждый из которых может вызвать ошибку, или, другими словами, "вызвать исключительную ситуацию". Если возникает ошибка, оставшаяся часть блока try пропускается, и выполняются блоки except и finally. Если ошибок нет, то после выполнения всех операторов в блоке try выполнится блок finally. В любом случае, блок памяти будет освобожден. Блок try … finally ловит все, включая Windows GPF или Access Violation. Обратите внимание на вызов raise в блоке try … except. Он снова вызывает исключительную ситуацию, которая вызовет сообщение об ошибке после того, когда закончится блок finally. Если не вызвать raise, то считается, что вы обработали исключительную ситуацию самостоятельно в пределах блока except.
3. Есть ли простой способ перехватить exception?
Создайте метод для формы, перехватывающий исключения. Этот метод будет вызываться обработчиком
procedure TForm1.MyExcept(Sender: TObject; E: Exception);
begin
if E is EDatabaseError then MessageDlg('Поймали exception', mtInformation, [mbOk], 0)
else raise E;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := MyExcept;
end;
4. Delphi используют строки в стиле Pascal или C?
И те и другие. Delphi имеет два различных набора функций манипулирования строками, один - для
Delphi 2.0 добавляет так называемые длинные строки (
5. Есть ли в Delphi битовые множества?
В явном виде битовых множеств в языке Object Pascal нет. Но вместо этого можно использовать обычные множества, которые на самом деле и хранятся как битовые. Если множество вам нужно для проверки, установлен ли какой то бит в слове (байте и т.д.) можно попробовать такую конструкцию:
type
PByteSet = ^TByteSet;
TByteSet = set of Byte;
var
W: Word;
...