PDA

Ver la Versión Completa : Efecto button pulsado


mizzard
14-12-2011, 21:52:15
Hola, utilizo el componente TButton y me gustaria saber si se puede hacer que cuando haga un simple clic, permanezca pulsado y que cuando pulse en otro boton, aparezca pulsado el nuevo y el anterior no

¿Sabeis como se puede hacer esto?

Muchas gracias y un saludo!

ecfisa
14-12-2011, 23:48:03
Hola, utilizo el componente TButton y me gustaria saber si se puede hacer que cuando haga un simple clic, permanezca pulsado y que cuando pulse en otro boton, aparezca pulsado el nuevo y el anterior no
¿Sabeis como se puede hacer esto?

Hasta donde sé con TButton no es posible. Pero sí usando TSpeedButton y poniendo a todos los que desees en el mismo grupo, mediante la propiedad GroupIndex.

Sólo uno de los que tengan el mismo valor en la propiedad GroupIndex quedará pulsado hasta que se haga click sobre otro del mismo grupo.

Saludos.

mizzard
16-12-2011, 16:17:11
mmmm, lo he probado y si que es lo que buscaba, pero... cachis... tambien necesitaria que tuviera las propiedades TabStop y TabOrder. Ya que uno de los objetivos es la agilidad en la manipulacion del programa usando teclado... :(

Caro
20-12-2011, 16:48:18
.. tambien necesitaria que tuviera las propiedades TabStop y TabOrder.

Hola mizzard, el TSpeedButton no tiene esas propiedades, para hacer lo que quieres también puedes utilizar Panels y sus propiedades BevelOuter y BevelInner, el codigo que haga lo que necesitas mas o menos sería así:

Dentro de un GroupBox o Panel, añades todos los panels que necesites y lo redimensionas del tamaño de tu botón.


//Variable global para guardar el ultimo Panel que ha sido presionado
Control : TPanel;

//En el evento OnEnter
procedure TForm1.Panel2Enter(Sender: TObject);
begin
if Assigned(Control) then
begin
Control.BevelOuter:=bvNone;
Control.BevelInner := bvRaised;
end;

TPanel(Sender).BevelInner := bvNone;
TPanel(Sender).BevelOuter:=bvLowered;
Control := TPanel(Sender);
end;

//En el evento OnMouseDown
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Assigned(Control) then
begin
Control.BevelOuter:=bvNone;
Control.BevelInner := bvRaised;
end;

TPanel(Sender).SetFocus;//aumentamos esta línea para que tome el foco
TPanel(Sender).BevelInner := bvNone;
TPanel(Sender).BevelOuter:=bvLowered;
Control := TPanel(Sender);
end;


Y debes hacer que todos tus panels apunten al mismo evento, en este caso a los eventos OnEnter y OnMouseDown.

Saluditos

mizzard
08-01-2012, 23:23:33
Perdon por la tardanza, gracias por la respuesta, en tener tiempo lo pruebo

Un abrazo!