Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2007, 15:37   #1
Aslan
Пользователь
 
Регистрация: 05.07.2007
Сообщений: 29
По умолчанию Процедура DrawItem в TListBox...

Неприятность при использовании DrawItem в TListBox. Моя процедура полностью отрисовывает строку в ListBox, делает всё как надо, только вот на активной строке отрисовывается пунктирный прямоугльник. Как от него избавиться? Изменение Style не помогает
Изображения
Тип файла: gif Punktir.gif (2.0 Кб, 240 просмотров)
Если бы строители строили дома так, как программисты пишут программы, тогда первая залётная птичка разрушела весь город
Aslan вне форума Ответить с цитированием
Старый 05.07.2007, 20:43   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Действительно, что-то никак не выходит избавиться от прямоугольника. Может тогда использовать не ListBox, а DrawGrid ? Там точно можно настроить всё как надо. ListBox пусть хранит строки, но будет невидимый, а DrawGrid будет эти строки отображать при прорисовке.
Jeni вне форума Ответить с цитированием
Старый 06.07.2007, 11:15   #3
Aslan
Пользователь
 
Регистрация: 05.07.2007
Сообщений: 29
По умолчанию

У меня тоже была мысль заменить объет TListBox чем то похожим. Надо подумать.
Спасибо за ответ!
Если бы строители строили дома так, как программисты пишут программы, тогда первая залётная птичка разрушела весь город
Aslan вне форума Ответить с цитированием
Старый 09.08.2007, 19:35   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Цитата:
Сообщение от Aslan Посмотреть сообщение
Неприятность при использовании DrawItem в TListBox. Моя процедура полностью отрисовывает строку в ListBox, делает всё как надо, только вот на активной строке отрисовывается пунктирный прямоугльник. Как от него избавиться? Изменение Style не помогает
А что это даст, если небудет контура. Как покажешь что выбрано.
А контур что-то не убирается.
Alter вне форума Ответить с цитированием
Старый 09.08.2007, 20:08   #5
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

Нужно отрисовывать тот же прямоугольник еще раз, если он нарисован. тогда он исчезнет.

Вот кусок из моего кода:
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var List:TListBox;
begin
    List:=Control as TListBox;
    with List.Canvas, Rect do
        begin
	    if odSelected in State then
	    begin
	        Brush.Color:=clClickedColor;
	        Font.Color:=clHighlightText;
	    end
	    else
	    begin
	        Brush.Color:=clWindow;
	        Font.Color:=clWindowText;
	    end;

	    FillRect(Rect);
               if odFocused in State then Windows.DrawFocusRect(List.Canvas.Handle, Rect);
               TextOut(Left + 1, Top + 1, List.Items[Index]);
        end;  
end;
Константы цвета свои подставите, я использовал свои, т.е. системные, но смешанные в разных пропорциях для соблюдения общей цветовой схемы.
Изображения
Тип файла: png screen.PNG (2.2 Кб, 217 просмотров)

Последний раз редактировалось Net; 09.08.2007 в 20:16.
Net вне форума Ответить с цитированием
Старый 10.08.2007, 01:08   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я вот посмотрел как сделано в плеерах в плейлистах. Там этот самый пунктир начинается после картинки, пикселей через 15. Но он есть. Я пробовал также сделать, не получилось.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 04.09.2011, 18:24   #7
strelokjob
 
Регистрация: 06.06.2009
Сообщений: 3
По умолчанию

Лучше всего, я думаю, это перекрыть TCustomListBox.CNDrawItem своим кодом. Тут никаких проблем возникнуть не должно.
strelokjob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос с TListBox Манжосов Денис :) Помощь студентам 11 06.04.2008 23:26
Помощь с TListBox Манжосов Денис :) Помощь студентам 12 30.03.2008 13:46
добавить TImage в Tlistbox ZhekON Общие вопросы Delphi 1 20.02.2008 23:19
ищу компонент типа TListBox Cherni Voron Компоненты Delphi 13 30.05.2007 23:00