delphi
MisUsuarios.Show(0).GetNombre;
Habría que hacer unos cuantos cambios.
A como lo tienes desarrollado no es posible llegar a esa forma. Considero que la forma más sencilla y que no te afecta demasiado a tu código es que además de ese Show le puedes declarar justamente los Getters que necesites. Y como dije: estos por necesidad deben recibir el índice. Es decir por ejemplo:
delphi
function TUsuarios.GetNombre(Indice: integer): string; begin result := nombreU[Indice]; // o que es igual a result := nombreU.Strings[Indice]; end;
Hay una forma de llegar a un diseño como que deseas... pero para ello se debe ir a por lo último que te comenté: separar en dos clases: Una clase que mantenga la lista, la que llamé TUsuarios y otra la que hace a cada usuario: TUsuario.
Luego se puede añadir un método GetUsuario() a la clase TUsuarios que regrese el TUsuario correspondiente según el índice. Algo como:
delphi
function TUsuarios.GetUsuario(Indice: integer): TUsuario; begin result := FLista.Items[Indice] as TUsuario; // o también result := TUsuario(FLista.Items[Indice]); end;
Entonces cuando uno llama a ese método, recibe al objeto de la clase TUsuario correspondiente. Y como esta clase ya cuenta con métodos/propiedades para acceder a cada atributo es que entonces podemos hacer cosas como:
delphi
Edit2.Text := MisUsuarios.GetUsuario(5).Nombre;
En el ejemplo se GetUsuario devuelve al objeto que está 6to en la lista (recuerda que los índices en los TxxxList empiezan por 0 [cero]). Luego es que se accede a la propiedad Nombre.
Este diseño lleva a que se tenga que crear tantas instancias de TUsuario como se necesiten. Justamente se puede aprovechar a la clase TUsuarios para que asuma esta responsabilidad (ya que de paso se encarga de poner/sacar dicha lista), basta con añadirle un método que haga el trabajo. Algo como:
delphi
function TUsuarios.NewUsuario(ID: integer; SupCder, SupSder: Currency, Nombre, Cultivo: string): integer; var User: TUsuario; begin User := TUsuario.Create; User.ID := ID; User.Nombre := Nombre; User.SupCDer := SupCder; User.SupSder := SupSder; User.Cultivo := Cultivo; result := FLista.Add(TObject(User)); end;
Fíjate que aprovecho este método para no sólo ya crear el Usuario y llenarlo con la información necesaria sino que además, ya de paso lo agrego en la lista. Al ser una función el método regresa justamente el índice o posición.
Si se contase con este método ya no haría falta tener que estar creando por nuestros propios medios a los objetos de la clase Usuarios, ya le hemos dado la capacidad a TUsuarios.
Como notas finales:
1)En tu código que acabas de poner estás invocando a una clase y no a un objeto o instancia de ésta. Fíjate que estás haciendo:
delphi
Tusuarios.Show(0).getNombre
Cuando es:
delphi
var MisUsuarios: TUsuarios; ... MisUsuarios.Show(0).getNombre;
Por algo recomiendo seguir la nomeclatura de Delphi. Se acostumbra a anteponer a nuestras clases el prefijo T, de modo que es TAlgo, para diferenciar de los nombres de los objetos de la misma. Por tanto:
TUsuarios >> Nombre de la clase
Usuarios >> Nombre de un objeto
2) Es IntToStr() y no IntToString.
Saludos,