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 18-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb Mensaje de error al ejecutar el programa

hola, tengo problemas para ejecutar un programa, cuando lo quiero correr me sale este mensaje de error:


project proyecto1.exe raised exception class EInvalid Operation with message 'cannot focus a disabled or invisible window'. Process stopped.

El codigo del programa es este:

Código Delphi [-]
  
 unit programita1;
 interface
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;
 type
   TForm1 = class(TForm)
     Button1: TButton;
     Button2: TButton;
     Button3: TButton;
     Label1: TLabel;
     Label2: TLabel;
     Edit1: TEdit;
     ListBox1: TListBox;
     procedure FormCreate(Sender: TObject);
     procedure Button1Click(Sender: TObject);
     //procedure Button2Click(Sender: TObject);
     //procedure Button3Click(Sender: TObject);
     //procedure FormClose(Sender: TObject; var Action: TCloseAction);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 type
     TApunt=^TNodo;
     TNodo=record
                 Info: String;
                 Liga: TApunt;
              end;
  
 var
   Form1: TForm1;
   Inicio,Fin: TApunt;
 implementation
 {$R *.dfm}
 //AGREGAR ELEMENTO
 procedure Agregar(Elem: String);
 Var Aux: TApunt;
 begin
     Inicio:=Nil;
     New(Aux); 
     Aux^.Liga:=Nil; 
     Aux^.Info:=Elem; 
     if Inicio=Nil then Inicio:=Aux
       else Fin^.Liga:=Aux; 
     Fin:=Aux; 
 end;
  //ORDENAR ELEMENTO
 //procedure Ordenar;  {Ordenación por el método de Selección}
 {Var Mov,Posicion,Menor: TApunt;
       Aux: String; 
 begin 
    Mov:=Inicio; 
    if Inicio<>Fin then  {Esto garantiza que hay mas de un elemento}
     {repeat
         Posicion:=Mov; 
         Menor:=Mov; 
         repeat 
            if Posicion^.InfoMov then {Si es necesario el intercambio}
           {begin
              Aux:=Menor^.Info; 
              Menor^.Info:=Mov^.Info; 
              Mov^.Info:=Aux; 
           end; 
         Mov:=Mov^.Liga; 
     until Mov=Fin; 
 end; }
 //DESTRUIR ELEMENTO
  {procedure Destruir;
 begin 
 While Inicio<>Nil do 
    begin
       Fin:=Inicio^.Liga;
       dispose(Inicio);
       Inicio:=Fin;
    end; 
 end;}
 procedure TForm1.Button1Click(Sender: TObject);
 begin 
  if Edit1.Text<>' ' then {Garantiza que hay algo escrito}
   begin
     Agregar(Edit1.Text); 
     ListBox1.Items.Add(Edit1.Text);
      Edit1.Clear;
     //Edit1.SetFocus;
   end;
 end;
  
 
 {procedure TForm1.Button2Click(Sender: TObject);
 Var Aux: TApunt;
 begin 
  Ordenar;
  ListBox1.Clear;
  Aux:=Inicio;
  while Aux<>Nil do
   begin 
     ListBox1.Items.Add(Aux^.Info);
     Aux:=Aux^.Liga; 
   end;
 end; }
 
 {procedure TForm1.Button3Click(Sender: TObject);
 begin
  Close;
 end; }
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   ListBox1.Clear; 
   Edit1.Clear; 
   Edit1.SetFocus; 
 end;
  
 {procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
   Destruir; 
 end; }
 
 end.


No sé cual es el problema, me gustaria que me ayudaran

Muchas gracias

Última edición por marcoszorrilla fecha: 18-11-2004 a las 23:10:49. Razón: Añadir la etiqueta Delphi
Responder Con Cita
  #2  
Antiguo 18-11-2004
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Puede que sea dificil de descubrir el problema, como tambien puede que sea facil, en otras palabras...

Yo le apostaria a que es el Edit.SetFocus que tienes en el OnCreate de la forma, Incluso tambien podrian ser las otras dos lineas... No se pude garantizar que estos objetos esten creados cuando sea "Disparado" el evento OnCreate.


Una solución podria ser poner las 3 lineas el el evento OnShow.


Espero te sirva
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 18-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb ListBox1.Items.Add(Edit1.Text);

hola gracias por responder, efectivamente hace rato comenté las lineas de Edit1.SetFocus; y ya funcionó pero ahora quiero que lo que escriba en el edit se vea en el list box y eso es con esta linea :

ListBox1.Items.Add(Edit1.Text); pero nada, no se ve y en eso estoy ahorita, si me puedes ayudar te lo agradeceria mucho y si no, de todos modos gracias por el tiempo
Responder Con Cita
  #4  
Antiguo 19-11-2004
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Y donde tienes este codigo?
Código Delphi [-]
ListBox1.Items.Add(Edit1.Text);

Esque asi deberia funcionar pero deberia estar dentro de algun evento o algun otro metodo llamarlo o algo asi...
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 19-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb aqui esta el procedimiento

ah es que esta en el codigo grandote que esta en el primer mensaje, mira el procedimiento es este:


procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text<>' ' then {Garantiza que hay algo escrito}
begin
Agregar(Edit1.Text);
ListBox1.Items.Add(Edit1.Text); //esta es la linea
Edit1.Clear;
//Edit1.SetFocus;
end;
end;

y asi como esta no funciona, en el formulario esta un edit, un list box y tres botones, el usuario escribe algo en el edit y oprime el button1, entonces lo que escribio debe verse en el list box, ahora, no sé si debe referenciar algo en los eventos del list box o del edit del object inspector pero como que no se me hace, la verdad no se mucho de delphi ni de pascal... gracias
Responder Con Cita
  #6  
Antiguo 19-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb ya

hola, comenté estas lineas:

procedure TForm1.FormCreate(Sender: TObject);
begin
//ListBox1.Clear;
//Edit1.Clear;
//Edit1.SetFocus;
end;

ya se resolvio el problema pero no entiendo porqué... al comentar esas lineas lo que escribo en el edit ya se ve en el listbox...
Responder Con Cita
  #7  
Antiguo 19-11-2004
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
No son acaso esas las tres lineas que te recomende que quitaras en mi anterior Post?

Cita:
Empezado por Luli
ya se resolvio el problema pero no entiendo porqué...
Ni yo.
Cita:
Empezado por Luli
procedure TForm1.FormCreate(Sender: TObject);
begin
//ListBox1.Clear;
//Edit1.Clear;
//Edit1.SetFocus;
end;
Solo he escrito este Post para decirte que si lo que pretendes es que el primer foco lo tome el Edit1 Solo basta con que pongas Edit1 en la proiedad ActiveControl del Formulario.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 19-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonny
Solo he escrito este Post para decirte que si lo que pretendes es que el primer foco lo tome el Edit1 Solo basta con que pongas Edit1 en la proiedad ActiveControl del Formulario.
O bien colocarlo al principio del orden de tabulación. Salvo contadas excepciones, en mis formularios el ActiveControl es siempre el primero en la tabulación.

También hago la observación de que en principio, las sentencias ListBox1.Clear y Edit1.Clear son innecesarias en el evento OnCreate. La única forma de que tengan datos previos es que no hayan sido borrados durante el diseño.

Y para puntualizar un poco, respecto de este comentario

Cita:
Empezado por jhonny
No se pude garantizar que estos objetos esten creados cuando sea "Disparado" el evento OnCreate
de hecho sí se puede garantizar, al menos mientras la propiedad OldCreateOrder del formulario sea false (el valor por defecto).

Antiguamente (Delphi <= 3) el evento OnCreate se lanzaba desde el mismo constructor del formulario pero ahora se lanza desde el método AfterConstruction que se ejecuta una vez que se ha terminado completamente la construcción del formulario- y por tanto de todas sus subcomponentes.

Lo que sucedió en este caso, es que el formulario- si bien ya construído -aún no es visible y por ello, cambios de foco como Edit1.SetFocus deben hacerse en el evento OnShow que ocurre después de que el formulario se ha hecho visible.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 19:03:43.


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