metodo n.1:
...
LBGgAperte.Selected[i];
LBGgAperte.DeleteSelected;
...
Hai usato la proprietà Selected per leggere lo stato ( ;) ), se vuoi selezionare la riga devi porla a true:
...
LBGgAperte.Selected[i] := True;
LBGgAperte.DeleteSelected;
...
Nel secondo metodo, la proprietà ItemIndex rimane a -1 finchè non è selezionata un riga ... nel tuo caso ovviamente doveva prima essere selezionata a mano ad esempio con il mouse .....
Ciao
Quindi i due procedimenti sono tutti e due validi e servono ad affrontare situazioni diverse.
In questo caso e nel passo in cui tocca al programma decidere la riga da selezionare, è opportuno usare il primo metodo: Ho modificato, seguendo il tuo suggerimento, la riga di selezione:
LBGgAperte.Selected[i]:= True;
Ora la successiva riga di cancellazione viene eseguita correttamente.
Grazie sempre!