Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TListbox c lbOwnerDrawFixed, проблемы с выделением 
:(
    Опции темы
_hunter
  Дата 23.9.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



у меня такой обработчик OnDrawItem
( извените за язык, но думаю принцип понятен + IMHO ошибка у меня в реализации а не в коде )
Код
{
   TListBox *listBox = dynamic_cast<TListBox*>(Control);

   if ( State.Contains(odFocused) )
   {
       listBox->Canvas->Brush->Color = clWhite;
       listBox->Canvas->Brush->Style = bsSolid;
       listBox->Canvas->Font->Color = clBlack;
       listBox->Canvas->Pen->Color = clBlack;
       listBox->Canvas->Pen->Mode = pmCopy;
       listBox->Canvas->Pen->Style = psDot;
   }
   else  if ( (State.Contains(odSelected)) && (listBox->Selected[Index]) )
   {
       listBox->Canvas->Brush->Color = clHighlight;
       listBox->Canvas->Brush->Style = bsSolid;
       listBox->Canvas->Font->Color = clHighlightText;
       listBox->Canvas->Pen->Color = clBlack;
       listBox->Canvas->Pen->Mode = pmCopy;
       listBox->Canvas->Pen->Style = psSolid;
   }
   else
   {
       listBox->Canvas->Brush->Color = clWhite;
       listBox->Canvas->Brush->Style = bsSolid;
       listBox->Canvas->Font->Color = clBlack;
       listBox->Canvas->Pen->Color = clWhite;
       listBox->Canvas->Pen->Mode = pmCopy;
       listBox->Canvas->Pen->Style = psSolid;
   }

   listBox->Canvas->FillRect(Rect);
   listBox->Canvas->TextOut(Rect.Left, Rect.Top, listBox->Items->Strings[Index]);
}


теперь к проблеме:
при перемещении по списку вверх/вниз происходит отрисовка по типу Selected ( на любых Item' ах) + при попытке выделения ( Ctrl + щелчек мышью ) выделение происходит при _уходе_ курсора с выделяемого элемента

Что я неправильно делаю ( или как делать правильно )?

Заранее благодарю за ответ.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 24.9.2004, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



_hunter извени за язык smile.gif (PS: а то вдруг другие не поймут)
Код
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
var LB:TListBox;
begin
LB:=(Control as TListBox);
if (odSelected in State)and(LB.Selected[Index]) then
 begin
  LB.Canvas.Brush.Color:=clRed;//clHighlight;
  LB.Canvas.Brush.Style:=bsSolid;
  LB.Canvas.Font.Color:=clHighlightText;
  LB.Canvas.Pen.Color:=clBlack;
  LB.Canvas.Pen.Mode:=pmCopy;
  LB.Canvas.Pen.Style:=psSolid;
 end else
 begin
  LB.Canvas.Brush.Color:=clWhite;
  LB.Canvas.Brush.Style:=bsSolid;
  LB.Canvas.Font.Color:=clBlack;
  LB.Canvas.Pen.Color:=clWhite;
  LB.Canvas.Pen.Mode:=pmCopy;
  LB.Canvas.Pen.Style:=psSolid;
 end;
LB.Canvas.FillRect(Rect);
LB.Canvas.TextOut(Rect.Left, Rect.Top,LB.Items.Strings[Index]);
end;
Т.е выкинь вот это:
Код
if ( State.Contains(odFocused) )
  {
      listBox->Canvas->Brush->Color = clWhite;
      listBox->Canvas->Brush->Style = bsSolid;
      listBox->Canvas->Font->Color = clBlack;
      listBox->Canvas->Pen->Color = clBlack;
      listBox->Canvas->Pen->Mode = pmCopy;
      listBox->Canvas->Pen->Style = psDot;
  }
или замени в этом коде listBox->Canvas->Brush->Color = clWhite на listBox->Canvas->Brush->Color = clHighlight

Удачи.

Это сообщение отредактировал(а) Girder - 24.9.2004, 09:49


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.