Ver Mensaje Individual
  #1  
Antiguo 27-11-2012
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Reputación: 20
rretamar Va camino a la famarretamar Va camino a la fama
Creando un "historial' de ítems en un ComboBox

Este sencillo código permite que un componente ComboBox se comporte como un 'historial' de cadenas (similar al de los navegadores web), y al igual que estos, la cantidad de cadenas a almacenar está limitada y las más usadas quedan 'flotando' sobre las demás. El código es 'sucio' (y mejorable), pero así como está funciona:

Código Delphi [-]
Function Historial(Const Lista: TStrings; Cadena: String; Convertir_a_mayusculas: Boolean; Max_Items: Integer): String;
Var
  Indice: Integer;
Begin
  Result := Cadena; // Devolver la cadena a modo de respaldo, porque en la clase TComboBox luego de agregar
                    // o eliminar ítems del objeto ITEMS, la propiedad TEXT queda en blanco
  If Cadena = '' Then Exit;
  If Convertir_a_mayusculas Then Cadena := UpperCase(Cadena);
  //
  Indice := Lista.IndexOf(Cadena);     // Buscar la cadena dentro de la lista (retorna -1 si no se encuentra)
  If Indice <> -1 Then Lista.Delete(Indice);                      // Si la cadena ya existe, elimintar la de posición actual
  Lista.Insert(0, Cadena);                                        // Agregar cadena en el primer lugar de la lista
  While Lista.Count > Max_Items Do Lista.Delete(Lista.Count - 1); // Limitar el número de ítems a n elementos
End;

Ejemplo de uso:

(por ejemplo, si el usuario presiona ENTER luego de tipear una cadena)

ComboBox1.Text := Historial( ComboBox1.Items, ComboBox1.Text, False, 50 );

(en este caso, se limita el historial a 50 ítems)

Por supuesto, la idea es conservar el contenido del 'historial' al cerrar el software y recuperarlo al abrirlo, pero esa tarea ya la hacen los componentes Jedi (TJvFormStorage) y los incluídos en Lazarus Codetyphon.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita