Greco
06-12-2007, 22:35:29
Hola como estan,
Al programa que estoy haciendo lo quiero dar la posibilidad de recordar la posicion de la ventana principal para que cuando se vuelva a abrir /esta lo haga en la posicion que tenia cuando se cerro el programa anteriormente, para ellos estoy guardando la propiedad Form1.Left y Form1.Top.
Para guardar hago lo siguiente en el evento OnClose del form principal:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Reg: TRegistry;
begin
//Guardamos en el registro de windows la ubicacion de la ventana
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\abcde\', True) then
begin
Reg.WriteInteger('Left',Form1.Left);
Reg.WriteInteger('Top',Form1.Top);
Reg.CloseKey;
end;
finally
Reg.Free;
inherited;
end;
end;
y para rescatar esos datos lo hago en el evento OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
var
Reg: TRegistry;
begin
//Leemos del registro de windows la ubicacion de la ventana
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\abcde\', True) then
begin
Form1.Left:=Reg.ReadInteger('Left');
Form1.Top:=Reg.ReadInteger('Top');
Reg.CloseKey;
end;
finally
Reg.Free;
inherited;
end;
end;
Como fui probando de a poco, primero agregando el codigo que guarda los datos en el registro, probar, etc entonces cuando corría la aplicación me funcionaba bien por que los datos de posicion (left y top) ya estaban en el registro entonces solo se iba modificando, el problema ocurre cuando quiero correr la aplicacion por primera vez (por ejemplo en otro pc), al ejecutar el programa éste lee en el registro la posicion LEFT y TOP del Form1 pero como esta informacion aun no se crea me manda un error (FAILED TO GET DATA FOR 'LEFT') ya que no encuentra dichos datos.
Mi pregunta es, cual es la forma de tener algunos valores por defecto en caso de que la aplicacion se ejecute por primera vez, para las veces siguientes ya no ocurriría el problema por que el programa al cerrarse guarda la posicion actual.
Pense que podía ser algo parecido a como se hace con los .INI que se le especifica una valor en caso de que no haya nada pero no me funciona, talvez se hace de otra manera.
Espero algun comentario.
Saludos
Al programa que estoy haciendo lo quiero dar la posibilidad de recordar la posicion de la ventana principal para que cuando se vuelva a abrir /esta lo haga en la posicion que tenia cuando se cerro el programa anteriormente, para ellos estoy guardando la propiedad Form1.Left y Form1.Top.
Para guardar hago lo siguiente en el evento OnClose del form principal:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Reg: TRegistry;
begin
//Guardamos en el registro de windows la ubicacion de la ventana
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\abcde\', True) then
begin
Reg.WriteInteger('Left',Form1.Left);
Reg.WriteInteger('Top',Form1.Top);
Reg.CloseKey;
end;
finally
Reg.Free;
inherited;
end;
end;
y para rescatar esos datos lo hago en el evento OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
var
Reg: TRegistry;
begin
//Leemos del registro de windows la ubicacion de la ventana
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\abcde\', True) then
begin
Form1.Left:=Reg.ReadInteger('Left');
Form1.Top:=Reg.ReadInteger('Top');
Reg.CloseKey;
end;
finally
Reg.Free;
inherited;
end;
end;
Como fui probando de a poco, primero agregando el codigo que guarda los datos en el registro, probar, etc entonces cuando corría la aplicación me funcionaba bien por que los datos de posicion (left y top) ya estaban en el registro entonces solo se iba modificando, el problema ocurre cuando quiero correr la aplicacion por primera vez (por ejemplo en otro pc), al ejecutar el programa éste lee en el registro la posicion LEFT y TOP del Form1 pero como esta informacion aun no se crea me manda un error (FAILED TO GET DATA FOR 'LEFT') ya que no encuentra dichos datos.
Mi pregunta es, cual es la forma de tener algunos valores por defecto en caso de que la aplicacion se ejecute por primera vez, para las veces siguientes ya no ocurriría el problema por que el programa al cerrarse guarda la posicion actual.
Pense que podía ser algo parecido a como se hace con los .INI que se le especifica una valor en caso de que no haya nada pero no me funciona, talvez se hace de otra manera.
Espero algun comentario.
Saludos