anchor.diff:    FFont.Free;
     FLines.Free;
     inherited Destroy;
  +end;
  +
  +procedure TfpgMessageBox.AfterCreate;
  +begin
  +  inherited AfterCreate;
  +  {@VFD_BODY_BEGIN: MessageBox}
  +  Name := 'MessageBox';
  +  SetPosition(330, 199, 419, 138);
  +  WindowTitle := 'Message';
  +  Hint := '';
  +  WindowPosition := wpOneThirdDown;
  +  MinWidth := 200;
  +  Sizeable := False;
  +  OnShow  := @FormShow;
  +  OnPaint := @FormPaint;
  +  OnKeyPress := @FormKeyPressed;
  +
  +  FButton := TfpgButton.Create(self);
  +  with FButton do
  +  begin
  +    Name := 'FButton';
  +    SetPosition(8, 8, 75, 23);
  +    Text := 'OK';
  +    FontDesc := '#Label1';
  +    Hint := '';
  +    ImageName := '';
  +    ModalResult := mrOK;
  +    TabOrder := 1;
  +    OnKeyPress := @FormKeyPressed;
  +  end;
  +
  +  {@VFD_BODY_END: MessageBox}
   end;
   
   procedure TfpgMessageBox.SetMessage(AMessage: string);
  
positive.code: 
    TfpgMessageBox = class(TfpgForm)
    private
      FLines: TStringList;
      FFont: TfpgFont;
      FTextY: integer;
      FLineHeight: integer;
      FMaxLineWidth: integer;
      FButton: TfpgButton;
      FCentreText: Boolean;
    protected
      procedure   HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
      procedure   HandlePaint; override;
      procedure   HandleShow; override;
    public
      constructor Create(AOwner: TComponent); override;
      destructor  Destroy; override;
      procedure   SetMessage(AMessage: string);
      property    CentreText: Boolean read FCentreText write FCentreText default False;
    end;
  
negative.code: 
  { TfpgMessageBox }
  
  procedure TfpgMessageBox.FormPaint(Sender: TObject);
  var
    n, y: integer;
    tw: integer;
  begin
    Canvas.SetFont(FFont);
    y := FTextY;
    for n := 0 to FLines.Count-1 do
  