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

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

ComboBox: кнопки для удаления на элементах выпадающего списка [D7]


e5431 ©   (2015-06-01 20:59:00) 

Приветствую всех!

Есть такая задача:

добавить в выпадающий список ComboBox отрисовку кнопки (типа SpeedButton) на каждом элементе, при нажатии на которую происходит удаление указанного элемента из списка.
Насчет OnDrawItem вроде бы все понимаю, изображение вывести могу.
Но вот как быть с кнопками - не знаю. Это ведь не просто картинка.

Подскажите, как реализовать и что где почитать на эту тему.
Спасибо.

PS: Windows 7, Delphi 7.


MBo   (2015-06-02 06:01:00) [1]

Действие с Pt.Y лишнее, это я номер хотел вычислять.


MBo   (2015-06-02 05:58:00) [2]

Нетривиальное поведение. Юзеры не запутаются?

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with (Control as TComboBox)
   .Canvas do { Draw on control canvas, not on the form. }
 begin
   FillRect(Rect); { Clear the rectangle. }
   TextOut(Rect.Left + 25, Rect.Top, (Control as TComboBox).Items[Index]);

   if (odSelected in State) then
     DrawFrameControl(Handle, System.Classes.Rect(Rect.Left, Rect.Top,
       Rect.Left + 20, Rect.Bottom), DFC_BUTTON, DFCS_BUTTONPUSH);
 end;

end;

procedure TForm1.ComboBox1Select(Sender: TObject);
var
 Pt: TPoint;
begin
 Pt := Mouse.CursorPos;
 with Sender as TComboBox do begin
   Pt := ScreenToClient(Pt);
   if Pt.X < 20 then begin
     Pt.Y := Pt.Y - Height;
     Items.Delete(ItemIndex);
   end;
 end;
end;


Наверх

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