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

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

Выделение в ComboBoxEx


ggg ©   (2007-09-24 09:09:00) 

Проблема в том, что при выборе элемента в выпадающем списке, активная строка выделяется не полностью, а только на длину текста в ней. Пробывал перекрывать процедуру рисования элементов - не получилась, видимо там событие отличное от аналогичного в ComboBox. Может быть есть простое решение (свойство вроде FULLROWSELECT) или кто подскажет какое событие надо обрабатывать, чтобы самому нарисовать элементы?


ggg   (2007-09-24 13:59:00) [1]

> Lacmus ©  
Спасибо =)


Lacmus   (2007-09-24 13:20:00) [2]

>ggg   (24.09.07 09:09)  



unit Unit73;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, ImgList;

type
 TMyComboBoxEx = class(TComboBoxEx)
   procedure WMDrawItem(var aMessage: TWMDrawItem); message WM_DRAWITEM;
 end;

 TComboBoxEx = class(TMyComboBoxEx);

 TForm73 = class(TForm)
   ComboBoxEx1: TComboBoxEx;
   ComboBox1: TComboBox;
   ImageList1: TImageList;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form73: TForm73;

implementation

{$R *.dfm}

procedure TMyComboBoxEx.WMDrawItem(var aMessage: TWMDrawItem);
var
 bFocused: Boolean;
 Brush: HBrush;
begin
 with aMessage.DrawItemStruct^ do begin
   if (ItemState and ODS_COMBOBOXEDIT) = 0 then begin
     bFocused := itemAction = ODA_FOCUS;
     if bFocused then
       itemAction := ODA_SELECT;
     itemState := itemState and not ODS_FOCUS;
     if (itemState and ODS_SELECTED) <> 0 then
       Brush := CreateSolidBrush(ColorToRGB(clHighlight))
     else
       Brush := CreateSolidBrush(ColorToRGB(clWindow));
     try
       FillRect(hDC, rcItem, Brush)
     finally
       DeleteObject(Brush)
     end
   end else
     bFocused := False;
   inherited;
   if bFocused then
     DrawFocusRect(hDC, rcItem)
 end;
end;


ggg   (2007-09-24 13:19:00) [3]

Боюсь, это уже не вариант, хотят именно выделение всей строки ;)


Вася Правильный   (2007-09-24 12:35:00) [4]

так поступи наоборот - используй обычный комбо со своейотрисовкой рисунков


ggg   (2007-09-24 12:27:00) [5]

> Вася Правильный   (24.09.07 11:19) [1]
>>  активная строка выделяется не полностью

>и что в этом криминального? стандартное поведение

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

> Leonid Troyanovsky ©
Это стандартный компонент - TComboBoxEx. Более того, за его отрисовку отвечает не VCL, а система, почему и не получается просто переделать стандартный :(


Вася Правильный   (2007-09-24 12:07:00) [6]


> почему б не взять стандартный?

да он и есть стандартный в семерке


Leonid Troyanovsky   (2007-09-24 11:45:00) [7]


> Вася Правильный   (24.09.07 11:19) [1]

> и что в этом криминального? стандартное поведение

Видимо, имелся ввиду выпадающий список.

> ggg   (24.09.07 09:09)

Что за компонент и почему б не взять стандартный?

--
Regards, LVT.


Вася Правильный   (2007-09-24 11:19:00) [8]


>  активная строка выделяется не полностью

и что в этом криминального? стандартное поведение


Наверх

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