как установить вкладку части списка со списком TComboBox в Delphi - PullRequest
0 голосов
/ 19 февраля 2010

Вы можете легко добиться эффекта нескольких столбцов в списке, установив свойство TabWidth в TListbox. Например, http://delphi.about.com/cs/adptips2000/a/bltip1200_3.htm

Мне нужно сделать то же самое в выпадающем списке ComboBox, но выпадающие списки не публикуют никаких свойств TabWidth.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 февраля 2010

В комментарии к этот ответ советует вам нарисовать список элементов, которые вы говорите:

Мне интересно, почему я должен это делать, когда требуемая функциональность уже существует в списке

Поле со списком на самом деле состоит из трех собственных дочерних окон - самого поля со списком, встроенного редактирования и списка. Вы можете использовать функцию GetComboBoxInfo(), чтобы заполнить структуру COMBOBOXINFO (т.е. запись TComboBoxInfo) информацией об элементе управления, и она вернет 3 HWND элементы в нем. При этом вы можете изменить внешний вид и поведение списка. В принципе.

Чтобы в окне списка использовались табуляции, необходимо установить флаг стиля LBS_USETABSTOPS. К сожалению, это не может быть включено позже, список должен быть создан с ним. Таким образом, вы можете использовать эту функциональность только в том случае, если сможете включить флаг стиля для списка, который создается во время вызова CreateWindowEx() для поля со списком. AFAICS это можно сделать только путем перехвата самого вызова CreateWindowEx(), определения внутреннего вызова, создающего окно списка, и изменения переданного стиля. Это означает изменение кода во время выполнения, причем не в вашем исполняемом файле, а в Windows DLL.

Рисование элементов списка владельцем выглядит так, как будто это будет намного проще.

0 голосов
/ 19 февраля 2010

Из того, что я знаю, здесь не так просто, как TabWidth, но вы можете переопределить метод Paint и нарисовать его самостоятельно.Глядя на списки и источники комбинированного списка может помочь.

...