Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
2-1205596742
Roman_A
2008-03-15 18:59
2008.04.13
Что быстрее CopyFile? или через буфер?


15-1204535379
Vemer
2008-03-03 12:09
2008.04.13
Ошибка с rtl60.bpl на новойм компьютере.


2-1206027422
AntonUSAnoV
2008-03-20 18:37
2008.04.13
Не могу установить фильтр на таблицу


2-1205931312
Deled
2008-03-19 15:55
2008.04.13
Регистры


11-1180814127
Rusya
2007-06-02 23:55
2008.04.13
А теперь ecmListEdit




   Наверх