WEB форумы на jedi
[Форум] [Помощь] [Поиск] [Выйти]
Добро пожаловать, [info]User

WEB форумы на jedi [ПОИСК] [Архив до 03.2006]

Тема Combobox К предыдущему сообщению На следующее сообщение Программирование

Отправил Sleep-Walker в 11:25 03.05.2004[Ответить]
Проблема следующая: Список в комбобоксе формируется динамически, иногда возникает ситуация, когда строка не убирается в список по ширине. Необходимо при выборе элемента показывать строку, на которую наведён курсор ещё где-нибудь, например в статус баре, но я не нашёл события смены позиции курсора мыши. Как мне получить доступ к этому элементу? или может можно сделать ширину выпадающего списка зависимой от длины самой длинной строки?


Отправил russian в 16:37 03.05.2004[Ответить]
SPYWORKS поможет. Нужно ловить событие (субклассированием).


Отправил Sleep-Walker в 12:59 04.05.2004[Ответить]
Подробней плиз... не сталкивался с этой штукой


Отправил russian в 19:25 04.05.2004[Ответить]
Контрольчик SpyWorks
http://www.desaware.com/products/universalnet/spyworks/index.aspx
http://www.desaware.com/products/universalnet/demos.aspx
или из комплекта VC++6.0 утилита Spy++ (desaware выпускало под любой язык, входящий в студию). Даёт возможность, отслеживать сообщения Windows.
Можно и без них (но не безопасно) используя API:
GetWindowLong
SetWindowLong
CallWindowProc
PrevWndProc
OldWindowProc


Отправил Sleep-Walker в 21:02 05.05.2004[Ответить]
Вся фигня в том, что прога на делфях.... остаётся только указанное апи?


Отправил russian в 21:54 05.05.2004[Ответить]
В данном случае с API нужно работать осторожно, бывает одна ошибка и делфи вместе с Windo-й придётся переустанавливать. Редко, зато как метко.

Может, имеет смысл поискать другой Combobox, есть, наверное, сторонние производители.
Может, имеет смысл сделать Combobox из двух текстовых полей (или текстовое поле + ListBox) и кнопки.


Отправил GoodMaker в 22:41 05.05.2004[Ответить]
а если изменять исходный код библиотеки?


Отправил Mighty в 23:11 05.05.2004[Ответить]
У меня даже кусок кода есть как это сделать, только я сам пытался не смог(не смог поймать WM_CTLCOLORLISTBOX черт знает когда эта зараза посылается rtfm не помог абсолютно..или у меня винда не стандартная ;(() - или руки,но могу предложить вариант лучше - создай свой компонент TCustomEdit+TSpeedButton+TListBox( TEnhComboBox = class(TCustomPanel)) - это самый будет простой, быстрый и безболезненный вариант - все нужные тебе свойства введешь и ненужное выкинешь..;))


Отправил Song в 15:37 06.05.2004[Ответить]
Гораздо проще просто расширить список по горизонтали при его выводе. Делов-то..


Отправил Sleep-Walker в 21:23 06.05.2004[Ответить]
Расширять список - не выход в моей ситуации, строка может быть очень длинная.


Отправил KiaProg в 23:33 06.05.2004[Ответить]
В исходниках VCL нужно найти место, где выпадающий список перерисовывает элемент делая его выделенным. После этого можно найти место откуда вызывается эта перерисовка. Одним из мест будет реакция на перемещение мыши (в методе или в сообщении).
Если это в методе и он не private, то создать собственный компонент-потомок от выпадающего списка и переопеделить метод (в случае protected методов сработает аномалия защиты). Если не удается переопределить, то создать компонент от предка выпадающего списка, скопировать из исходника весь код для этого компонента и изменить лишь нужное место, например, добавив событие.


Отправил Song в 08:35 07.05.2004[Ответить]
{ Расширять список - не выход в моей ситуации, строка может быть очень длинная. }
Тогда ты выбрал неправильный компонент. Комбокс сам по себе просто неудобен для длинных значений.


Отправил Crypto в 23:31 21.05.2004[Ответить]
А я где то видел такой комбобокс, сам Edit у него маленький, а droplist широкий... Может там свойство какое есть?
Вообще можно сделать popup-меню вместо комбобокса, которое тоже будет динамически менятся и попапаться по нажатию какой нить ToolButton, это легко делается
Или просто отдельное окно-справочник...
Ну как ты понял, я предлагаю альтернативные варианты интерфейса...


Отправил Пuлaгeя в 23:14 09.06.2004[Ответить]
А если попробовать hint использовать. Тогда при наведении на объект будет высвечиватьяс полное имя


Отправил Sleep-Walker в 23:23 11.06.2004[Ответить]
Так как имя в хинт-то получить?если список открыт, то фик ты нормальным способом получишь индекс выделенного элемента))