PDA

Ver la Versión Completa : Invisible Window (Programando con Delphi)


sizne
13-03-2010, 17:44:59
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 (http://www.clubdelphi.com/foros/showthread.php?t=10005) por el bien de todos.
Empecemos.
En tu primer trozo de código estás haciendo algo innecesario.
Me refiero a

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á

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í

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:

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!!! :)