Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Хочу сделать комбобокс который подтягивает данные в список из базы после того как в него ввели несколько символов.
В принципе всё работает отлично, но есть один нюанс: если я в процессе делаю DroppedDown := True; то список открывается, но пропадает курсор мыши. Причём если ей подвигать - он явно есть, элементы списка выделяются, но курсора не видно. Когда список открываешь кнопкой со стрелкой, то такого эффекта не наблюдается.

Может кто-нибудь посоветовать как это победить?..

P.S: Курсор пропадает когда начинаешь вводить текст в комбобокс, ShowCursor(TRUE); не помогает.

Сообщение было отредактировано: 8 апр 21, 18:53
8 апр 21, 18:58    [22306138]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

"Панель управления" - "Мышь" - "Указатель" - "Скрывать курсор мыши при вводе текста".

Posted via ActualForum NNTP Server 1.5

8 апр 21, 19:04    [22306139]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Dimitry Sibiryakov

"Панель управления" - "Мышь" - "Указатель" - "Скрывать курсор мыши при вводе текста".

Это замечательно, но мне надо показать курсор только для одного контрола, это невозможно через WinApi?

Причём проблема в том, что при обычном вводе - курсор снова появляется как только ты сдвинешь мышь с места, а в моём случае он не появляется пока не будет закрыт список комбобокса.
8 апр 21, 19:11    [22306147]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Кусок кода:
  if (LText.Length >= 3) and (LText <> FComboFilter) then
  begin
    Items.BeginUpdate;
    try
      Items.Clear;
//      DroppedDown := True;
      Screen.Cursor := Cursor;

Если выделенная строка закомментирована, то при наборе 3го символа - курсор мыши становится видимым. Если нет - открывается список, но курсор мыши остаётся невидимым. Я не понимаю куда копать 😒
8 апр 21, 19:31    [22306152]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2520
Попробуй навскидку обернуть, типа:

ShowCursor(False);
DroppedDown := True;
ShowCursor(True);


это на коленке, не проверял. А вообще надо разбираться что происходит
8 апр 21, 21:57    [22306185]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
white_nigger
Попробуй навскидку обернуть, типа:


Вот так пробовал, толку 0:
DroppedDown := True;
ShowCursor(True);

Такое ощущение что DropDown делает Mouse Capture и после этого невозможно управлять видимостью курсора. Во всяком случае если после вызвать ReleaseCapture(); то список моментально закрывается.

GetCursorInfo() показывает и flags = 0, и hCursor = 0, именно поэтому я и сделал через Screen.Cursor.

Вообще уже даже предположения закончились что тут не так. Пытался показать курсор, вызвать Application.ProcessMessages, а потом открыть список через PostMessage() - всё то же самое.
8 апр 21, 23:07    [22306218]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Попробуй на чистом API чтобы исключить баг в VCL.

Posted via ActualForum NNTP Server 1.5

9 апр 21, 00:25    [22306233]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
delphinotes
Member

Откуда: Санкт-Петербург
Сообщений: 379
А если программно перед DropDown подвигать курсор на пару пикселей туда-сюда?
9 апр 21, 00:43    [22306235]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Dimitry Sibiryakov

Попробуй на чистом API чтобы исключить баг в VCL.

Жёстко... Кроме того, в VCL там почти ничего нет, завтра просто в обработчике сообщений отключу VCL-ную часть и проверю.

Сообщение было отредактировано: 9 апр 21, 00:45
9 апр 21, 00:52    [22306236]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

alekcvp
Кроме того, в VCL там почти ничего нет

В VCL наворочено столько дерьма, что я даже не уверен настоящий ли там Combo Box или они
ручками пририсовали к Edit кнопку и вываливают List Box самостоятельно.

Posted via ActualForum NNTP Server 1.5

9 апр 21, 01:03    [22306238]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Dimitry Sibiryakov,

Настоящий. Там даже список открывается сообщением, просто потом ещё нотификации открытия обрабатывается, в основном обновляются размеры и вызываются события. Т.е. именно при раскрытии лишнего там минимум.

Сообщение было отредактировано: 9 апр 21, 01:22
9 апр 21, 01:29    [22306240]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207

09.04.2021 01:29, alekcvp пишет:
> Настоящий. Там даже список открывается сообщением,

сообщения разные бывают.
в VCL есть и свои собственные.

Posted via ActualForum NNTP Server 1.5

9 апр 21, 11:32    [22306349]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
Мимопроходящий

сообщения разные бывают.
в VCL есть и свои собственные.

Я в курсе, спасибо.
CB_SHOWDROPDOWN
9 апр 21, 11:40    [22306359]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
delphinotes
А если программно перед DropDown подвигать курсор на пару пикселей туда-сюда?

Не работает.
9 апр 21, 16:05    [22306569]     Ответить | Цитировать Сообщить модератору
 Re: TComboBox.DroppedDown и курсор мыши.  [new]
alekcvp
Member

Откуда:
Сообщений: 2792
В итоге сделал костыль: вместо DroppedDown := True; создаю таймер на 100 мс, а по таймеру уже вызываю список.
Так работает нормально.
9 апр 21, 16:49    [22306600]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить