Guardar (y cargar) la posición, tamaño y estado del formulario
Artículo por Club Developers · 31 diciembre 2005
5556 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


