In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Pierdo el Control del Foco

Foro público de Xailer en español
Responder
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Pierdo el Control del Foco

Mensaje por Xevi »

Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a .F.,
otros con lVisible a .T. y otros a .F.
Bien, pues en alguna parte del programa llego a perder el "Foco" de la
aplicación y no se que control tiene el Foco.
Tiene que ser un control lVisible a .F., pues de TODOS los visibles ninguno
tiene el control.
Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
Alguna función me devuelve el control que actualmente tiene el foco????
algo así como
oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
para que me muestre en la barra de la ventana a tiempo real el control que
tiene el Foco
Gracias,
Un Saludo,
Xevi.
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Pierdo el Control del Foco

Mensaje por Xevi »

Por lo visto debo de hacerlo con FormChangeFocus...
METHOD FormChangeFocus( oSender, oPrevCtl, oNextCtl ) CLASS TFrmORAlbarans
::cText := oNextCtl:cVarName
RETURN Nil
Pero me lanza error de ejecución
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
> .F., otros con lVisible a .T. y otros a .F.
>
> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
> aplicación y no se que control tiene el Foco.
> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
> ninguno tiene el control.
>
> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>
> Alguna función me devuelve el control que actualmente tiene el foco????
>
> algo así como
> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>
> para que me muestre en la barra de la ventana a tiempo real el control que
> tiene el Foco
>
> Gracias,
>
> Un Saludo,
> Xevi.
>
>
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Pierdo el Control del Foco

Mensaje por Xevi »

Reporte del Error
***************************** Registro de errores
*****************************
Fecha: 27/09/2006
Hora: 15:49:39
Memoria libre: 646872
Area actual: 3
------------------------- Información del
compilador --------------------------
Versión Xailer: Xailer 1.0.2 Version 1.0b
Compilador: xHarbour build 0.99.61 Intl. (SimpLex) PCode Version: 7
Compilador C/C++: Borland C++ 5.5.1
Plataforma: Windows XP Home Edition 5.01.2600 Service Pack 2
----------------------- Información detallada del
error -----------------------
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Message not found
Operación: TARRAYBROWSE:CVARNAME
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TFRMORALBARANS:FORMCHANGEFOCUS (2790)
TFRMORALBARANS:ONCHANGEFOCUS (0)
TCONTROL:WMSETFOCUS (859)
TSTDCONTROL:WMSETFOCUS (142)
TWINCONTROL:WMSETFOCUS (220)
(b)XBROWSE:XBROWSE (252)
TARRAYBROWSE:WMSETFOCUS (0)
SETFOCUS (0)
TARRAYBROWSE:SETFOCUS (840)
TFOLDERPAGE:GOFIRSTCONTROL (200)
TFOLDERPAGE:WMSETFOCUS (212)
SETFOCUS (0)
TFOLDERPAGE:SETFOCUS (840)
TFOLDER:CHANGETAB (103)
TFOLDER:_NINDEX (340)
TFRMORALBARANS:FORMINITIALIZE (433)
TFRMORALBARANS:ONINITIALIZE (0)
TFRMORALBARANS:NEW (185)
XFRMORALBARANS (45)
(b)TFRMMENU:FORMINITIALIZE (142)
TMENUITEM:ONCLICK (0)
TMENU:DOACTION (213)
TMENU:DOACTION (218)
TFRMMENU:WMCOMMAND (866)
RUNFORM (0)
TAPPLICATION:RUN (193)
MAIN (24)
------------------ Información detallada de áreas de
trabajo ------------------
Area: 1
Alias: LINIESORALBARANS1
Registro: 31
Filtro:
Relación:
Orden del índice: 1
Clave activa: 1
Area: 2
Alias: INCIDENTSORALBARANS1
Registro: 1
Filtro:
Relación:
Orden del índice: 6
Clave activa: 6
Area: 3
Alias: ALBAR
Registro: 305
Filtro:
Relación:
Orden del índice: 19
Clave activa: 19
"Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
451a8069$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Por lo visto debo de hacerlo con FormChangeFocus...
>
> METHOD FormChangeFocus( oSender, oPrevCtl, oNextCtl ) CLASS TFrmORAlbarans
> ::cText := oNextCtl:cVarName
> RETURN Nil
>
>
> Pero me lanza error de ejecución
>
> Gracias.
>
>
> Un Saludo,
> Xevi.
>
>
>
>
> "Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
> 451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
>> .F., otros con lVisible a .T. y otros a .F.
>>
>> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
>> aplicación y no se que control tiene el Foco.
>> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
>> ninguno tiene el control.
>>
>> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>>
>> Alguna función me devuelve el control que actualmente tiene el foco????
>>
>> algo así como
>> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>>
>> para que me muestre en la barra de la ventana a tiempo real el control
>> que tiene el Foco
>>
>> Gracias,
>>
>> Un Saludo,
>> Xevi.
>>
>>
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Pierdo el Control del Foco

Mensaje por jose.luis »

Hola Xevi,
Creo que no me equivoco si te digo que si un control tiene lVisible := .F.
no toma el foco.
Entonces el foco debe tenerlo algún control 'no visible' pero sí con
lVisible := .T.
Puede ser cualquier control que tenga la propiedad lTabStop := .T. (y
obviamente lVisible := .T.). A veces me he encontrado con casos en los que
el foco lo tenía algún control de los que no cogen foco (tipo optionlist,
buttonbar, etc). Pero han sido casos excepcionales y por confusiones mías.
Tambien me he encontrado con situaciones en las que desde un formulario abro
otro formulario pero el oparent es un tercer formulario. En esa situación,
al cerrar el formulario, el foco no va al formulario llamante sino al padre
(uff que lío) pero el formulario visible (y con la barra azul del caption)
es el llamante.
Puedes consultar en todo momento cual control es el activo con la propiedad
del formulario activecontrol.
Saludos,
José Luis Capel
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
> .F., otros con lVisible a .T. y otros a .F.
>
> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
> aplicación y no se que control tiene el Foco.
> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
> ninguno tiene el control.
>
> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>
> Alguna función me devuelve el control que actualmente tiene el foco????
>
> algo así como
> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>
> para que me muestre en la barra de la ventana a tiempo real el control que
> tiene el Foco
>
> Gracias,
>
> Un Saludo,
> Xevi.
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Pierdo el Control del Foco

Mensaje por jose.luis »

Ups,
Donde dice...
>
> Puedes consultar en todo momento cual control es el activo con la
> propiedad del formulario activecontrol.
>
Es...
>
> Puedes consultar en todo momento cual control es el activo con la
> propiedad del formulario oactivecontrol.
>
Saludos,
José Luis Capel
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9463
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Pierdo el Control del Foco

Mensaje por ignacio »

Xevi,
La propiedad cVarName no existe en tiempo de ejeución. Sólo en el IDE.
Saludos
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:[email=451a81a7@news.xailer.com...]451a81a7@news.xailer.com...[/email]
> Reporte del Error
>
>
> ***************************** Registro de errores
> *****************************
>
> Fecha: 27/09/2006
> Hora: 15:49:39
> Memoria libre: 646872
> Area actual: 3
>
> ------------------------- Información del
> compilador --------------------------
>
> Versión Xailer: Xailer 1.0.2 Version 1.0b
> Compilador: xHarbour build 0.99.61 Intl. (SimpLex) PCode Version: 7
> Compilador C/C++: Borland C++ 5.5.1
> Plataforma: Windows XP Home Edition 5.01.2600 Service Pack 2
>
> ----------------------- Información detallada del
> error -----------------------
>
> Subsistema: BASE
> Código de error: 1004
> Estado: .F.
> Descripción: Message not found
> Operación: TARRAYBROWSE:CVARNAME
> Argumentos:
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TFRMORALBARANS:FORMCHANGEFOCUS (2790)
> TFRMORALBARANS:ONCHANGEFOCUS (0)
> TCONTROL:WMSETFOCUS (859)
> TSTDCONTROL:WMSETFOCUS (142)
> TWINCONTROL:WMSETFOCUS (220)
> (b)XBROWSE:XBROWSE (252)
> TARRAYBROWSE:WMSETFOCUS (0)
> SETFOCUS (0)
> TARRAYBROWSE:SETFOCUS (840)
> TFOLDERPAGE:GOFIRSTCONTROL (200)
> TFOLDERPAGE:WMSETFOCUS (212)
> SETFOCUS (0)
> TFOLDERPAGE:SETFOCUS (840)
> TFOLDER:CHANGETAB (103)
> TFOLDER:_NINDEX (340)
> TFRMORALBARANS:FORMINITIALIZE (433)
> TFRMORALBARANS:ONINITIALIZE (0)
> TFRMORALBARANS:NEW (185)
> XFRMORALBARANS (45)
> (b)TFRMMENU:FORMINITIALIZE (142)
> TMENUITEM:ONCLICK (0)
> TMENU:DOACTION (213)
> TMENU:DOACTION (218)
> TFRMMENU:WMCOMMAND (866)
> RUNFORM (0)
> TAPPLICATION:RUN (193)
> MAIN (24)
>
> ------------------ Información detallada de áreas de
> trabajo ------------------
>
> Area: 1
> Alias: LINIESORALBARANS1
> Registro: 31
> Filtro:
> Relación:
> Orden del índice: 1
> Clave activa: 1
>
> Area: 2
> Alias: INCIDENTSORALBARANS1
> Registro: 1
> Filtro:
> Relación:
> Orden del índice: 6
> Clave activa: 6
>
> Area: 3
> Alias: ALBAR
> Registro: 305
> Filtro:
> Relación:
> Orden del índice: 19
> Clave activa: 19
>
>
>
>
> "Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
> 451a8069$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Por lo visto debo de hacerlo con FormChangeFocus...
>>
>> METHOD FormChangeFocus( oSender, oPrevCtl, oNextCtl ) CLASS
>> TFrmORAlbarans
>> ::cText := oNextCtl:cVarName
>> RETURN Nil
>>
>>
>> Pero me lanza error de ejecución
>>
>> Gracias.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>>
>>
>> "Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
>> 451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
>>> .F., otros con lVisible a .T. y otros a .F.
>>>
>>> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
>>> aplicación y no se que control tiene el Foco.
>>> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
>>> ninguno tiene el control.
>>>
>>> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no
>>> ???
>>>
>>> Alguna función me devuelve el control que actualmente tiene el foco????
>>>
>>> algo así como
>>> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>>>
>>> para que me muestre en la barra de la ventana a tiempo real el control
>>> que tiene el Foco
>>>
>>> Gracias,
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9463
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Pierdo el Control del Foco

Mensaje por ignacio »

Xevi,
oForm:oActiveControl
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
> .F., otros con lVisible a .T. y otros a .F.
>
> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
> aplicación y no se que control tiene el Foco.
> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
> ninguno tiene el control.
>
> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>
> Alguna función me devuelve el control que actualmente tiene el foco????
>
> algo así como
> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>
> para que me muestre en la barra de la ventana a tiempo real el control que
> tiene el Foco
>
> Gracias,
>
> Un Saludo,
> Xevi.
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Pierdo el Control del Foco

Mensaje por Xevi »

Bien, gracias por las respuestas.
Por lo visto todavía tengo mal entendida la programación con objetos.
No me aclaro mucho en cuando se debe forzar la destrucción de objetos de un
Form, por lo que de ahí esta pérdida del foco en un Form.
Ya lo he localizado, y se trata de un TEdit que creo en tiempo de ejecución,
en un método de la clase de un Browse y que no lo destruía.
Necesitaríamos de un inspector de objetos que en ejecución pudiésemos saber
qué oBjetos hemos olvidado destruir o mas bien dicho, que objetos estan
vivitos y coleando.
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
> .F., otros con lVisible a .T. y otros a .F.
>
> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
> aplicación y no se que control tiene el Foco.
> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
> ninguno tiene el control.
>
> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>
> Alguna función me devuelve el control que actualmente tiene el foco????
>
> algo así como
> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>
> para que me muestre en la barra de la ventana a tiempo real el control que
> tiene el Foco
>
> Gracias,
>
> Un Saludo,
> Xevi.
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Pierdo el Control del Foco

Mensaje por jose.luis »

Xevi,
>
> Necesitaríamos de un inspector de objetos que en ejecución pudiésemos
saber
> qué oBjetos hemos olvidado destruir o mas bien dicho, que objetos estan
> vivitos y coleando.
>
Los objetos de Xailer que son controles se destruyen con el método ::End().
No obstante eso no es cierto del todo :-)
Un objecto de xHarbour no se destruye hasta que pierde ámbito o lo igualamos
a NIL (por ejemplo).
Un control de Windows de Xailer se puede destruir con ::End(). Esto
destruye el control windows, pero no el objeto xHarbour.
Saludos,
José Luis Capel
PD: espero no haberme equivocado ;-))))))
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9463
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Pierdo el Control del Foco

Mensaje por ignacio »

Xevi,
> Necesitaríamos de un inspector de objetos que en ejecución pudiésemos
> saber qué oBjetos hemos olvidado destruir o mas bien dicho, que objetos
> estan vivitos y coleando.
Ya existe un inspector de objetos en el depurador. No obstante si tu creas
un control y pierdes cualquier referencia al mismo el objeto de
xHarbour|Xailer se elimina, sin embargo, el control nativo de Windows sigue
ahí, vivito y coleando, por lo tanto necesitarias que la herramienta la
tuviese el propio Windows, y existe, se llama WinSpy, pero dudo que te
merezca la pena usarla para esto.
Yo simplemente te recomiendo que seas más cuidadoso con cualquier tipo de
control que crees tu a mano, digase TEdits, TPictures, TFonts, etcetera.
Xailer es capaz de eliminar todos los controles que dependan de un
formulario contenedor, pero cuando no es así, como por ejemplo, en la
creación de un Font para utilizar en un determinado listado, es
responsabilidad del programador eliminarlo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:451abe54$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Bien, gracias por las respuestas.
>
> Por lo visto todavía tengo mal entendida la programación con objetos.
> No me aclaro mucho en cuando se debe forzar la destrucción de objetos de
> un Form, por lo que de ahí esta pérdida del foco en un Form.
> Ya lo he localizado, y se trata de un TEdit que creo en tiempo de
> ejecución, en un método de la clase de un Browse y que no lo destruía.
>
> Necesitaríamos de un inspector de objetos que en ejecución pudiésemos
> saber qué oBjetos hemos olvidado destruir o mas bien dicho, que objetos
> estan vivitos y coleando.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <xevicomas@gmail.com> ha escrit al missatge del grup de discussió:
> 451a7ceb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Tengo un Form con bastantes controles, unos con lEnabled a .T. otros a
>> .F., otros con lVisible a .T. y otros a .F.
>>
>> Bien, pues en alguna parte del programa llego a perder el "Foco" de la
>> aplicación y no se que control tiene el Foco.
>> Tiene que ser un control lVisible a .F., pues de TODOS los visibles
>> ninguno tiene el control.
>>
>> Cuando un Objeto está a lVisible .F. ¿no debería de coger el foco, no ???
>>
>> Alguna función me devuelve el control que actualmente tiene el foco????
>>
>> algo así como
>> oForm:OnChangeFoco := {|| oForm:cText := oControlConFoco }
>>
>> para que me muestre en la barra de la ventana a tiempo real el control
>> que tiene el Foco
>>
>> Gracias,
>>
>> Un Saludo,
>> Xevi.
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Pierdo el Control del Foco

Mensaje por jfgimenez »

Xevi,
> Por lo visto todavía tengo mal entendida la programación con objetos.
> No me aclaro mucho en cuando se debe forzar la destrucción de objetos de
> un Form, por lo que de ahí esta pérdida del foco en un Form.
> Ya lo he localizado, y se trata de un TEdit que creo en tiempo de
> ejecución, en un método de la clase de un Browse y que no lo destruía.
>
> Necesitaríamos de un inspector de objetos que en ejecución pudiésemos
> saber qué oBjetos hemos olvidado destruir o mas bien dicho, que objetos
> estan vivitos y coleando.
Como bien te ha dicho Ignacio, si creas un control y eliminas cualquier
referencia a él, el objeto se destruirá, pero el control de windows seguirá
estando. No obstante, cuando se destruye el formulario también se destruyen
todos los controles que contenga, tanto si están representados por un objeto
a nivel de Xailer como si no.
En tu caso parece que no estabas cerrando el formulario, y claro, como el
control sí existía windows le pasa el foco, pero al no tener el objeto a
nivel Xailer, Xailer no se puede enterar.
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder