Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   listbox (https://www.clubdelphi.com/foros/showthread.php?t=35899)

DM2005 26-09-2006 03:29:03

listbox
 
Hola a todos nuevamente, necesitando una vez mas de la ayuda en el foro...
estoy trabajando con un listbox en el que cargo un archivo txt, por medio de un speedbuttom, voy recorriendo el mismo,

seria algo asi:
lleno el listbox con los items del archivo txt
Código Delphi [-]
ListBox2.Items.LoadFromFile('C:\IPCapitulo.txt');


recorro los items del listbox
Código Delphi [-]
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
   with ListBox2.Items do
    begin
      if ListBox2.ItemIndex < Count-1
         then ListBox2.ItemIndex := ListBox2.ItemIndex + 1
         else MessageDlg(Final del curso !',mtInformation,[mbOk],0);
end;

el contenido del listbox seria:
01
01
01
02
02
03
03
04

y quiero que cuando pase por ejemplo del item 01 al 02..me informe con un mensaje que pase al siguiente item..
muchas gracias por la ayuda..
saludos..

epuigdef 26-09-2006 07:45:57

Buenas!

Prueba esto:



Código Delphi [-]
procedure TForm1.SpeedButton2Click(Sender: TObject);
var anterior String;
begin 
    anterior := '';
    with ListBox2.Items do 
    begin 
     if ListBox2.ItemIndex < Count-1 then begin 
        ListBox2.ItemIndex := ListBox2.ItemIndex + 1 
        if (ListBox2.items[ListBox2.itemindex] <> anterior) and 
         (anterior <> '') then 
            showmessage('cambio'); 
        anterior := ListBox2.items[ListBox2.itemindex]; 
    end 
    else MessageDlg(Final del curso !',mtInformation,[mbOk],0);
end;






Un saludo

Edu

DM2005 27-09-2006 03:23:44

Hola a todos nuevamente, segun mi duda planteada, epuigdef, me paso una procedure que no es muy clara, ya que da un error, y aparentemente no estaria realizando lo que estoy necesitando...
desde ya muchas gracias por el tiempo..
saludos..

roman 27-09-2006 03:40:40

¿Eso es todo? Podrías decir por qué no te parece claro o qué error te da. Además, si aparentemente no hace lo que deseas posiblemente sea porque no ha quedado claro que es eso que deseas ¿no crees? ¿Por qué mejor no tratas de aclararlo?

// Saludos

epuigdef 27-09-2006 07:28:23

Hola!

Pues no le veo el error, pero lo he hecho de memoria porque en este ordenador no tengo el Delphi.

Lo que creo que hace es dar un mensaje a cada cambio de valor, excepto en el primero.

Ya nos dirás algo!

Edu

DM2005 27-09-2006 16:37:36

Hola... les comento don de me da error...

Código Delphi [-]
procedure TForm1.SpeedButton2Click(Sender: TObject);
var anterior: String;
begin
    anterior := '';
    with ListBox2.Items do
    begin
     if ListBox2.ItemIndex < Count-1 then begin
        ListBox2.ItemIndex := ListBox2.ItemIndex + 1
        if (ListBox2.items[ListBox2.itemindex] <> anterior) and (anterior <> '') then
            showmessage('cambio');
        anterior := ListBox2.items[ListBox2.itemindex];
    end
    else MessageDlg('Final del curso !',mtInformation,[mbOk],0);
end;

en la primer linea.... donde declara la variable... supongo que correctamente seria asi:
Código Delphi [-]
var anterior: String;

2º error es en la linea:
Código Delphi [-]
if (ListBox2.items[ListBox2.itemindex] <> anterior) and (anterior <> '') then
alli cuando compilo me da el siguinte mensaje:
"Missing operator or semicolon"

espero haber aclarado bien mi duda..
gracias

Bicho 27-09-2006 16:48:34

Hola, prueba a ponerlo así:

Código Delphi [-]
procedure TForm1.SpeedButton2Click(Sender: TObject);
var anterior : String;
begin
  anterior := '';
  with ListBox2.Items do begin
    if ListBox2.ItemIndex < Count-1 then begin
       ListBox2.ItemIndex := ListBox2.ItemIndex + 1;
       if (ListBox2.items[ListBox2.itemindex] <> anterior) and (anterior <> '') then
          showmessage('cambio');
       anterior := ListBox2.items[ListBox2.itemindex];
    end
    else MessageDlg('Final del curso !',mtInformation,[mbOk],0);
  end;
end;

El segundo error que comentas, es debido a que la linea anterior no tiene el punto y coma del final de la linea.
Tambien he corregio otro error por falta de una comilla en el else MessageDlg
Espero te sirva,

Saludos

DM2005 27-09-2006 19:45:46

Hola de nuevo...
el codigo funciona bien....solo que el recorre el listbox y no me avisa cuando paso al siguiente item (ej.: 01 al 02)...y si me avisa cuando llego al final..

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox2.Items.LoadFromFile('C:\IPCapitulo.txt');
end;

IPCapitulo.txt :
01
01
01
02
02
03
03
03
04

Código Delphi [-]
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
var anterior : String;
begin
  anterior := '';
  with ListBox2.Items do begin
    if ListBox2.ItemIndex < Count-1 then begin
       ListBox2.ItemIndex := ListBox2.ItemIndex + 1;
       if (ListBox2.Items[ListBox2.ItemIndex] <> anterior) and (anterior <> '') then
          showmessage('cambio');
       anterior := ListBox2.Items[ListBox2.ItemIndex];
    end
    else MessageDlg('Final del curso !',mtInformation,[mbOk],0);
  end;
end;

tambien estaba probando con esta otra procedure que encontre por el foro:
Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  begin
    with ListBox2 do
      begin
        ItemIndex:= (ItemIndex + 1) mod Count;
       if ItemIndex < Count then
        if Items[ItemIndex] <> Items[ItemIndex] then
         begin
         showmessage('cambio');
         end;
      end;
  end;
end;

nuevamente gracias por la ayuda...
saludos

DM2005 28-09-2006 04:45:03

Hola, sera que me pueden ayudar con la procedure, ya que tengo que terminar mi proyecto y la verdad que eh probado de varias formas y no funciona como me gustaria.
gracias.
saludos

Héctor Randolph 28-09-2006 05:17:20

Me parece que puedo ver el problema.

La variable anterior es local y se fija su valor a cadena vacía en cada llamada al procedimiento.

Lo que se necesita es que esta varible conserve su valor entre llamadas al procedimiento.

posible solución, hay que declararla como global e inicializarla cuando se crea el formulario.

quedaría algo así



Código Delphi [-]
.
.
.
var
  Form1: TForm1;
  anterior: String;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  anterior:='';
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox2.ItemIndex < ListBox2.Items.Count-1 then
  begin
    ListBox2.ItemIndex := ListBox2.ItemIndex + 1;
    if (ListBox2.Items[ListBox2.ItemIndex] <> anterior) and (anterior <> '') then
      showmessage('cambio');
    anterior := ListBox2.Items[ListBox2.ItemIndex];
  end
  else
    MessageDlg('Final del curso !',mtInformation,[mbOk],0);
end;

.
.
.

Saludos

DM2005 28-09-2006 05:46:03

Muchas Gracias, Hector.
Funciono correctamente como necesitaba.
Saludos


La franja horaria es GMT +2. Ahora son las 09:54:43.

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