PDA

Ver la Versión Completa : Clic a un tbutton y que no se quede el foco


niñotaliban
17-11-2005, 20:57:03
Seguramente debe ser muy fácil, pero no lo consigo. He probado jugando con las propiedades: tabstop, taborder, setfocus. Esta última cuando quiero fijar el foco en un objeto, al compilar me dice "Cannot focus a disabled or invisible window"... (esto último me tiene un poco mosca) y bueno es verdad que tengo algun panel desactivado y algún otro invisible, pero lo he probado con todo activado y visible y sigue con el dichoso error.

Si alguien me puede guiar para seguir investigando y probando se lo agradezco.

Gracias.

vtdeleon
17-11-2005, 21:11:23
Saludos

Utiliza el componetne SpeedButton en la paleta Additional, este no toma el foco :)

dec
17-11-2005, 21:12:07
Hola,

¿Pero el "foco" tendrá que estar en algún sitio no? A mí se me ocurre -independientemente de que no vea del todo claro para qué perseguir algo así- aprovechar el evento "OnClick" del botón para darle en ese momento el foco a otro componente. Debería funcionarte. No me importaría conocer el motivo que te lleve a obrar de ese modo. Por otro lado el efecto que se aprecia haciendo lo que te digo no me convence tampoco: el botón obtiene, efectivamente, el foco, y esto se aprecia, pero, automáticamente, el foco pasa a otro componente... ¡menudo lío! ¿A ti qué te parece? ;)

Se me ocurre que lo que quieras es que, sin más, el botón no tome el "foco" de ninguna de las maneras... si es así tal vez podría hacerse de otras maneras, pero, se me ocurre a bote pronto que simules un botón con un "TPanel", ya que este (si no me confundo) no toma el "foco" del usuario. ;)

lucasarts_18
17-11-2005, 21:13:23
bueno es verdad que tengo algun panel desactivado y algún otro invisible, pero lo he probado con todo activado y visible y sigue con el dichoso error.

Estás seguro de eso, revisa bien las propiedades...

Hasta Luego -

dec
17-11-2005, 21:13:40
Hola,



Utiliza el componetne SpeedButton en la paleta Additional, este no toma el foco :)

A ver, David, repite conmigo, otra solución estriba en utilizar el componente "TSpeedButton", de la paleta "Additional", otra solución estriba en utilizar el componente "TSpeedButton", de la paleta "Additional"... gracias Troy. ;)

roman
17-11-2005, 21:15:49
gracias Troy

¿Qué no es Troi?

// Saludos

dec
17-11-2005, 21:20:02
Hola,



¿Qué no es Troi?

¡Que lo aclare Tro... de una vez por todas! :D

vtdeleon
17-11-2005, 21:20:34
Saludos
¿Qué no es Troi?Es que él le dá un poco de estilol :D:D:D

vtdeleon
17-11-2005, 21:21:14
Saludos
¡Que lo aclare Tro... de una vez por todas! :D
La firma lo dice todo:)

niñotaliban
17-11-2005, 21:29:05
que burro!! no he caído en el speedbutton!. Esque a veces te ciegas en algo y no ves lo de alrededor. Bueno esto me quita el problema que planteaba. pero...

¿y si no quisiera ver el foco por ninguna parte, o bien dejarlo en algún sitio y que no se mueva? ¿tengo que poner los taborder a 0 y los tabstop a false, a todo lo demas?

Lo siento si parece una chorrada lo que persigo, pero biene a ser que no quiero foco en mi formulario, y si tiene que estar, que no se mueva. cosa que con el setfocus no me está tragando, pero estoy revisando los paneles como me aconsejó lucasarts_18.

Muchas gracias por las respuestas. me he quedado sorprendido de la rapidez y la atención.

dec
17-11-2005, 21:50:32
Hola,



La firma lo dice todo:)

Joroba, pues es verdad, si es un león, como suele decirse, me hace pedazos. ;)



¿y si no quisiera ver el foco por ninguna parte, o bien dejarlo en algún sitio y que no se mueva? ¿tengo que poner los taborder a 0 y los tabstop a false, a todo lo demas?

Es que creo que no tiene que ver, por ejemplo, la propiedad "TabOrder" con que el control en cuestión no pueda tomar el "foco" del usuario. Sirve, claro está, para cuando uno recorre los controles del formulario con el teclado, utilizando, precisamente, la tecla "Tabulador". Sin embargo, si el usuario quiere situar el foco en un control bastaría conque utilizase el ratón para ello. Con la propiedad "TabStop" ocurre un poco lo mismo.

Lo que me parece un tanto ilógico es lo siguiente: los controles no solamente pueden tomar el foco, sino que deben hacerlo, porque el usuario tenga conocimiento de en qué control se encuentra el foco, valga la redundancia, si vale. Quiero decir que a bote pronto se me ocurre que un formulario en el que no pudiera estar el foco en otro sitio que en el propio formulario sería un formulario... sin controles.

Otra cosa sería "ocultar el cursor" de un "TEdit", por ejemplo, de manera que, aun teniendo el foco dicho "TEdit" no se viera el cursor, que es, precisamente, lo que señala que ese "TEdit" en concreto tiene el foco del usuario (¿Será electricista el usuario y se dedicará a ir poniendo focos en escenarios de fiestas, comuniones y bautizos?) en ese momento.

Esta última cuestión se ha tocado hoy mismo en estos Foros. Quizá te diera alguna idea el Hilo (http://www.clubdelphi.com/foros/showthread.php?t=27325) en que se llevó a cabo. ;)

ContraVeneno
17-11-2005, 22:30:12
La verdad a mi me intriga demasiado el saber porque no quieres que se vea el foco en tu formulario.
¿Puedo preguntar proqué no quieres ver el foco en el formulario?
Tal vez a alguien se le ocurra la forma de hacerlos si nos explicas proque no quieres ver el foco en el formulario.:confused::confused:

niñotaliban
17-11-2005, 23:06:43
es una mera cuestión estética, no quiero que se vea el foco en ningun lugar (salvo en el edit si hace falta. y lo de ocultar el cursor es genial, ya lo leí buscando información antes de postear).

Os habeis fijado en la calculadora de windows? el foco no se ve por ningún lugar, tan simple y tan bien hecha, es genial.

Aunque como dice dec talvez si que se le puede llamar formulario sin controles, o descontrolado :cool:

niñotaliban
17-11-2005, 23:28:54
y poque demonios no puedo hacer un setfocus teniendo un panel desactivado (no al que le doy el focus)?? o invisible.:confused:

ContraVeneno
17-11-2005, 23:54:32
El punto es:
No existe ninguna razón lógica para ponerle el foco a un control que esta desactivado o invisible.

supongo que por eso no puedes ponerle el foco a un control que esta desactivado o invisible.

Revisa muy bien las propiedades del control cuando le pasas el foco, ya que si el control esta activado y visible, no debe tener ningún problema en recibir el foco. Toma en cuenta que si desactivas un Group Panel, ningúno de los controles contenidos en el mismo podrán recibir el foco.

niñotaliban
18-11-2005, 00:25:52
Revisando me he dado cuenta que deshabilitaba un panel por codigo y luego intentaba pasar el foco a un elemento dentro de este.

Pero ahora lo que no entiendo es porqué me dice "cannot focus a disabled or invisible window" si ago lo siguiente. (y no hay nada más, un form, un edit, y el procedure de aquí abajo):
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.setfocus;
end;

:confused: :confused: :confused:
En cambio si quito el formcreate y pongo porejemplo un botón que me asigna el foco al edit cuando clico, logicamente no me da el error.(pero el edit y el form son los mismos)
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.setfocus;
end;

Claro que alomejor es que en el formcreate aún no se ha creado el edit y claro, ¿a quien le va a enviar el foco?:rolleyes:

:confused: :confused: :confused:.... Creo que me quedan muchas horas de delphi por delante jejeje

vtdeleon
18-11-2005, 01:39:16
Pues asi como dices. Cuando intentas asignar el foco, todavia el edit no esta creado, ponlo en otro evento(OnShow o OnActive), o mejor aun pon su propieda TabOrder en 0 y evitas poner codigo

Saludos

dec
18-11-2005, 05:15:44
Hola,



(...) mejor aun pon su propieda TabOrder en 0 y evitas poner codigo (...)

También podría utilizar la propiedad "ActiveControl" del formulario. Aquí un extracto de la descripción de dicha propiedad:



If the form does not have focus, ActiveControl is the control on the form that will receive focus when the form receives focus.

Es posible que dicha propiedad "ActiveControl" esté en el "inspector de objetos" (sea published) con el fin de asignar un control en tiempo de diseño: dicho control tomará el foco según lo tome el formulario que lo contenga, o sea, según se muestre un determinado formulario.

Lepe
18-11-2005, 12:10:03
Pues asi como dices. Cuando intentas asignar el foco, todavia el edit no esta creado, ponlo en otro evento(OnShow o OnActive), o mejor aun pon su propieda TabOrder en 0 y evitas poner codigo


A mi ya me "reprendieron" en un hilo por hacer la misma afirmación, así que ahora me toca a mí hacer la .... la ... ¿reprensión? :D

En realidad cuando llega el evento OnCreate, todos los componentes de la ventana si están creados, de hecho, puedes usar Edit1.Text := 'bla bla'.

El Edit, como su Form, están ocultos, (invisibles), de ahí el mensaje.

saludos

vtdeleon
18-11-2005, 12:40:04
SaludosA mi ya me "reprendieron" en un hilo por hacer la misma afirmación, así que ahora me toca a mí hacer la .... la ... ¿reprensión? :D
:eek:Te vengaste :eek: , eeeh :D :D

Ok, es verdad lo que dices!, Gracias por la correccion

roman
18-11-2005, 17:21:01
En realidad cuando llega el evento OnCreate, todos los componentes de la ventana si están creados, de hecho, puedes usar Edit1.Text := 'bla bla'.



Ok, es verdad lo que dices!, Gracias por la correccion


Pero tomen en cuenta esto (http://www.clubdelphi.com/foros/showpost.php?p=90544&postcount=11).

// Saludos

Lepe
18-11-2005, 19:02:19
Pero tomen en cuenta esto (http://www.clubdelphi.com/foros/showpost.php?p=90544&postcount=11).

// Saludos

...Roman me tenía que dar la puntillita.... :D :D

saludos

yusnerqui
18-11-2005, 19:45:11
Bueno pues aqui se cumple aquello de que "Todos los dias se aprende algo nuevo":D :D :D

Saludos.