Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Invisible Window (Programando con Delphi) (https://www.clubdelphi.com/foros/showthread.php?t=66822)

sizne 13-03-2010 17:44:59

Invisible Window (Programando con Delphi)
 
En este momento tengo otro percance.
Me aparece este msj.

Project Pbecarios.exe raised exception class EInvalidOperation with message 'Cannot focus a disabled or invisible window'. Process stopped. Use Step or Run to continue.

Cuando hago click en RUN (F9)aparece el sigte msj.

Cannot focus a disabled or invisible window


Me dice "Invisible window" No comprendo el problema.... por que causa y que es lo que debo hacer? Donde lo activo o lo habilito? POr que me aparece eso?

Gracias!

afunez2007 13-03-2010 18:08:15

Debes tener un formulario que tiene la propiedad visible=false, o algun componente como un edit o un boton que tiene la propiedad visible=false e intentas hacer un set focus de este mismo

Ve si por alli lo puedes encontrar

Saludos

BrunoBsso 13-03-2010 19:37:48

Puede ser lo que comenta el agmigo afunez2007 (en el diseño del form) y también puede ser que en el evento OnCreate del formulario estés poniendo en false la propiedad visible, o que en ese mismo evento uses el método Hide.
Fijate esas cosas.
Si vos querés que tu ventana sea invisible al momento de crearse, pone su propiedad AlphaBlend en TRUE y su propiedad AlphaBelndValue en 0 mientras lo estás diseñando.
Saludos.

sizne 13-03-2010 20:30:48

Me explico, tengo dos Form1 uno es Fprincipal del cual me dirijo a varios formularios. Al q me dirijo es Fregistro. Lo que realizo es lo sigte.
procedure TFprincipal.RegSolicitudClick(Sender: TObject);
begin
Fprincipal.Enabled:=false;
Fregistro.Show;
end;

Luego, estoy en Fregistro donde tengo los campos respectivos(cabe mencionar q los campos las extraje de una tabla q fueron realizadas en SQL Server 2000). En cuanto hago click en el boton "NUEVO", osea aumento un nuevo registro. Me aparece el sigte msj.

Project Pbecarios.exe raised exception class EvarianTypeCastError with message 'Could not convert variant of type (Null) into type ('Double')'. Process stopped. Use Step or Run to continue.
Cuando hago click en RUN o F9 aparece:
Could not convert variant type (Null) into type (Double).
Siendo el código el sigte:

procedure TFRegSolicitud.NuevoEClick(Sender: TObject);
var c:integer;
begin
with DataModule do
begin
if Tregistro.RecordCount=0 then
c:=1
else
c:=Tregistro.RecordCount+1;
end;
DM.Tregistro.Last;
DM.Tregistro.Insert;
DM.Tregistro['IdE']:=c;
DM.Tregistro['NumReg']:='EB-000'+IntToStr(c);
Edit1.Text:=' ';
end;


El campo IdE por si acaso es la llave tipo integer, NumReg tipo de dato string.Al regresa al Fprincipal coloco lo sigte:
procedure TFRegSolicitud.VolverEClick(Sender: TObject);
begin
Fprincipal.Show;
Fprincipal.Enabled:=true;
FregSolicitud.Close;
end;

Y la me fije si algun dato esta invisible del Form Registro y todos estan en true.
Gracias

BrunoBsso 13-03-2010 22:03:02

Hola.
Leete como usar etiquetas por el bien de todos.
Empecemos.
En tu primer trozo de código estás haciendo algo innecesario.
Me refiero a
Código Delphi [-]
procedure TFprincipal.RegSolicitudClick(Sender: TObject);
begin
  Fprincipal.Enabled:=false;
  Fregistro.Show;
end;
Mejor borrá esas 2 líneas y poné solamente FRegistro.ShowModal;
Sigamos.
En el evento OnCLick de NuevoE Esto es innecesario también, mirá
Código Delphi [-]
if Tregistro.RecordCount=0 then
  c:=1
else
  c:=Tregistro.RecordCount+1;
Te explico. Si RecordCount toma el valor 0, vos querés ponerle 1 ¿cierto? Bueno, ¿1 no es igual a RecordCount (que valdría 0) + 1?
Entonces, solamente dejá a c:=Tregistro.RecordCount+1 y listo.
En lo demás de ese evento, no veo error porque no conozco la tabla y no sé dónde te corta la ejecución con el error.

Por último, en el evento OnClick del botón VolverE no deberías hacer ese código.
Más simple, ponelo así
Código Delphi [-]
procedure TFRegSolicitud.VolverEClick(Sender: TObject);
begin
  Close;
end;
Yo necesitaría más datos de la tabla para encontrar el error. Pero seguramente los que manejan muy bien bases de datos te lo encuentren así nomás.
Saludos.

ecfisa 13-03-2010 23:03:13

Con respecto al primer error que mencionas "Cannot focus a disabled or invisible window" coincido con afunez. Estas dandole el foco a algun control no creado todavia ,o sea que casi con seguridad lo haces en el evento OnCreate de FRegistro. Empieza a revisar por allí.

Segundo punto; es buena norma no-auto crear los forms ya que aunque, la memoria es económica y de muchos Gb, no es ilimitada.
Desde la barra de menú del editor de delphi, realiza lo siguiente: Project -> Options y quita FRegistro de "auto-create forms", luego usa este código:
Código:

procedure TPrincipal.RegSolicitudClick(Sender: TObject);
begin
    with TRegistro.Create(Application) do
    try
      ShowModal;
    finally
      Free;
    end;
end;

Espero ayudarte en algo, sobre el error SQL server nunca lo he usado. Prueba un nuevo hilo en el foro SQL.

sizne 15-03-2010 21:12:22

Gracias amigos de ClubDelphi.

Estoy usando ShowModal y no tengo problemas.!

Gracias!!!1

BrunoBsso 15-03-2010 22:52:52

De nada ;)
Suerte en tu proyecto!!! :)


La franja horaria es GMT +2. Ahora son las 18:05:15.

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