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

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

[ComboBox] Фон для элементов при открытии [D7, WinXP]


ins ©   (2007-05-04 19:53:00) 

Есть ли возможность реализовать отображение своего фона для каждого из элементов ComboBox при открытии списка??


{RASkov}   (2007-05-05 03:30:00) [1]

> Здесь много чего лишнего(оставил для примера). Все - то,
> что тебе надо, я выделил жирным....

Но для лучшего понимания, оставь(попробуй) сначала всё как есть....


{RASkov}   (2007-05-05 03:28:00) [2]

Кинь в новом проекте на форму КомбоБокс и пропиши обработчики в ИО

procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
 Randomize;
 ComboBox1.Style:=csOwnerDrawVariable;
 ComboBox1.Clear;
 for N:=0 to 10 do ComboBox1.AddItem('BLA-BLA', TObject(Random(3)));
 ComboBox1.ItemIndex:=0;
 ComboBox1.DropDownCount:=10;
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
var N: Integer;
begin
 ComboBox1.Canvas.Brush.Color:=RGB(30+Index*15, 30+Index*15, 30+Index*15); //Цвет фона
 ComboBox1.Canvas.FillRect(Rect);

 N:=Integer(ComboBox1.Items.Objects[Index]);
 case N of
  0: INC(Rect.Left, 2);
  1: INC(Rect.Left, 12);
 else INC(Rect.Left, 22);
 end;
 case N of
  0: ComboBox1.Canvas.Font.Color:=clRed;
  1: ComboBox1.Canvas.Font.Color:=clYellow;
 else ComboBox1.Canvas.Font.Color:=clHotLight;
 end;
 INC(Rect.Top);
 if odSelected in State then ComboBox1.Canvas.Brush.Color:=clSkyBlue;
  ComboBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, ComboBox1.Items[Index]);
 DEC(Rect.Right, 20);
 ComboBox1.Canvas.Font.Color:=clNavy;
 DrawText(ComboBox1.Canvas.Handle, PChar(IntToStr(Index)), Length(IntToStr(Index)), Rect, DT_RIGHT);
 ComboBox1.Canvas.Pen.Color:=clGreen;
 ComboBox1.Canvas.MoveTo(Rect.Right+7, Rect.Top);
 ComboBox1.Canvas.LineTo(Rect.Right+2, Rect.Bottom-1);
 INC(Rect.Right, 15);
 ComboBox1.Canvas.Font.Color:=clBlue;
 DrawText(ComboBox1.Canvas.Handle, PChar(IntToStr(N)), 1, Rect, DT_RIGHT);
end;

procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
begin
 Height:=16+Index;
end;


Здесь много чего лишнего(оставил для примера) все - то, что тебе надо, я выделил жирным....


Наверх

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