Restore window to its last state

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;