PDA

Ver la Versión Completa : Focus


Huer
30-05-2003, 00:02:28
Hola amigos de delphi, gracias a sus consejos he superado etapas.

mi dificultad es la siguiente:

tengo un servidor SQL 2000 y del terminal la conexión la realizo a través de ODBC. y funciona bien, pero la dificultad esta cuando voy a grabar me indica el siguiente error:

no puede enfocar ventanas lisiadas o invisibles.

cannot focus a disabled or invisible windows.


no puedo solucionar este error, o sera que las instrucciones han cambiado


begin
try
if dm.md_publica.GotoKey then
dm.md_publica.IndexFieldNames:='ppn';
dm.md_publica.SetKey;
except
on e:econverterror do
messagedlg(';!Propuesta ya ingresada!;',mtconfirmation,[mbok],0);
end;
if (length(pp.text)=0) then;
messagedlg(';!Campos en Blancos!;',mtconfirmation,[mbok],0);
begin
dm.md_publica.Open;
dm.md_publica.Insert;
dm.md_publicaPPN.AsInteger:=strtoint(pp.Text);
dm.md_publicaDETALLE.AsString:=dt.Text;
dm.md_publicaFECHA.AsDateTime:=fetop2.Date;
dm.md_publicaFECHAV.AsDateTime:=fetop3.Date;
dm.md_publicaDOC.AsString:=doc.Text;
dm.md_publicaCONCEPTO.AsString:=con.Text;
dm.md_publicaAVISO.AsInteger:=strtoint(avi.Text);
dm.md_publica.Post;
dm.md_publica.Refresh;
end

delphi.com.ar
30-05-2003, 00:13:45
Ese problema sucede cuando haces un SetFocus a un componente que esta deshabilitado o invisible, o que esta sobre una ventana / contenedor en ese estado.
Es un error muy común hacer un SetFocus en el create de un form, y como el form aún no se encuentra visible produce este error, una solución sencilla para esto es hacer lo siguiente:


procedure TForm1.FormCreate(Sender: TObject);
begin
ActiveControl := Edit1;
end;


o hacerlo en el Load, o preguntar por CanFocus....

A simple vista el código que pasaste no produciría directamente ese error, aunque puede ser disparado desde algún evento en particular, como los eventos del dm.md_publica

PD:
Me gusta mas pensar que Disabled es desactivado / deshabilitado y no lisiado :D

Saludos!

Alejandrina
04-05-2007, 17:14:12
Hola,
Tengo el mismo problema donde tengo que.
procedure TFrmIngresoSolicitud.BTNuevaSolicitudClick(Sender: TObject);
begin
DBLMolde.KeyValue := Null;
DBLMaquinas.KeyValue := Null;
DBEDescripcionMaquina.text:='';
DBLArea.KeyValue := Null;
DBeArea.text := '';
Descripcion.text:='';
DBEDescripcionMolde.text:='';
DBLMaquinas.KeyValue := Null;
Descripcion.text:='';
DBLCIndicador.KeyValue:=Null;
DBEdCodigoIndicador.Text:='';
ingresars := true;
DmSip.TblSolicitud.Insert;
edsolicitud.SetFocus;
DBLCIndicador.visible:=true;
DBEdCodMolde.Visible:=false;
BTNuevaSolicitud.Enabled:=false;
end;

luego lo deshabilito para que el usuario no repita la acción mientras esta rellenando los campos...intento solucionarlo de la forma anterior pero no me funciona...que mas puedo hacer?

Gracias...

juanlaplata
04-05-2007, 17:31:36
edsolicitud.SetFocus;
verifica esta componente. Como dice delphi.com.ar
"hacer un SetFocus a un componente que esta deshabilitado o invisible"
da ese tipo de error.

karlaoax
04-05-2007, 20:07:50
Estoy segura que debe haber un campo oculto por eso marca el error indicado........:)

Alejandrina
04-05-2007, 23:43:09
Hola,
Gracias por sus sugerencias pero recibo mas ya que aun me sale el mismo error....:confused:

delphi.com.ar
05-05-2007, 18:16:20
...o preguntar por CanFocus....
Algo simplemente como eso:
if AControl.CanFocus then
AControl.SetFocus;

Saludos!