Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Abrir un ComboBoxEx automáticamente (https://www.clubdelphi.com/foros/showthread.php?t=66273)

afxe 10-02-2010 18:44:02

Abrir un ComboBoxEx automáticamente
 
Hola chicos (y chicas, que las hay).

A ver si me ayudan... tengo un TComboBoxEx y desearía que cuando el ratón pase por encima se abriera automáticamente. Algo tan fácil como poner la instrucción en el evento OnMouseEnter:
Código Delphi [-]
  cbAccion.DroppedDown := True;

Pero éste componente no tiene dicho evento.

Gracias a todos.

Lord Delfos 10-02-2010 20:38:36

Bueno, la manera más fácil es redefinir la clase TComboBoxEx para que intercepte el mensaje CMMouseEnter.

Algo así:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type TComboBoxEx = class(ComCtrls.TComboBoxEx)
  private
    procedure CMMouseEnter(var msg: TMessage) ; message CM_MOUSEENTER;
end;

type
  TForm1 = class(TForm)
    cbb1: TComboBoxEx;
  private

[...]

procedure TComboBoxEx.CMMouseEnter(var msg: TMessage);
begin
  DroppedDown:= True;
end;

Al declarar una clase que se llama igual que una que ya existe, se "engaña" a Delphi para que instancie tu clase en vez de la original... Por eso hay que declararla antes de la declaración de la Form1.

Espero te sirva. Saludongos.

afxe 11-02-2010 10:19:22

Perfecto Lord. Sencillo y elegante. Gracias.

LuisAlf:: 03-03-2010 18:36:53

Al leer el post se me hizo interesante el problema.....

Saben la solución que da Lord Delfos es excelente, me gusto mucho,pero antes de implementarla quise experimentar un poco y lo logre....muy a mi manera pero es una solucion......creo que es una forma salvaje de hacerlo pero bueno.....

Código:


 if((x<(combo.left+combo.Width+5))and(x>combo.Left-6))
    and((y<(combo.top+combo.height+5))and(y>combo.Top-5))then
        combo.DroppedDown:=true;


Lo aplique a un combobox(no se cual seal sea el comboboxEx) y como claramente afxe dijo que este componente no tiene el evento onmousemove, pués se me ocurrio hacerlo pero con el onmousemove de la forma, es decir al estar el cursor cerca de la posición del combobox se activa la propiedad DroppedDown:=true, esto es lo que valida el if del codigo al conocer la posición del cursor por medio de los parametros del evento: x, y...

Lord Delfos 03-03-2010 20:59:04

¡Pues funciona muy bien!

Lo bueno de tu solución es que no se necesita declarar una nueva clase en cada ventana en la que uno quiera usar el "truco".


La franja horaria es GMT +2. Ahora son las 09:19:11.

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