Guardar (y cargar) la posición, tamaño y estado del formulario
Artículo por Club Developers · 31 diciembre 2005
4696 vistas
Para realizar esta tarea de guardar (y cargar) la posición, tamaño y estado del formulario, nos vasaremos en el registro de Windows.
Veamos las dos funciones necesarias
Función de recuperación del estado
Función de grabación del estado
Ahora sólo nos quedará hacer la llamada respectiva en el OnCreate y en el OnDestroy del formulario
También podrÃa implementarse para que, en lugar de grabar en el registro de Windows, grabase la información en un fichero Ini.
Nota: añadir Registry en el uses del formulario
Veamos las dos funciones necesarias
Función de recuperación del estado
delphi
procedure RecallWin(Form:TForm); var  Registro: TRegistry; begin  Registro := TRegistry.Create;  Registro.OpenKey('\Software\' + ExtractFileName(Application.Exename) + '\WinPos', True);  if Registro.ValueExists(Form.Name) then  begin   if (Registro.ReadInteger(Form.Name + '_ScrWidth') = Screen.Width) or    (Registro.ReadInteger(Form.Name + '_ScrHeight') = Screen.Height) then   begin    case Registro.ReadInteger(Form.Name + '_WindowState') of     1: Form.WindowState := wsNormal;     2: Form.WindowState := wsMinimized;     3: Form.WindowState := wsMaximized;    end;    if Form.WindowState<>wsMaximized then    begin     Form.Top := Registro.ReadInteger(Form.Name + '_Top');     Form.Left := Registro.ReadInteger(Form.Name + '_Left');     Form.Width := Registro.ReadInteger(Form.Name + '_Width');     Form.Height := Registro.ReadInteger(Form.Name + '_Height');    end;   end;  end;  Registro.Free; end;
Función de grabación del estado
delphi
procedure MemoWin(Form:TForm); var  Registro: TRegistry; begin  Registro := TRegistry.Create;  Registro.OpenKey('\Software\ + ExtractFileName(Application.Exename) + \WinPos', True);  Registro.WriteInteger(Form.Name + '_ScrWidth', Screen.Width);  Registro.WriteInteger(Form.Name + '_ScrHeight', Screen.Height);  case Form.WindowState of   wsNormal: Registro.WriteInteger(Form.Name + '_WindowState', 1);   wsMinimized: Registro.WriteInteger(Form.Name + '_WindowState', 2);   wsMaximized: Registro.WriteInteger(Form.Name + '_WindowState', 3);  end;  Registro.WriteInteger(Form.Name + '_Width', Form.Width);  Registro.WriteInteger(Form.Name + '_Height', Form.Height);  Registro.WriteInteger(Form.Name + '_Left', Form.Left);  Registro.WriteInteger(Form.Name + '_Top', Form.Top);  Registro.WriteBool(Form.Name, True);  Registro.Free; end;
Ahora sólo nos quedará hacer la llamada respectiva en el OnCreate y en el OnDestroy del formulario
delphi
procedure TForm1.FormCreate(Sender: TObject); begin  RecallWin(Form1); end; procedure TForm1.FormDestroy(Sender: TObject); begin  MemoWin(Form1); end;
También podrÃa implementarse para que, en lugar de grabar en el registro de Windows, grabase la información en un fichero Ini.
Nota: añadir Registry en el uses del formulario