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 15-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Cool Trabajo con Componentes

Por favor, soy nuevo y necesito que alguien brinde información sobre el componente CheckListBox sobre como limitar la cantidad de items marcados a uno solo, en tiempo de ejecución

esp3inform@mail.islazul.tur.cu

Gracias por adelantado
Responder Con Cita
  #2  
Antiguo 16-01-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Antes de nada Revisa la Guía de estilo de los foros.

(1) Para saber cuantos ítems tienes seleccionados puedes hacer un recorrido por el CheckListBox (bucle for utilizando Items.Count) e ir sumando los que la propiedad Checked[i] es True.

(2) Para detectar cuando un elemento se "marca" puedes utilizar el evento OnClickCheck.

(3) Es este evento comprueba cuantos hay y si ya estás en el máximo uelves a ponerlo a False (utilizando la popiedad ItemIndex de la lista).

Un saludo. Si tienes problemas ya dirás...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Red face Manejo y utilización de un CheckListBox.

Hola...

Primeramente leí la Guia de estilos y me pareció muy aleccionadora por tanto, trataré de ser más explicito y claro.
Estoy haciendo una aplicación para manejar las Estadisticas del turismo en la entidad Islazul que incorpora un CheckListBox (componente poco nombrado) y que con el cual normalmente se pueden marcar más de un items en tiempo de ejecución, los items son nombres de instalaciones hoteleras que al ser marcados selecciono el informe correspondiente presionando un Button.

El dilema en sí es que al marcar un items luego de marcar otro, se borre el anterior marcado, o sea que siempre sea un solo items marcado, yo logré algo como les muestro a continuación, pero como verán no funciona del todo bien.

Código Delphi [-]
procedure TForm5.CheckListBox1ClickCheck(Sender: TObject);
 var i,a,j,e,f:integer;
begin

  // esta parte es para activar o desactivar el button asociado
  // al Checklist. segun haya o haya items marcados (funciona ok)
 
  for a:=0 to checklistbox1.items.count-1 do begin
  if  CheckListBox1.Checked[a]=false then BitBtn1.Enabled:=false;
  end;
  for j:=0 to checklistbox1.items.count-1 do begin
  if  CheckListBox1.Checked[j] then BitBtn1.Enabled:=true;
  end;
 

 //Esta es la parte que permite que solo haya un items marcado
      e:=-1;
 if ComboBox1.ItemIndex=1 then  begin
   CheckBox1.Checked:=false;
   CheckListBox1.ClearSelection;
   for i:=0 to checklistbox1.items.count-1 do
   if CheckListBox1.Checked[i] then begin
     e:=i;
     CheckListBox1.Checked[e]:=false;
   end;

 end;

En esta parte es donde tengo el problema donde hace bien la operación de mantener un solo items marcado pero solo cuando se selecciona un items en la lista que está más abajo del ya marcado, cuando se selecciona un items que este más arriba del anterior lo hace mal.

Disculpemme lo extenso de la explicación, y me indican si violo alguna norma del Foro, pero les agradeceria una vez más la colaboración de ustedes.

Gracias

Última edición por dec fecha: 16-01-2007 a las 18:21:01.
Responder Con Cita
  #4  
Antiguo 16-01-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Jucho69
tengo el problema donde hace bien la operación de mantener un solo items marcado pero solo cuando se selecciona un items en la lista que está más abajo del ya marcado, cuando se selecciona un items que este más arriba del anterior lo hace mal.
Haz un recorrido, los desmarcas todos menos el actual (el actual te lo da la propiedad List.ItemIndex).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 16-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Agradezco tu ayuda Nef.
Yo hice el siguiente cambio:
Agregé un cliclo con la variable " f ", si la sustituyo por la variable " e " en la linea siguiente CheckListBox1.Checked[e]:=false; me hace el mismo proceso pero a la inversa.

Disculpa la insistencia y te agradecería nuevamente tu ayuda ya que no logro el objetivo de que el marcado/desmarcado fluya bien.

Gracias

Código Delphi [-]
procedure TForm5.CheckListBox1ClickCheck(Sender: TObject);
 var i,a,j,e,f:integer;
begin
  for a:=0 to checklistbox1.items.count-1 do begin
  if  CheckListBox1.Checked[a]=false then BitBtn1.Enabled:=false;
  end;
  for j:=0 to checklistbox1.items.count-1 do begin
  if  CheckListBox1.Checked[j] then BitBtn1.Enabled:=true;
  end;

   e:=-1;
 if ComboBox1.ItemIndex=1 then  begin
   CheckBox1.Checked:=false;
   CheckListBox1.ClearSelection;

   for i:=0 to checklistbox1.items.count-1 do
    if CheckListBox1.Checked[i] then begin
      e:=i;
    for f:=1 to checklistbox1.items.count-1 do     // Este es el cambio//
     CheckListBox1.Checked[e]:=false;
      end;
    end;
   if e>=0 then CheckListBox1.Checked[e]:=true;
 end;

Última edición por dec fecha: 16-01-2007 a las 18:20:50.
Responder Con Cita
  #6  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A mí me queda algo como esto, pero, no me termina de convencer el último "for", puesto que creo que necesitas que se habilite un botón siempre que exista al menos un "item marcado" en la lista, y, de no ser así, que se deshabilite el botón:

Código Delphi [-]
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
  i: integer;
begin
  if (CheckListBox1.ItemIndex <> -1) then
  begin
    for i := 0 to CheckListBox1.Count-1 do
    begin
      if CheckListBox1.Checked[i]
       and (i <> CheckListBox1.ItemIndex) then
         CheckListBox1.Checked[i] := false;
    end;
  end;
  for i := 0 to CheckListBox1.Count-1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      BitBtn1.Enabled := true;
      Break;
    end
    else
      BitBtn1.Enabled := false;
  end;
end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 16-01-2007 a las 18:40:55.
Responder Con Cita
  #7  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y si se va a limitar la selección de casillas a una sóla, por qué, digo yo, no se usa mejor un simple listbox con MultiSelect en false?

// Saludos
Responder Con Cita
  #8  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, pues al cabo yo lo dejaría como sigue... de momento.

Código Delphi [-]
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
  b: boolean;
  i: integer;
begin
  b := false;
  if (CheckListBox1.ItemIndex <> -1) then
  begin
    for i := 0 to CheckListBox1.Count-1 do
    begin
      if CheckListBox1.Checked[i]
       and (i <> CheckListBox1.ItemIndex) then
         CheckListBox1.Checked[i] := false;
      if not b then
        b := CheckListBox1.Checked[i];
    end;
  end;
  BitBtn1.Enabled := b;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 16-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Hola Dec


Realmente la ayuda de los MOUSTROS que saben es indispensable, no se como agradecete a tí esta colaboración solo deseo poder algún día hacer lo mismo con otros.
Tambien le agradezco a Nef. y a otros que me hayan dado su valoración.

GRACIAS y mis respetos.
Responder Con Cita
  #10  
Antiguo 16-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Hola Roman..

Agradecido por tu observación y es cierto que con el List se hace lo mismo y mas facil, pero para mostrar mejor la selección a los usuarios menos entrenados en Windows el Check es lo ideal además que lo hé vinculado a un ComboBox de la siguiente forma:

si selecciono en el combo "Total de hoteles" , en el Check se marcan todos o los que se desea marcar, si selecciono por ejemplo "Instalación Hotelera" se selecciona solo un Items del Check.
Pueden haber variantes más faciles y versatiles y estoy seguro que muchos de ustedes pueden hayar más de una teniendo en cuenta la respuesta tan rápida y efectiva que me dió Dec.

Una vez más gracias.
Responder Con Cita
  #11  
Antiguo 16-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Te reitero mi agradecimiento Dec.

Me doy cuenta que primero hay que documentarse y aprender bien antes de comenzar a realizar cualquier proyecto más o menos importante, no obstante, seguramente muchos de ustedes comenzaron poco a poco y luego se desarroyaron en programación así es que tengo esperanzas, ya que la dedicación que pueda tener uno es escencial aparte de la imprescindible ayuda que se reciba de los Super.

Gracias y nuevamente mis respetos.
Responder Con Cita
  #12  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Nada hombre, para eso estamos todos aquí, para aprender un poco, entre otras cosas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #13  
Antiguo 16-01-2007
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Tambien tienes el TRadioGroup
__________________
[Crandel]
Responder Con Cita
  #14  
Antiguo 18-01-2007
Jucho69 Jucho69 is offline
Miembro
 
Registrado: ene 2007
Ubicación: Ciudad Habana, Cuba
Posts: 118
Poder: 18
Jucho69 Va por buen camino
Sostengo el CheckList.

Hola Crandel.

En cierta tu observación, solo que el CheckList dá muchas más opciones en la selección que otros componentes del mismo tipo, tambien brinda más seguridad ya que evita la selección accidenta, claro que supongo que debe haber algún otro componente similar o incluso que haya sido creado fuera de Borland.
Si es así te agradeceria que me indicaras donde obtenerlo.

De cualquier manera gracias.
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
Sección trabajo DDiez Varios 4 30-11-2007 19:28:21
Trabajo con cursores... dunia_lv MS SQL Server 1 12-05-2006 03:18:46
Trabajo de componentes con imagen soloriv Gráficos 0 08-07-2005 00:38:12
Trabajo en Red EstebanWeb Conexión con bases de datos 4 14-12-2004 16:36:05


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


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