Конференция "Начинающим" » Событие курсор мыши над TComboBox [D5, XP]
 
  • TComboBox (07.08.17 14:24) [0]
    На панели расположен ряд CheckBox-ов, RadioButton-ов и ComboBox-ов.
    У CheckBox-ов и RadioButton-ов имеется событие onMouseMove. Подскажите как мне определить, что курсор мыши находится над одним из ComboBox-ов (событие onMouseMove у этого компонента/контрола отсутствует)?
    Спасибо
  • Игорь Шевченко © (07.08.17 14:35) [1]
       property OnMouseEnter;
       property OnMouseLeave;

  • TComboBox (07.08.17 20:44) [2]
    > Игорь Шевченко ©   (07.08.17 14:35) [1]
    >    property OnMouseEnter;
    >    property OnMouseLeave;

    Если я правильно понял (не совсем уверен), предлагается создать наследника TComboBox и добавить два необходимых события OnMouseLeave и OnMouseEnter.
    В моей ситуации это нежелательно. Имеется довольно "пожилой" проект (2001 г.р.), я продолжаю его сопровождать, мой вопрос был про стандартные TComboBox-сы. В любом случае спасибо, что откликнулись
  • Игорь Шевченко © (07.08.17 20:47) [3]
    Нет, у TComboBox есть эти события, на них надо написать обработчики, при срабатывании OnMouseEnter курсор мыши будет в окне ComboBox, а при срабатывании OnMouseLeave курсор мыши покинет окно.
  • TComboBox (07.08.17 20:48) [4]
    Попытки с использованием ControlAtPos результата не дали.
    Видимо, я что-о недопонимаю ...:(
  • Smile © (07.08.17 20:50) [5]
    > Игорь Шевченко ©   (07.08.17 20:47) [3]
    > Нет, у TComboBox есть эти события, на них надо написать
    > обработчики, при срабатывании OnMouseEnter курсор мыши будет
    > в окне ComboBox, а при срабатывании OnMouseLeave курсор
    > мыши покинет окно.

    Уточню, WinXP, D5
    Этих событий у TComboBox нет
  • ВладОшин © (07.08.17 21:23) [6]
    там три handle походу, Edit, list и еще что-то
       FEditHandle: HWnd;
       FListHandle: HWnd;
       FDropHandle: HWnd;

    идея така, перехватываем тут

     TComboBox = class(StdCtrls.TComboBox)
     public
       procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
         ComboProc: Pointer); override;
     end;

     TForm1 = class(TForm)
       cb1: TComboBox;
       mmo1: TMemo;
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    { TComboBox }

    procedure TComboBox.ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
     ComboProc: Pointer);
    begin
     Form1.mmo1.Lines.Add(IntToStr(Message.Msg));
     inherited;

    end;

    только в таком виде ошибка при  закрытии, при разрушении надо аккуратнее подумать
  • Германн © (08.08.17 01:45) [7]

    > Smile ©   (07.08.17 20:50) [5]
    >
    > > Игорь Шевченко ©   (07.08.17 20:47) [3]
    > > Нет, у TComboBox есть эти события, на них надо написать
    > > обработчики, при срабатывании OnMouseEnter курсор мыши
    > будет
    > > в окне ComboBox, а при срабатывании OnMouseLeave курсор
    > > мыши покинет окно.
    >
    > Уточню, WinXP, D5
    > Этих событий у TComboBox нет

    Хуже всего что эти компоненты лежат на панели. Лежали б они на форме - проблем бы не было в Д5.
  • TComboBox (08.08.17 09:03) [8]
    > Германн ©   (08.08.17 01:45) [7]
    > Хуже всего что эти компоненты лежат на панели. Лежали б
    > они на форме - проблем бы не было в Д5.

    А, конкретно, что это бы изменило? Вряд ли появилось бы событие OnMouseEnter
  • Leonid Troyanovsky © (08.08.17 09:39) [9]

    > Германн ©   (08.08.17 01:45) [7]

    > Хуже всего что эти компоненты лежат на панели.

    А чего плохого в панели?
    Я, вроде, не раз уже рассказывал.

    https://groups.google.com/d/msg/fido7.ru.delphi.chainik/GOJJ9zwlr1I/yfJfpS1Jv6QJ

    --
    Regards, LVT.
  • Игорь Шевченко © (08.08.17 10:20) [10]

    > Уточню, WinXP, D5


    Извиняюсь. Тогда имитировать в Application.OnMessage - туда все сообщения из очереди ввода приходят, в том числе и мышиные
  • TComboBox (08.08.17 10:29) [11]
    > Leonid Troyanovsky ©   (08.08.17 09:39) [9]

    Спасибо, это именно то, что мне нужно!
  • han_malign © (10.08.17 13:21) [12]
    а еще, в целях образования, можешь посмотреть HSHintComboBox

    > {
    >   Наследник TComboBox, показывающий Hint для строки в ListBox'овой части,
    >   не видимой целиком.
    >
    >   Автор: Игорь Шевченко
    >   Дата создания: 13.04.2002
    > ......
  • TComboBox (10.08.17 19:02) [13]
    > han_malign ©   (10.08.17 13:21) [12]
    > а еще, в целях образования, можешь посмотреть HSHintComboBox

    Ветка была далеко не об этом...
    Полномасштабный и исчерпывающий ответ именно здесь:
    https://groups.google.com/d/msg/fido7.ru.delphi.chainik/GOJJ9zwlr1I/yfJfpS1Jv6QJ
  • Германн © (11.08.17 01:45) [14]

    >  Leonid Troyanovsky ©   (08.08.17 09:39) [9]
    >
    >
    > > Германн ©   (08.08.17 01:45) [7]
    >
    > > Хуже всего что эти компоненты лежат на панели.
    >
    > А чего плохого в панели?
    > Я, вроде, не раз уже рассказывал.
    >

    Плохого ничего нет. Только кода нужно много писать. Да ещё и не очень понятного большинству вопрошающих на форумах по Дельфи.
 
Конференция "Начинающим" » Событие курсор мыши над TComboBox [D5, XP]
Есть новые Нет новых   [118679   +1][b:0][p:0.001]