Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-08-2006
Sandy656 Sandy656 is offline
Registrado
 
Registrado: jul 2006
Posts: 4
Poder: 0
Sandy656 Va por buen camino
Cambiar foco desde otro form

Hola:

Bueno, ante todo agradecer a todos los foreros por la ayuda desinteresada que aportan y de la que tanto nos beneficiamos muchas personas como yo.

El problema que tengo es el siguiente:
Tengo un Form principal desde el que se abre otros forms secundarios, se realizan modificaciones y vuelve al form principal. Desde estos forms secundarios hay muchos edits con un botón de búsqueda a la derecha que despliega listas (clientes,proveedores.etc.). Mi intención es que cuando el cursor se encuentre en uno de estos edits, al pulsar la tecla 'flecha arriba', simule como si se hubiera hecho clic en el botón de búsqueda y se despliegue la lista. Sin usar el ratón.

Esto se hacerlo con la función FindNextControl desde el propio Form, pero para no repetir tanto la función en cada form, me gustaría hacer una función en el Form principal que sirva para todas. Pero siempre me busca el siguiente control de el Form principal y no de la Form desde el que se hace la llamada, aunque si me detecta el form y el componente. Este es el código que tengo.



Código Delphi [-]
procedure TP_Principal.EditConLista;
  Var Forma:Tform;
  Component,Component2:TwinControl;
begin
  forma:=Screen.ActiveForm;
  Component:=Screen.ActiveControl;
  if component is TEdit then
  begin
    With Screen.Activeform do
    begin
      Component2:= FindNextControl(Screen.ActiveControl,True,True,False);
      if (component2.ClassType=TSpeedButton)
      and (Copy(Component2.Name,1,11)='BotonBuscar')Then MostrarListaAsociada;
    end;
  end;
end;




Gracias y un saludo.

Última edición por roman fecha: 24-08-2006 a las 02:23:45. Razón: Reparar la etiqueta [delphi]
Responder Con Cita
  #2  
Antiguo 24-08-2006
Sandy656 Sandy656 is offline
Registrado
 
Registrado: jul 2006
Posts: 4
Poder: 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
  #3  
Antiguo 24-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Nunca has usado Frames? Un Frame es similar a un Panel en cuanto a que contiene varios controles, pero a diferencia del panel, se puede diseñar independientemente de un formulario y- lo más importante -se puede reusar cuantas veces quieras y en donde sea. Esto es lo que yo utilizaría aquí, un frame que enmarque al botón y al edit.

Para crearlo vas al menú Archivo|New|Frame. Ta aparecerá una ventana muy similar a un formulario. Ahí colocas un Edit y un SpeedButton. En el evento OnKeyDown del botón pones:

Código Delphi [-]
if Key = VK_UP then
  Self.BotonBuscar.Click;

Dale un nombre apropiado al frame, por ejemplo, FrameBusqueda. Ahora FrameBusqueda es muy similar a cualquier otro control y puedes colocar uno o más de ellos seleccionando la componente Frames en la pestaña Standard de la paleta de componentes.

Si tienes más de un frame diseñado, te aparecerá una lista para que escojas cuál deseas.

En el formulario aparecerá entonces una copia del frame que puedes programar como cualquier otro control. Así como actualmente has programado el eventoOnClick de cada SpeedButton, ahora haces lo mismo pero con el SpeedButton de cada FrameBusqueda que coloques. Hasta aquí no hay ganancia, pero todos los frames que pongas ya tendràn programado lo del KeyUp así que ya no hay nada más que hacer.

// Saludos
Responder Con Cita
  #4  
Antiguo 25-08-2006
Sandy656 Sandy656 is offline
Registrado
 
Registrado: jul 2006
Posts: 4
Poder: 0
Sandy656 Va por buen camino
Hola:

La verdad que no conocía lo de los frames, investigaré porque tiene muy buena pinta y muchas posibilidades. Muchas gracias por tu respuesta.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Escribir algo en un Tedit desde otro form taru Varios 9 20-07-2006 15:43:52
Form modal deja que el form llamante tome el foco tata Varios 6 17-05-2006 11:51:37
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 21:41:08
Form sin Foco TONIAM Varios 4 16-11-2005 22:58:54
Form sin foco AndyG OOP 2 01-09-2004 14:46:36


La franja horaria es GMT +2. Ahora son las 15:41:42.


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
Copyright 1996-2007 Club Delphi