![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TListBox +OnDrawItem [D7]
WildBoolean © (2008-03-20 15:12:00)Есть пару вопросов.
У меня такой код:
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? Хочу вывести текс по середине (Отмечено жирным второй раз)
Спасибо.
Kolan (2008-03-20 17:00:00) [1]У меня вопрос. *Тянет руку.
Вот это зачем все?
const
Colors: array[0Գ] of TColor = (clHighlight, clHighlightText);
Brush.Color := Colors[0];
Brush.Color := Colors[1];
?
Kolan (2008-03-20 16:44:00) [2]
HideSelection := False;не поможет?
Игорь Шевченко (2008-03-20 16:42:00) [3]
> 1. Жирным отмечена отрисовка фокуса, но если я во время
> установки фокуса переключусь с TListBox на любой другой
> контролл, то фокус исчезает, а на его месте появляется желтая
> рамка. Как убрать эту рамку?
В OnDrawItem бесполезно рисовать фокус
RTFS StdCtrls.pas
Если хочется странного, переписывай метод CNDrawItem у своего наследника T[Custom]ListBox или подменяй его оконную процедуру
Пример в http://code.progler.ru/get/193
WildBoolean (2008-03-20 15:35:00) [4]Спасибо, это понял.
Остался только первый вопрос.
{RASkov} (2008-03-20 15:19:00) [5]> Хочу вывести текс по середине
Только тебе нужно еще и высоту текста делить пополам и.... ну понял, да? :)
{RASkov} (2008-03-20 15:17:00) [6]> Rect.Top := Rect.Top + ???
Rect.Top := Rect.Top + ((Rect.Bottom-Rect.Top) div 2);