Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

TListBox +OnDrawItem   Найти похожие ветки 

 
WildBoolean   (2008-03-20 15:12) [0]

Есть пару вопросов.

У меня такой код:
const
 Colors: array[0..1] of TColor = (clHighlight, clHighlightText);
begin
 with TListBox(Control).Canvas do
 begin
   Brush.Style := bsSolid;
   if odSelected in State then
   begin
     Brush.Color := Colors[0];
     FillRect(Rect);
     Brush.Color := Colors[1];
     Windows.DrawFocusRect(Handle, Rect);
   end else
   begin
     Brush.Color := clWindow;
     FillRect(Rect);
   end;
   Rect.Top := Rect.Top + ???
   Rect.Left := Rect.Left + 2;

   Brush.Style := bsClear;
   Font.Color := Colors[Byte(odSelected in State)];

   DrawText(Handle, PChar(TListBox(Control).Items[Index]),
            Length(TListBox(Control).Items[Index]), Rect, 0);
 end;          
end;


1. Жирным отмечена отрисовка фокуса, но если я во время установки фокуса переключусь с TListBox на любой другой контролл, то фокус исчезает, а на его месте появляется желтая рамка. Как убрать эту рамку?

2. Как вычислить вертикальныю середину у Rect? Хочу вывести текс по середине (Отмечено жирным второй раз)

Спасибо.


 
{RASkov} ©   (2008-03-20 15:17) [1]

> Rect.Top := Rect.Top + ???

Rect.Top := Rect.Top + ((Rect.Bottom-Rect.Top) div 2);


 
{RASkov} ©   (2008-03-20 15:19) [2]

> Хочу вывести текс по середине

Только тебе нужно еще и высоту текста делить пополам и.... ну понял, да? :)


 
WildBoolean   (2008-03-20 15:35) [3]

Спасибо, это понял.

Остался только первый вопрос.


 
Игорь Шевченко ©   (2008-03-20 16:42) [4]


> 1. Жирным отмечена отрисовка фокуса, но если я во время
> установки фокуса переключусь с TListBox на любой другой
> контролл, то фокус исчезает, а на его месте появляется желтая
> рамка. Как убрать эту рамку?


В OnDrawItem бесполезно рисовать фокус

RTFS StdCtrls.pas

Если хочется странного, переписывай метод CNDrawItem у своего наследника T[Custom]ListBox или подменяй его оконную процедуру

Пример в http://code.progler.ru/get/193


 
Kolan ©   (2008-03-20 16:44) [5]

HideSelection := False; не поможет?


 
Kolan ©   (2008-03-20 17:00) [6]

У меня вопрос. *Тянет руку.

Вот это зачем все?
const
Colors: array[0&#1331] of TColor = (clHighlight, clHighlightText);
&#133
 Brush.Color := Colors[0];
 &#133
 Brush.Color := Colors[1];
&#133

?



Страницы: 1 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1205758991
savyhinst
2008-03-17 16:03
2008.04.13
Повернуть картинку


6-1183643255
aDLER
2007-07-05 17:47
2008.04.13
Перехват траффика приложения


2-1205762898
Михаил
2008-03-17 17:08
2008.04.13
Компонент для выбора толщины и вида линии


2-1205998156
Vetal73
2008-03-20 10:29
2008.04.13
Выход из приложения


2-1205652230
NewSer
2008-03-16 10:23
2008.04.13
В чём причина появления ошибки: «parameter Kod not found»?(ADO)