title: Where does exception message comes from?
body: <p>When exceptions like <code>EZeroDivide</code>, <code>EOverflow</code>, <code>EMathError</code>... are raised, they appear with a default message.</p>
  
  <p>For example, the following code raises an <code>EZeroDivide</code> with the following message:</p>
  
  <blockquote>
    <p>Floating point division by zero</p>
  </blockquote>
  
  <pre><code>procedure TForm1.Button1Click(Sender: TObject);
  var
    N : Extended;
    D : Extended;
  begin
    N := 100;
    D := 0;
    Caption := FloatToStr(N/D);
  end;
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/RHfuZ.png" rel="noreferrer"><img src="https://i.stack.imgur.com/RHfuZ.png" alt="EZeroDivide Floating point division by zero"></a></p>
  
  <p>When I "manually" raise an <code>EZeroDivide</code> exception by code, I have to pass the <code>Msg</code> parameter to the constructor and it is raised as an <code>EZeroDivide</code> exception which have an empty string message:</p>
  
  <pre><code>procedure TForm1.Button2Click(Sender: TObject);
  begin
    raise EZeroDivide.Create('');
  end;
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/cGCnn.png" rel="noreferrer"><img src="https://i.stack.imgur.com/cGCnn.png" alt="EZeroDivide without message"></a></p>
  
  <p>Where does default exception messages come from?</p>