Hola a todos, aqui de nuevo con una duda existencial
. Espero hacerme entender.
Tengo una opcion para realizar busquedas en mi sistema, consiste en escribir en un edit y al hacer enter se muestra una ventana con los resultados de la busqueda. Ya esa parte esta implementada y se muestra asi:
Código Delphi
[-]TFrmBusqueda.Buscar(@VerResultados);
"@VerResultados" es un metodo que uso como callback para devolver los resultados de la busqueda ya que la ventana se muestra como no modal. Hasta ahi todo bien. Ahora mi duda.
En las pruebas todo ok ya lo tenia programado para que la ventana se muestre debajo del edit y si el edit esta en el lado de arriba a la izquierda. Mi duda viene porque en el sistema van a haber mas edits de busqueda como este y pueden estar en diferente posicion (A la derecha o en la parte inferior) y quiero que mi ventana se ubique de acuerdo a la posicion del edit. (Si esta abajo la ventana debe mostrarse arriba del edit, si esta a la derecha debe colocarse de manera que se pueda visualizar bien). Estaba pensando jugar con la propiedad boundsrect del edit, pero ahi empieza mi duda. Al ser una opcion que habra en varias ventanas y en algunas ventanas habra mas de un edit de busqueda seria escribir demasiado codigo. Asi que seria preferible que la ventana de busqueda base sea la que defina su posicion, entonces pense en enviarle el control edit en el parametro. Mi procedimiento para mostrar la ventana debajo del edit queda asi:
Código Delphi
[-]class procedure TFrmBusqueda.Buscar(AControl: Twincontrol; AResults: TGetResults );
var
Frm:TFrmBusqueda;
P:TPoint;
begin
Frm:=TFrmBusqueda.Create(nil);
frm.FProcRes:=AResults;
P:=AControl.parent.ClientToScreen(point(AControl.Left,AControl.BoundsRect.Bottom));
frm.Left:=p.X;
frm.Top:=p.Y;
frm.Show;
end;
Pero de ahi viendo como ver los demas casos estoy que le doy muchas vueltas en mi cabeza. No se si voy en buen camino o hay alguna sugerencia que puedan darme.
Uso Lazarus 2.0.1 con sus controles standar.
Gracias por su atencion