No me convence esto:
Código Delphi
[-]
lista := tstringlist.create;
lista := openD.files;
...
lista.free;
Digamos.. Estas creando un objeto del tipo TStringList y se lo asignas a la variable "
lista", en el siguiente instante sobreescribes el valor de la variable con una porpiedad del mismo tipo del TOpenDialog, y luego haces un free del objeto del open dialog!!!!!
Replantéalo, eso no esta bien!