title: How to get TextWidth of string (without Canvas)?
body: <p>I would like to get text width of a string before an application starts. Everything works fine until Application.MainForm canvas present. The problem is, when I try dynamically create TOrdinarium in the OnCreate event of the app. main form, "Canvas does not allow drawing" error occurs. (Application.MainForm is nil....). I tried several ways to create Canvas dynamically (one of them is written below), but it can not measure text sizes without being attached to parented control. </p>
  
  <p>Is there way how to make it work somehow?</p>
  
  <p>Thanx</p>
  
  <p>I tried this:</p>
  
  <pre><code>  TOrdinarium = class (TCustomControl)
      private 
         function GetVirtualWidth:integer;
      end;
  
  constructor TOrdinarium.Create(AOwner:TComponent);
  begin
   inherited;
   Width:=GetVirtualWidth;
  end; 
  
  function TOrdinarium.GetVirtualWidth:integer;
  var  ACanvas : TControlCanvas;
    begin
    ACanvas := TControlCanvas.Create;
    TControlCanvas(ACanvas).Control := Application.MainForm; 
    ACanvas.Font.Assign(Font);
  
    result:=ACanvas.TextWidth('0');
  
    ACanvas.Free;
    end;
  </code></pre>