You can store the main parameters of your form in Registry. Resave them, when you close form, and you can restore them, if you create form again.
uses Registry; procedure TForm1.FormDestroy(Sender: TObject); begin with TRegistry.Create do begin RootKey:=HKEY_LOCAL_MACHINE; if OpenKey('Greatis Software\Example\Form', True) then begin WriteInteger('Left', Form1.Left); WriteInteger('Top', Form1.Top); WriteInteger('Width', Form1.Width); WriteInteger('Height', Form1.Height); case WindowState of wsMaximized: WriteInteger('State', 1); wsMinimized: WriteInteger('State', 2); wsNormal : WriteInteger('State', 3); end; end else MessageDlg('Registry reading error', mtError, [mbOk], 0); CloseKey; end; end; procedure TForm1.FormCreate(Sender: TObject); begin with TRegistry.Create do begin RootKey:=HKEY_LOCAL_MACHINE; if OpenKey('Greatis Software\Example\Form', False) then try Form1.Left:=ReadInteger('Left'); Form1.Top:=ReadInteger('Top'); Form1.Width:=ReadInteger('Width'); Form1.Height:=ReadInteger('Height'); case ReadInteger('State') of 1: Form1.WindowState:=wsMaximized; 2: Form1.WindowState:=wsMinimized; 3: Form1.WindowState:=wsNormal; end; except MessageDlg('Can not go to handle', mtError, [mbOk], 0); end else MessageDlg('Registry reading error', mtError, [mbOk], 0); CloseKey; end; end;