Hola de nuevo.
He comprobado que el componente TSpeedButton no tiene la propiedad TabOrder y me es imposible localizarlo desde otro form con la función findNextControl. Sin embargo he conseguido lo que pretendía de esta otra forma que pongo aquí por si le sirve a alguien.
He puesto al componente TEdit el mismo Tag que al TSpeedButton que quiero enlazar. Todos los SpeedButton deben comenzar con el texto 'BotonBuscar'. Después hago las comprobaciones desde el TForm principal para evitar errores.
Para activar el botón y desplegar la lista se deben capturar todos los eventos desde el form principal, así cada vez que se pulse la tecla 'flecha arriba' desde cualquier form, si el cursor se encuentra dentro de un Edit y el tag del edit coincide con el tag de algún TSpeedButton del form donde está situado el edit, se lanza el evento OnClick del botón.
Seguro que hay formas más elegantes de hacerlo, pero bueno, esta es la que he encontrado.
Código Delphi
[-]
procedure TP_Principal.EditConLista;
Var
a:Integer;
begin
if Screen.Activecontrol.ClassType=TEdit then
begin
For a:=0 to Screen.ActiveForm.ComponentCount-1 do
begin
if (Screen.ActiveForm.Components[a].Tag <>0)
and (Screen.ActiveForm.Components[a].ClassType=TSpeedButton)
and (Screen.Activecontrol.Tag=Screen.ActiveForm.Components[a].Tag)
and (Copy(Screen.ActiveForm.Components[a].name,1,11)='BotonBuscar') then
begin
(Screen.ActiveForm.Components[a] as TspeedButton).OnClick(Self);
exit;
end;
end;
end;
end;
Un Saludo foreros.