Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2013
aitorqrv aitorqrv is offline
Miembro
 
Registrado: abr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
CheckBox con imagenes?

Hola a todos:

Estoy haciendo un progrma que que controla un rele que me enciende y me apaga una bonbilla. Mi problema es el siguiente, no quiero poner un componete tipo CheckBox por el tema estetico del programa, y en su lugar me gustaria poner una imagen de una bonbilla, que la cual me represente graficamente como esta mi bonbilla.

Para hacer esto he puesto una imagen dentro de un SpeedBottom y he utilizado el siguiente codigo:

Código Delphi [-]
procedure TForm1.led_2Click(Sender: TObject);
begin
    Case led_2.Enabled of
    true : led_2.Enabled := false;
    false : led_2.Enabled := true;
    //else ShowMessage('');
    end;

    label27.caption:= booltostr(led_2.Enabled);
end;

Pero, cuando pulso el boton por primera ved, la luz se enciende, lo buelbo a pulsar y se apaga, pero cundo lo pulso por tercera vez, la luz se queda constantemente encendida (siempre en true)?.



Yo quiero hacer algo que se parezca a esta imagen que me he encontrado por internet. Para cambiar el estado de las salidas, me gustaria que variase su estado al pulsar sobre los circulos que representan las salidas que me encienden o me apagan las bonbillas, sin tener que utilizar un checkbox.

Un saludo y muchas gracias por anticipado.
Responder Con Cita
  #2  
Antiguo 16-12-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Podrías poner un poco del código que utilizas?

Es que así a secas, nuestra "bombilla" está siempre en estado apagado y no "vuelve" a encenderse.

Por ejemplo puedes colocar una variable que sea el estado con valores 0 apagado y 1 encendido y jugar con eso en cada click al botón, si estado = 0 entonces al click estado = 1.

Saludos
Responder Con Cita
  #3  
Antiguo 16-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por aitorqrv Ver Mensaje
...
Para cambiar el estado de las salidas, me gustaria que variase su estado al pulsar sobre los circulos que representan las salidas que me encienden o me apagan las bonbillas, sin tener que utilizar un checkbox.
Hola aitorqrv.

Te propongo esta idea, con el editor gráfico que prefieras (el que trae Delphi sirve perfectamente) crea dos imágenes .bmp de 16 x 16. Estas imágenes que podrías guardar con los nombres LedOff.bmp y LedOn.bmp por ejemplo, serán: Un circulo pintado de verde oscuro la primera y la otra de verde muy claro para lograr el efecto apagado/encendido.

En el form coloca un TImageList, agrega en la posición 0 a LedOff.bmp y en la 1 LedOn.bmp. Un TPanel con ocho TSpeedButton dentro y los TLabel que precises. Luego mediante Ctrl+mouse selecciona los 8 SpeedButtons y asígnale a todos el mismo evento OnClick.

El código quedaría:
Código Delphi [-]
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  sp : TSpeedButton;
begin
  for i := 0 to 7 do
  begin
    sp := FindComponent('SpeedButton'+IntToStr(i+1)) as TSpeedButton;
    if Assigned(sp) then
    begin
      sp.Flat := True; 
      sp.Tag  := 0;    // Apagado por defecto
      ImageList1.GetBitmap(sp.Tag, sp.Glyph)
    end;
  end;
end;

procedure TForm1.SpeedButtonsClick(Sender: TObject);
begin
  with Sender as TSpeedButton do
  begin
    Tag   := Integer(not Boolean(Tag));  // encender/apagar
    Glyph := nil;
    ImageList1.GetBitmap(Tag,Glyph);
  end;
end;
El estado de encendido o apagado se almacena en la propiedad Tag de los SpeedButtons y se cambia ante el click sobre el mismo como solicitabas.

El resultado es:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-12-2013 a las 12:32:33.
Responder Con Cita
  #4  
Antiguo 17-12-2013
aitorqrv aitorqrv is offline
Miembro
 
Registrado: abr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
Hola muchas gracias, el codigo que ha posteado ecfisa me funciona "correctamente", mañana tendre que analizar el codigo para intentar ver por que no salen las imagenes cuando se inicia por primeraved el programa...

Supongo que este es otro tema diferente, y si le quero eliminar los bordes al spedd button?

Muchas gracias.
Responder Con Cita
  #5  
Antiguo 17-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por aitorqrv Ver Mensaje
... y si le quero eliminar los bordes al spedd button?
Hola aitorqrv.

Si te referis al borde que se presenta cuando se pasa el mouse por encima creo que no, pero podes reemplazar los SpeedButtons por Images con el mismo resultado:
Código Delphi [-]
...
implementation 

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  img : TImage;
begin
  for i := 0 to 7 do
  begin
    img := FindComponent('Image'+IntToStr(i+1)) as TImage;
    if Assigned(img) then
    begin
      img.Height:= 16;
      img.Width := 16;
      img.Tag   := 0;    // Apagado por defecto
      ImageList1.GetBitmap(img.Tag, img.Picture.Bitmap)
    end;
  end;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
 with Sender as TImage do
  begin
    Picture.Bitmap := nil;
    Tag := Integer(not Boolean(Tag));
    ImageList1.GetBitmap(Tag, Picture.Bitmap);
  end;
  //...
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DB CheckBox no boolean tarco35 Conexión con bases de datos 2 25-04-2012 11:25:15
checkbox Lupita Varios 6 07-04-2008 15:12:53
Checkbox que no cheka Kenobi Varios 6 23-01-2008 08:59:18
ayuda con el checkbox Debian Conexión con bases de datos 4 11-04-2005 18:59:04
checkbox superhopi OOP 3 12-05-2003 10:32:46


La franja horaria es GMT +2. Ahora son las 06:46:24.


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
Copyright 1996-2007 Club Delphi