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

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

ооп вопрос [D7]


серж ©   (2008-02-20 14:39:00) 

Нужен наследник TComboBox, ну точнее наверное TCustomComboBox, в котором я хочу изменить отрисовку в
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;

Как это следует сделать? Посмотрите реализацию TCustomComboBox, подскажите пожалуйста.


серж   (2008-02-20 14:52:00) [1]

Может быть и зря я пытаюсь это сделать. Ниже есть тема, где есть описание самой проблемы: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1203486854&n=18

У меня не получилось исправить ситуацию через OnDrawItem в TComboBox.

В итоге, я хочу исправить обработчик только одной строкой:
procedure TCustomComboBox.CNDrawItem(var Message: TWMDrawItem);
var
 State: TOwnerDrawState;
begin
 with Message.DrawItemStruct^ do
 begin
   State := TOwnerDrawState(LongRec(itemState).Lo);
   if itemState and ODS_COMBOBOXEDIT 0 then
     Include(State, odComboBoxEdit);
   if itemState and ODS_DEFAULT 0 then
     Include(State, odDefault);
   FCanvas.Handle := hDC;
   FCanvas.Font := Font;
   FCanvas.Brush := Brush;
   if (Integer(itemID) >= 0) and (odSelected in State) then
   begin
     FCanvas.Brush.Color := clHighlight;
     FCanvas.Font.Color := clHighlightText
   end;
   if Integer(itemID) >= 0 then
     DrawItem(itemID, rcItem, State) else
     FCanvas.FillRect(rcItem);                  
    if Integer(itemID) -1 then         
      if (odFocused in State) then DrawFocusRect(hDC, rcItem);
   FCanvas.Handle := 0;
 end;
end;


Palladin   (2008-02-20 14:41:00) [2]

а зачем? наследоваться необязательно... TComboBox предоставляет для этого все возможности...


Наверх

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