Как сделать так, чтобы указатель мыши появлялся, когда указатель мыши перемещался по форме после того, как дал команду раскрывающегося списка для отображения в выпадающем списке? - PullRequest
3 голосов
/ 30 апреля 2019

У меня возникла проблема, когда:

  1. У меня есть форма с помощью только поля со списком.
  2. У поля со списком есть фокус, и мышь не зависает над формой, когда появляется пункт 3.
  3. Я запускаю раскрывающийся список в выпадающем списке, чтобы отобразить его при нажатии клавиши.

Когда раскрывающийся список виден, а затем перемещаю указатель мыши над формойуказатель либо невидим, показывает, что он занят, либо показывает значок изменения размера, но не возвращается к обычному указателю, когда находится над формой.

Есть ли что-то, что можно сделать, чтобы прираскрывающийся список выпадающего списка показывает, что указатель мыши виден, когда я перемещаю указатель над формой?

Я пытался:

  • Applicaiton.ProcessMessages после показа выпадающего списка-down.
  • Смена фокуса на форму, в которой выпадающий список включен после отображения раскрывающегося списка.
  • Добавление Key := #0; после вызова раскрывающегося списка для отображения.

    procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
    begin
      SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, Integer(True), 0);
      Key := #0;
    end;
    
  • Попытка с использованием таймера для запуска раскрывающегося списка в событии нажатия клавиши.

  • Попытка с использованием "SetCursor" после подачи команды на сброс- вниз, чтобы появиться.
  • Попытка с использованием ".DroppedDown", но не вижу никакой разницы в результате от "SendMessage".

Я надеюсь, что смогу показатьуказатель мыши после выпадающего списка отображается, но вместо этого он скрыт.Спасибо за любые предложения.

(ПРИМЕЧАНИЕ. Эта проблема, с которой я столкнулся, не является исключительной для Delphi. Мне удалось продублировать проблему с помощью Visual C # 2017. В любом случае, если есть способ исправить это,было бы хорошо узнать).

1 Ответ

1 голос
/ 01 мая 2019

Как уже прокомментировал вопрос, проблема не связана с Delphi. Вы можете наблюдать то же поведение в диалоговых окнах, которые содержат аналогичную комбинацию, которую представляет ОС. Одним из примеров является тот, что в диалоговом окне «Выполнить».

Вовлечение одной среды, переустановка курсора в обработчике событий OnDropDown устраняет проблему.

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
  winapi.windows.SetCursor(Screen.Cursors[Cursor]);
end;

Изначально я проверял вышеописанное, потому что никто не звонит SetCursor после выпадающего списка. Хотя кажется, что никто не называет это раньше. Поэтому я понятия не имею о причине или о том, почему исправление, описанное выше, работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...