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

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

ComboBox - Цвет [D5, Win2k]


nimble ©   (2002-07-01 07:26:00) 

В списке есть следующие записи:
111
222
333
444
Как сделать так, чтобы у строки "333" цвет шрифта был, допустим, красный?


nimble   (2002-07-02 00:52:00) [1]

->Игорь Шевченко
Спасибо!!!


Игорь Шевченко   (2002-07-01 10:07:00) [2]

Когда у ComboBox установлен один из стилей csOwnerDrawFixed, csOwnerDrawVariable, то возможность ввода с клавиатуры пропадает и отсается только возможность выбора из списка. Microsoft объясняет это тем, что тем, что стандартный Edit не имеет возможности отрисовки пользователем его содержимого, а так как заранее неизвестно, что именно пользователь будет рисовать, то окно Edit ComboBox"а меняется на окно Static, которое отрисовку пользователем поддерживает, но не поддерживает ввод.

Не самое плохое решение - имитация ComboBox"а путем 3-х компонент - TEdit, TSpeedButton и TListBox. При этом ListBox рисуется пользователем, а в Edit, как обычно вводятся данные.
Второй способ более сложный и требует написания нового компонента, наследника от TComboBox и изменения оконной процедуры его окна ListBox. Пример такого способа можно посмотреть на http://www.delphikingdom.com/treasury/combo.htm.
Можно также использовать TComboBoxEx, если версия comctl32.dll позволяет его использовать - у него возможностей больше. Его поддержка добавлена в Delphi 6.

С уважением,


tovSuhov   (2002-07-01 09:11:00) [3]

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


nimble   (2002-07-01 08:40:00) [4]

Как закрасить я разобрался:
1. свойстово Styleустанавливаем в csDropDown;
2. if ComboBox1.Items[index]="111" then ComboBox1.Canvas.Font.Color:=clRed;
ComboBox1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,ComboBox1.Items[Index]);


А теперь возникла другая проблема:( Когда меняешь свойство Style, то пропадает возможность вводить данные с клавиатуры. Че делать !?


tovSuhov   (2002-07-01 08:10:00) [5]

Ну что-то типа:
if ComboBox1.Items.Strings[Index] = "333"
then
begin
ComboBox1.Canvas.Font.Color = clRed;
end;


nimble   (2002-07-01 07:52:00) [6]

А что там конкретно писать?


tovSuhov   (2002-07-01 07:42:00) [7]

Обрабатывай OnDrawItem...


Наверх

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