Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ComboBox [D7]


серж ©   (2008-02-20 08:54:00) 

Есть обычный ComboBox, csOwnerDrawVariable, заполненный например на три пункта. А теперь если щелкнуть по нему, посмотреть на выпадающее меню и после щелкнуть на любой части формы, то в ComboBox отсается по краям черная рамка.

Как избавиться от нее?


Leonid Troyanovsky   (2008-02-20 19:46:00) [1]


> серж   (20.02.08 13:14) [13]

> проблема черной рамки.

На самом деле - это знак.
Скажем,  черная метка.

--
Regards, LVT.


серж   (2008-02-20 13:14:00) [2]

Ну ItemIndex это я понял конечно, но мне как раз не хочется делать при старте уже выбранный элемент.

Есть ещё идеи, как избавиться от лишнего черного фокуса?

У меня конечно есть такая малость безумная идея - сделать своего наследника TCustomComboBox и попробовать все же как-то исправлять фокус - но я даже не знаю в чем может быть проблема черной рамки.


oldman   (2008-02-20 11:29:00) [3]

При старте программы меняй ItemIndex


серж   (2008-02-20 11:27:00) [4]

Я не понимаю. У меня все данные в Items - заполненные, там: 1, 2, 3, 4, 5; "пустых" значений я не вводил.


oldman   (2008-02-20 11:13:00) [5]

А ты его не делай пустым :)))


серж   (2008-02-20 11:12:00) [6]

Да, это оказался фокус. Я для полной уверенности эксперимента удалил из TCustomComboBox момент рисования фокуса (DrawFocusRect), - все, эта рамка пропала, как впрочем и нормальный фокус.

Но все равно я не понимаю, отчего он рисует такой черный фокус, вместо традиционного. И как от этого корректно избавляться.


> 1. Выбери итем в комбобоксе.
> 2. Щелкни на форму куда-нибудь.
> 3. Открой комбобокс и щелкyи в любое место формы.


Если выбрать элемент - то все ок, будет нормальный фокус нарисован. А вот с пустым - получается рамка.

Я хочу избавиться от этого веселого черного фокуса.


oldman   (2008-02-20 10:32:00) [7]

У тебя поле пустое.

А теперь проведи эксперимент:
1. Выбери итем в комбобоксе.
2. Щелкни на форму куда-нибудь.
3. Открой комбобокс и щелкyи в любое место формы.

Результат тебя поразит. :)))


{RASkov}   (2008-02-20 10:26:00) [8]

> [6] серж   (20.02.08 10:19)
> А темы в windows: включены или отключены?

Включена - стандартная

> Снял скриншот рамки:

Не уверен, но походу это фокус ввода. Проверь щелкнув по другому контролу, получающему фокус, потом опять по комбику, можно не раскрывая...

ЗЫ: Фокус ввода рисуется в приватном методе:
procedure TCustomComboBox.CNDrawItem(var Message: TWMDrawItem);
....
if odFocused in State then DrawFocusRect(hDC, rcItem);:


серж   (2008-02-20 10:19:00) [9]

А темы в windows: включены или отключены?

Снял скриншот рамки:
http://img149.imageshack.us/img149/3356/24993076eu6.jpg


{RASkov}   (2008-02-20 10:14:00) [10]

> [4] серж   (20.02.08 10:10)
> Пример: брось на форму TComboBox.....

Ничего криминального у меня нет....)

Может ты имеешь в виду фокус ввода? ...пунктирную рамку в 1 px
ЗЫ У меня тоже D7)


серж   (2008-02-20 10:10:00) [11]

В том то и дело, что даже ничего не рисуя в режиме csOwnerDrawVariable получается рамка.

Пример: брось на форму TComboBox, установи его в csOwnerDrawVariable, заполни Items на пару пунктов.

Все, запускай: теперь нажми на стрелку выпадающего списка, проведи мышкой по пунктам, пусть они подсветятся (не нажимай на них), а потом просто кликни по форме. В итоге - получается рамка.


{RASkov}   (2008-02-20 10:01:00) [12]

> [2] серж   (20.02.08 09:55)
> но я не понимаю откуда появляется такая рамка

А я вот не понимаю, что там вообще за рамка у тебя :(
Брось кодом, где рисуешь комбик....


серж   (2008-02-20 09:55:00) [13]

Брр... ну я это понимаю, но я не понимаю откуда появляется такая рамка? Я не рисую эту рамку сам.

Такой "фокус" происходит на ComboBox, даже без обработки OnDrawItem. Голый ComboBox, csOwnerDrawVariable - появляется рамка. Как от нее избавиться?


{RASkov}   (2008-02-20 09:43:00) [14]

> [0] серж   (20.02.08 08:54)
> Как избавиться от нее?

Так тыж сам его(ComboBox) рисуешь

> cs OwnerDrawVariable


Наверх

Титульная страница Поиск, карта сайта Написать письмо