Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2007
Avatar de Greco
Greco Greco is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 97
Poder: 17
Greco Va por buen camino
problema al registrar ubicacion de ventana...

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:
Código Delphi [-]
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:
Código Delphi [-]
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
__________________
Greco - Principiante
Responder Con Cita
  #2  
Antiguo 06-12-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola Greco

Yo haría esto....

Código Delphi [-]
 
try      
  Form1.Left:=Reg.ReadInteger('Left');
  Form1.Top:=Reg.ReadInteger('Top');
except
  Form1.Left := 300;
  Form1.Top := 100;
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 06-12-2007
Avatar de Greco
Greco Greco is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 97
Poder: 17
Greco Va por buen camino
Gracias EGOSTAR, te cuento, agregue el codigo que posteaste y funciona bien, con lo cual se soluciona el problema que tengo pero me ocurre algo extraño, si ejecuto el programa fuera de delphi, osea primero compilo (menu Project>>Compile Ctrl+F9) y luego voy a la carpeta donde queda el .exe, lo ejecuto y su funcionamiento es correcto pero si trato de hacerlo desde el mismo delphi (F9) me un cuadro con error:

Código Delphi [-]
Debugger Exception Notification
Project Player.exe raised exception class ERegistryException message 'Failed to get data for 'Left''. Process stopped. Use Step or Run to continue.

Despues de eso el programa funciona bien, si elimino los datos del registro.

Cosa curiosa, no se que pasará, como te dije antes, si abro el programa ejecutando directamente el .exe me funciona bien y toma los datos que le puse en:

Código Delphi [-]
...
except
  Form1.Left := 300;
  Form1.Top := 100;
end;
...
Bueno, gracias por la ayuda brindada, ahora si me funciona lo que deseaba hacer, ecepto por lo que comente arriba pero para el uso final no hay problemas.

Saludos
__________________
Greco - Principiante
Responder Con Cita
  #4  
Antiguo 07-12-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola Greco

Ese error es normal dentro del IDE de Delphi ya que efectivamente existe un error al tratar de obtener datos del registro que no existen, lo cual se genera en el except. Solo que en el ejecutable no te lo muestra.

Algo que me parece muy bueno cuando estas depurando el código.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 07-12-2007
Avatar de Greco
Greco Greco is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 97
Poder: 17
Greco Va por buen camino
Thumbs up

Cita:
Empezado por egostar Ver Mensaje
Hola Greco

Ese error es normal dentro del IDE de Delphi ya que efectivamente existe un error al tratar de obtener datos del registro que no existen, lo cual se genera en el except. Solo que en el ejecutable no te lo muestra.

Algo que me parece muy bueno cuando estas depurando el código.

Salud OS

Ok, ahora me queda mas clara la cosa, gracias por tu ayuda.
__________________
Greco - Principiante
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al querer registrar una Dll Luana API de Windows 6 26-03-2016 07:19:29
Problema ventana CPU Edgtho Varios 2 18-05-2007 13:15:07
problema con ventana Modal ingel Varios 2 19-12-2005 23:52:54
Cómo registrar paquetes para que aparezcan en la ventana de Inicio de Delphi 2005 Jesús Pena Varios 1 30-11-2005 06:43:47
Problema al cerrar una ventana noModal. Perenquen OOP 2 04-11-2004 14:35:43


La franja horaria es GMT +2. Ahora son las 04:17:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi