PDA

Ver la Versión Completa : listbox


DM2005
26-09-2006, 03:29:03
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
ListBox2.Items.LoadFromFile('C:\IPCapitulo.txt');


recorro los items del listbox
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:




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...


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:
var anterior: String;

2º error es en la linea:
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í:


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..


procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox2.Items.LoadFromFile('C:\IPCapitulo.txt');
end;


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



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:

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í




.
.
.
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