Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Efecto button pulsado (https://www.clubdelphi.com/foros/showthread.php?t=77025)

mizzard 14-12-2011 21:52:15

Efecto button pulsado
 
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

Cita:

Empezado por mizzard (Mensaje 421164)
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

Cita:

Empezado por mizzard (Mensaje 421353)
.. 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.

Código Delphi [-]
//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!


La franja horaria es GMT +2. Ahora son las 12:41:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi