![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выделение в 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]
> активная строка выделяется не полностью
и что в этом криминального? стандартное поведение