Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Hacer público un método oculto (https://www.clubdelphi.com/foros/showthread.php?t=7939)

Lepe 02-03-2004 18:28:19

Hacer público un método oculto
 
Estoy intentando derivar de un TrxLookupedit (unidad RXLOOKUP.PAS) para hacer publico un metodo:
ShowPopup(Origin:Tpoint)

Lo que deseo hacer es añadirle la propiedad AutoDropDown, pero como no tengo ni idea, he pensado mejor hacer publico ese método.

El problema que tengo es que la lista se queda indefinidamente abierta. ¿ Por qué ocurre ? o ¿ como se puede subsanar ese desaguisado?

el código que tengo es este: (perdonad si hay "burradas", pero no tengo ni idea de diseño de componentes)
Código:

type
  TRxLookupEditSH = class(TRxLookupEdit)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure ShowPopup();
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure TrxLookupEditSH.ShowPopup();
var p:TPoint;
begin
// seguro que hay una forma mejor....
p := Self.ClientOrigin;
p.Y := p.Y+ Self.ClientHeight;
Dec (p.X, BorderWidth +2);
Inc (p.Y,BorderWidth *2+2);

inherited ShowPopup(p);

end;

procedure Register;
begin
  RegisterComponents('RX DBAware', [TRxLookupEditSH]);
end;

end.

gracias Mil.
Saludos

roman 02-03-2004 18:39:20

¿ShowPopup es un método de la clase base? En tal caso hace falta la directiva override. Por otro lado, normalmente es conveniente llamar al método heredado antes de nuestro código propio.

// Saludos

roman 02-03-2004 18:41:38

Me corrijo, ya sé porque intentas poner inherited al final. ¿Por qué no nos dices exactamente lo que deseas hacer? Hablas de hacer público un método pero también lo amplías. ¿Cuál es el efecto que deseas?

// Saludos

Lepe 02-03-2004 19:04:28

gracias por el interés, roman, y sobre todo por la rapidez.

lo que deseo es que al escribir en el rxLookup se despliegue la lista automaticamente, pero creo que es muy complicado, por eso intentaba hacerlo publico.

el ShowPopup de la clase base viene como:
Código:

procedure TRxLookupEdit.ShowPopup(Origin: TPoint);
begin
  TPopupDataWindow(FPopup).Show(Origin);
end;

el show que llama es este:

procedure TPopupDataWindow.Show(Origin: TPoint);
begin
  SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0,
    SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE);
  Visible := True;
end;

por tanto necesita saber donde se ha de mostrar la lista desplegable, intento alinearla a la izq del RxLookupEdit.

Saludos

Lepe 03-03-2004 04:26:32

Pido disculpas por adelantado, estaba espeso, y agradezco vuestra paciencia.

Para unificar criterios, vamos a dividir un Combobox en 3 partes:
- a la parte de un combobox donde se puede escribir, llamésmosle Editor
- a la lista desplegable, simplemente Lista
- al boton para desplegar la lista, boton

En un RxLookupEdit, pulsas con el raton en el boton, y la lista se despliega, a continuacion, escribes letras y las envia al Editor manteniendo la lista desplegada).Esto es lo que busco, pero que al entrar el foco en el editor, lo primero que haga es desplegar la lista.

El RxLookupEdit tiene una propiedad ClickKey (Tshortcut), ¿alguien sabe como enviarsela desde código ?

Antecedentes:
----------------
He pasado por Trucomania, a ver si habia forma de desplegar la lista con un SendMessage, pero el RxLookupEdit se resiste, incluso he visto esto por estos foros:
Código:

TRxDBLookupCombo(Screen.ActiveForm.ActiveControl).DropDown;
pero no sirve con el RxLookupEdit.

El hecho de querer usar un RxlookupEdit, es porque es el único que permite escribir en el Editor y tiene Lookup. El resto de controles Lookup que veo en delphi, no deja poner el cursor dentro del Editor. Es cierto que si tecleamos, las teclas se procesan, pero no se vé las teclas que se pulsan.

Gracias de nuevo.

roman 03-03-2004 06:37:55

Revisando la componente me parece que el método que buscas es PopupDropDown.

// Saludos

Lepe 03-03-2004 16:56:06

Hecho, publicado el método y funciona.

Ese método es uno de los que habia mirado, pero la verdad no veía que fuese el que necesitaba :o

Muchas Gracias, me has sacado de un apuro muy gordo.


La franja horaria es GMT +2. Ahora son las 00:39:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi