Delphi ComboBox Style DrawFixed y Autocomplete

Hola,
Tengo un comboBox con stylo DrawFixed porque tengo la necesidad de identificar los items por colores pero aún así necesito que me permita escribit en el comboBox para buscar un item. El funcionamiento de búsqueda debe ser igual que si escojo el Style DropDown pero.
Llebo días intentándolo y no lo consigo, ¿Alguna idea?
Gracias.

1 respuesta

Respuesta
1
Prueba esto...
- En un form vacío, pega un componente Edit, un Button y un ListBox, mas o menos asi:

- En el ListBox, cambia la propiedad "Visible" a "False", y la propiedad "Style" a "lbOwnerDrawFixed" (deberás añadir el código para que "dibuje" los items como desees en el evento "OnDrawItem" del ListBox).
- Añade el siguiente código al evento "OnKeyUp" del Edit:
<span style="font-style: italic;">procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var I, Long: Integer;
Encontrado: Boolean;
begin
if (Key in [8,46]) or (Edit1.Text = '') then exit;
Encontrado := False;
I := 0;
while (I <= ListBox1.Items.Count -1) and (Encontrado = False) do
begin
Long := Length(Edit1.Text);
if AnsiLowerCase(copy(ListBox1.Items</span>,1,Long)) = AnsiLowerCase(Edit1.Text) then
begin
Encontrado := True;
Edit1.Text := ListBox1.Items;
Edit1.SelStart := Long;
Edit1.SelLength := 255;
end;
inc(I);
end;
end;<span style="font-style: normal;">
</span>

<span style="font-style: normal;">- Añade el siguiente código al evento "OnClick" del Button:
<span style="font-style: italic;"> </span></span>

<span style="font-style: italic;">procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Show;
ListBox1.SetFocus;
end;</span>
<span style="font-style: italic;"></span>
<span style="font-style: italic;"><span style="font-style: normal;">- Añade el siguiente código al evento "OnClick" del Listbox:</span></span>
<span style="font-style: normal;"><span style="font-style: italic;"><span style="font-style: normal;"></span></span></span>
<span style="font-style: normal;"><span style="font-style: italic;"><span style="font-style: normal;"><span style="font-style: italic;">procedure TForm1.ListBox1Click(Sender: TObject);
begin
</span></span><span style="font-style: italic;">if ListBox1.SelCount <> 0 then Edit1.Text := ListBox1.Items[ListBox1.ItemIndex];</span></span><span style="font-style: italic;">
</span><span style="font-style: italic;"> ListBox1.Hide;
Edit1.SetFocus;
end;</span></span>

<span style="font-style: normal;">- Añade el siguiente código al evento "OnExit" del ListBox:
</span>

<span style="font-style: normal;"><span style="font-style: italic;">procedure TForm1.ListBox1Exit(Sender: TObject);
begin
ListBox1.Hide;
</span><span style="font-style: italic;">end;</span>
</span>
<span style="font-style: normal;">
<div>- Añade el siguiente código al evento "OnMouseMove" del ListBox:</div>
<span style="font-style: italic;">procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var tmpIndex: Integer;
begin
tmpIndex := ListBox1.ItemAtPos(Point(x,y),True);
if tmpIndex <> -1 then ListBox1.ItemIndex := tmpIndex;
end;
</span>
Salu2.</span>
Señores de Todo Expertos... mejoren el editor de mensajes... al menos que se pueda enviar "texto plano" o revisar directamente el código HTML, por que si no, es un desastre...
En fin, aqui tienes los archivos con el código fuente que pretendía pasarte:
http://www.megaupload.com/?d=2XN3XOEX
Muchas Gracias ok69.
Hace dos días ya empecé a crear un componente tal y como indicas ya que el ComboBox no se puede cambiar.
El código que me has indicado me servirá para depurar funcionalidades.
Muchas Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas