Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   checklistbox chequear si esta seleccionado (https://www.clubdelphi.com/foros/showthread.php?t=84314)

jonydread 04-10-2013 06:14:02

checklistbox chequear si esta seleccionado
 
Amigos, tengo un problema raro con este codigo

Código Delphi [-]
for v := 0 to CheckListBox1.Count - 1 do
if (dblookupcombobox5.KeyValue = NULL) or (checklistbox1.Checked[v] = false)  then
begin
MessageDlg('Debe seleccionar todos los datos', mtWarning, [mbOk],0);
Abort;
end else
no funciona al seleccionar igual me dice que no esta seleccionado pero si lo coloco en True y selecciono funciona no se que ocurre
coloco codigo completo
Código Delphi [-]
procedure Tmainform.BitBtn19Click(Sender: TObject);
var
bItem: TListItem;
i,v: Integer;
temp: TStrings;
begin
for v := 0 to CheckListBox1.Count - 1 do
if (dblookupcombobox5.KeyValue = NULL) or (checklistbox1.Checked[v] = false)  then
begin
MessageDlg('Debe seleccionar todos los datos', mtWarning, [mbOk],0);
Abort;
end else
temp := TStringList.Create;
   try
   for I := 0 to CheckListBox1.Items.Count - 1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      temp.add(CheckListBox1.Items.Strings[i]);
     end;
     end;
   finally
    showmessage(TStringsToString(temp));
     begin
  Zquery1.sql.text := 'insert into ent_htas values (:Fecha,:Trabajador,:Herramienta)';
  ZQuery1.ParamByName('Fecha').AsDate := Datetimepicker4.Date;
  ZQuery1.ParamByName('Trabajador').AsString := dblookupcombobox5.KeyValue;
  ZQuery1.ParamByName('Herramienta').AsString := TStringsToString(temp);
  ZQuery1.ExecSQL;
  Zquery1.Close;
  Zquery1.SQL.Text := 'SELECT * FROM ent_htas';
  zquery1.Open;
  Listview5.Clear;
  temp.Free;
  end;
while not zquery1.Eof do
begin
bItem := Listview5.Items.Add;
bItem.Caption := zQuery1.fieldbyname('Fecha').AsString;
bItem.SubItems.Add(zQuery1.fieldbyname('Trabajador').AsString);
bItem.SubItems.Add(zQuery1.fieldbyname('Herramienta').AsString);
zquery1.next;

end;
dblookupcombobox5.KeyValue := NULL;
for v := 0 to CheckListBox1.Count - 1 do
CheckListBox1.Checked[v] := False;
end;
end;


Saludos

ecfisa 04-10-2013 07:38:11

Hola jonydread.

Código Delphi [-]
function LackSelection(CLB: TCheckListBox): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to CLB.Count - 1 do
    if not CLB.Checked[i] then Result := True;
end;

procedure Tmainform.BitBtn19Click(Sender: TObject);
...
begin
  if LackSelection(CheckListBox1) or (DBLookupComboBox5.KeyValue = NULL) then
    raise Exception.Create('Debe seleccionar todos los datos');
 ...
end;

Saludos :)

Pericles 04-10-2013 22:29:22

Hola, como esta planteado deben estar seleccionados todos los checks, creo que en ese caso tendría mas sentido otro componente.
Si la idea es verificar si hay almenos uno seleccionado (junto con el la condicion del BdLoockUpComboBox) yo separaria la evaluacion de ambas condiciones.
(de paso se recorre solo una vez y ya se evalua si esta alguno seleccionado o no registrandose alli los datos elegidos).
Espero haberme explicado bien!

Saludos
Nicolas Perichon


Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);

var
  i:integer;
  sel: string;
  vacio, vacio2: boolean;
begin

//registro opcion 1 y seleccionados 
  vacio:= true;
    for i := 0 to CheckListBox1.Count - 1 do
             begin

                  if checklistbox1.Checked[i] <> false then
                     begin
                        //acumulo texto para el ejemplo uso solo string
                        sel := sel + ' '+ CheckListBox1.Items.Strings[i];

                        //hay alguno seleccionado!
                        vacio := false;
                   end;
     end;

//registro  opcion 2
// vacio2:= dblookupcombobox5.KeyValue=NULL;
vacio2:= false;  //simulo que no esta vacio ya que no tengo el componente en el ejemplo


//Evaluo las dos condiciones 

if not(vacio) and not(vacio2)  then 
                                                showmessage('Ok, Seleccionados: '+sel) else
                                                showmessage('Debe seleccionar todos los datos');

end;

end.

jonydread 10-10-2013 03:48:56

exelente!!! muchas gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 06:10: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