Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

CkeckBox e Image

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: CkeckBox e Image Responder citando

Hola:
Tengo un pequeño problemita al intentar activar un checkbox haciento clic en una TImage.
El código es el siguiente:
Código:
void __fastcall TForm1::Image0Click(TObject *Sender)
{

if(CheckBox1->Checked)CheckBox1->Checked=false;
CheckBox0->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{

if(CheckBox0->Checked)CheckBox0->Checked=false;
CheckBox1->Checked=true;
}


Como veréis, el código esta implementado en el onclick de cada timage y de cada checkbox. En teoria debería hacer que se clicle el checkbox correspondiente al hacer clic en la image o en el checkbox y desactivar el otro. Pero el programa entra en un bucle sin fin activando y desactivando los 2 checkbox.

No puedo (o no se) usar radiobutton puesto que la imagen y el check deben estar juntitos.

Saludos, Bosoft
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: CkeckBox e Image Responder citando

bosoft escribió:
Código:
void __fastcall TForm1::Image0Click(TObject *Sender)
{

if(CheckBox1->Checked)
     CheckBox1->Checked=false;
CheckBox0->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{

if(CheckBox0->Checked)
     CheckBox0->Checked=false;
CheckBox1->Checked=true;
}

Simplifica un poco el código. Si siempre que pulses en TImage0 vas a desactivar TImage1, yo lo haría así:
Código:
void __fastcall TForm1::Image0Click(TObject *Sender)
{
     CheckBox1->Checked=false;
     CheckBox0->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
     CheckBox0->Checked=false;
     CheckBox1->Checked=true;
}
//---------------------------------------------------------------------------

Al fin y al cabo, si vas a desactivar los CheckBox, no tiene sentido que preguntes por su estado.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

yaya, pero hace lo mismo. Ya lo habia hecho y crei que no entraraia en bucle si ponia el if, y al hacer la pregunta se me quedo el codigo.

A ti que te gustan estas cositas ¿lo has probado?

Gracias

Saludos, bosoft
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No, la verdad es que no lo he probado pero tengo hechas cosas similares con otros elementos y me funcionan bien.

Me he creado un proyecto con dos TImage y dos TCheckBox, y me ha funcionado bien con los eventos OnClick del TImage, pero sí me entraba en un bucle hasta saturar la pila de llamadas si asignaba estos eventos en los CheckBox; es decir: si ponía en el OnClick del CheckBox1 Image1Click, etc. En este caso, sí entraba en bucle, pero sólo con los OnClick de los TImage funciona bien.

Código:
//---------------------------------------------------------------------------

#include <vcl>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
     : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1Click(TObject *Sender)
{
     CheckBox1->Checked = true;
     CheckBox2->Checked = false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image2Click(TObject *Sender)
{
     CheckBox1->Checked = false;
     CheckBox2->Checked = true;
}
//---------------------------------------------------------------------------

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel escribió:

Me he creado un proyecto con dos TImage y dos TCheckBox, y me ha funcionado bien con los eventos OnClick del TImage, pero sí me entraba en un bucle hasta saturar la pila de llamadas si asignaba estos eventos en los CheckBox; es decir: si ponía en el OnClick del CheckBox1 Image1Click, etc. En este caso, sí entraba en bucle, pero sólo con los OnClick de los TImage funciona bien.


ese es el problema. He pensado en poner otro código en el checkbox pero no acaba de chutar. tienes que pulsar en el check 2 veces para activarlo.
Código:
void __fastcall TForm1::Image0Click(TObject *Sender)
{
CheckBox1->Checked=false;
CheckBox0->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
CheckBox0->Checked=false;
CheckBox1->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox0Click(TObject *Sender)
{
CheckBox1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
CheckBox0->Checked=false;       
}


¿Alguna idea?

Gracias Angel
Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola bosoft

Segun lo que veo es que siempre ocasionaras el ciclo con ese metodo, ademas que en el evento onclic del checkbox no es necesario que le coloques el codigo respectivo acerca de ponerle o no un ticket, eso automaticmante lo hace...

Ahora cuando tu mediante el codigo en el Image activas o desactivas el Ticket no estoy muy seguro pero creo que en ese instante salta tambien el evento onclic del checkbox, por lo que si te das cuenta activas con la imagen y se genera el evento onclic, en este evento tambien activas o desactivas y por consiguiente se vuelve a activar el evento onclic y asi hasta el infinito y mas alllaaaaa... jejeje...

Bueno espero haberte ayudado por lo menos un poco, yo tenia un problema parecido por lo que opte por eliminar cualquier activacion o desactivacion del ticket en el evento onclic del mismo... ya que esta operacion se realiza pues automaticamente.

Hasta la proxima y suerte en lo que haces ya nos comentaras como te fue
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Lo que te dice Raúl te lo iba a postear ahora porque en las pruebas que he hecho me he dado cuenta que ocurre eso: al poner Checked a true automáticamente salta el OnClick del CheckBox.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ese era el problema. Pero quiero que en la aplicación, si pinchan en la imagen o en el check, quede claro la opción elegida (solo una tipo radiobox)
¿alguna idea?
No precisamente debe tener checkbox ni Image. Pero debe quedar claro que opción de las 4 esta activada (solo una) y poder ver un dibujito.

gracias a los 2
Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola Bosoft...

Jugando un poco con el builder bueno hice dos aplicaciones uno que usa varios CheckBox, y otro que usa un RadioGroup (Pueden ser con varios RadioButton pero el codigo sería largo).

Arrow El primero es una aplicación con las funcionalidades del los CheckBox o sea se pueden ir activando y desactivando varios CheckBox, junto con esta operación pues las imagenes van cambiando una a una.

Arrow El otro pues como te lo dije usa un RadioGroup la diferencia con el anterior esta en que solo tienes un item seleccionado por lo tanto solo tienes una imagen cambiada, trate de hacerlo con checkBox pero no me funciono Embarassed , pero bueno aprovechando que tu pregunta esta muy practica pues la he convertido en dos tutos que te explican paso a paso que debes de hacer, por otro lado tambien hay una opcion para descargar un arhcivo ZIP el cual contiene los dos programas mas el codigo fuente.

Las direcciones para los tutos son:

CheckBox http://es.geocities.com/sejasraul/bcb0006.html
RadioGroup http://es.geocities.com/sejasraul/bcb0007.html

Luego me cuentas que novedades y como te ha ido, espero que no sea demasiado tarde... Cool un saludo... tu amigo: Arrow [/url]
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por tus ideas Raúl, pero se trataba de ver siempre las imágenes y al pulsar en alguna que se activara el checkbox. Con Radiobutton no lo probé.
Mi solución ha sido poner 4 Tspeedbutton en grupo. Como este componente puede albergar un bitmap, me sirve y ademas cuando están e grupo solo hay uno Down.

Gracias a todos

Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, te explicaré una técnica q suelo yo utilizar a menudo cuando prerelleno formularios cuyos controles tienen eventos asignados como los que comentas (o los TEdit el onchange...) y es usar una variable para controlar si la asignacion la estoy haciendo yo por código o es el usuario el que esta modificando en cuyo caso si tengo que hacer algo...

en el .h del form bajo el private creo la variable
Código:
private:
   bool lY


luego en el .cpp
Código:

__fastcall TForm1::TForm1(TComponent* Owner)
     : TForm(Owner)
{
lY = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1Click(TObject *Sender)
{
     lY = false;
     CheckBox1->Checked = true;
     CheckBox2->Checked = false;
     lY = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image2Click(TObject *Sender)
{
     lY = false;
     CheckBox1->Checked = false;
     CheckBox2->Checked = true;
     lY = true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox0Click(TObject *Sender)
{
if (lY) CheckBox1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if (lY) CheckBox0->Checked=false;       
}


De esta forma evistas que entre en un bucle de eventos, o en otros casos estar validando datos que ya sabes q son correctos....
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

muy bueno, si señor.
Eso es lo que en un principio quería, pero ya dije en un post anterior que había cambiado de componentes (SpeedButton)

Gracias por tu solución.

Saludos, bosoft,
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Me alegro que lo hayas solucionado... hasta la proxima...
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.