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