Ver Mensaje Individual
  #2  
Antiguo 24-08-2006
Sandy656 Sandy656 is offline
Registrado
 
Registrado: jul 2006
Posts: 4
Reputación: 0
Sandy656 Va por buen camino
posible solución

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.

Última edición por roman fecha: 24-08-2006 a las 05:55:40. Razón: Reparar la etiqueta [delphi]
Responder Con Cita