Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
11-1180814127
Rusya
2007-06-02 23:55
2008.04.13
А теперь ecmListEdit


15-1204235123
boa_kaa
2008-02-29 00:45
2008.04.13
На тему пиратства


15-1203934590
DelphiN!
2008-02-25 13:16
2008.04.13
Инструменты для поиска "утечки" памяти в проекте


6-1185177400
Dmitry_177
2007-07-23 11:56
2008.04.13
Сокеты: разрыв соединения для последующего соединения


3-1195444789
Бакук
2007-11-19 06:59
2008.04.13
Слетает «привязка» к датамодулю





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский