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; If Cadena = '' Then Exit;
If Convertir_a_mayusculas Then Cadena := UpperCase(Cadena);
Indice := Lista.IndexOf(Cadena); If Indice <> -1 Then Lista.Delete(Indice); Lista.Insert(0, Cadena); While Lista.Count > Max_Items Do Lista.Delete(Lista.Count - 1); 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.