Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Creando un "historial' de ítems en un ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=81585)

rretamar 27-11-2012 22:21:16

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.


La franja horaria es GMT +2. Ahora son las 18:26:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi