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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 00:22   #1
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию ListBox DrawItem

Выделяю нужные мне строки в ListBox красным цветом:

Код:
procedure TMain.ListBox2DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
i: integer;
A: set of byte;
begin
  XMLDocument1.Active := true;
  Uzel := XMLDocument1.DocumentElement.ChildNodes['ib'];
  with (Control as TListBox).Canvas do
     begin
       for I := 0 to Uzel.ChildNodes.Count - 1 do
       begin
          if  Uzel.ChildNodes[i].ChildNodes[0].ChildNodes[0].GetAttribute(WideString('docs')) <>
              Uzel.ChildNodes[i].GetAttribute(WideString('nTexts'))
          then  A:=[i];
          if index in A then Font.Color := clRed;
          FillRect(Rect);
          TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[index]);
       end;
     end;
  XMLDocument1.Active := false;
end;
Все прекрасно работает, строки красные. Затем необходимо нажать на кнопку и заполнить ListBox другой информацией:

Код:
procedure TMain.Button6Click(Sender: TObject);
var
  i : integer;
begin
  ListBox2.Items.Clear;
  ListBox2.Items.LoadFromFile('Список организаций.txt');
  Label12.Visible := true;
  Label19.Visible := true;
  i := 0;
  while i <> ListBox2.Items.Count do
  if ListBox3.Items.IndexOf(ListBox2.Items[i]) <> -1
  then ListBox2.Items.Delete(i)
  else inc(i);
  Label12.Caption := 'Нехватает: '+IntToStr(ListBox2.Items.Count);
  ListBox2.Enabled := False;
end;
После очистки ListBox, строки, которые до этого были красными опять перекрашиваются в красный.

Как вернуть обратно черный цвет строк в ListBox при нажатии на эту кнопку.
SolovejK вне форума Ответить с цитированием
Старый 30.01.2012, 00:43   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

OnDrawItem продолжает-то отрабатывать, вот и красит. Style поменяйте на lbStandard. А выбранный способ перекраски очень странный. Можно было бы при заполнении ListBox в Items.Objects загнать признак 1 для строк подкрашиваемых и 0 для не подкрашиваемых и использовать при прорисовке
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.01.2012 в 00:50.
Аватар вне форума Ответить с цитированием
Старый 30.01.2012, 01:26   #3
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Спасибо за подсказку. Как же я сам не догадался вернуть стиль на стандартный .
SolovejK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
listbox - изменение цвета выделеной строки(drawitem) Karych Общие вопросы Delphi 7 08.01.2012 12:26
Процедура DrawItem в TListBox... Aslan Компоненты Delphi 6 04.09.2011 18:24
как добавить в listbox файлы(пишу с помощью bassplayer)(Listbox+opendialog=play) blackstersl Общие вопросы Delphi 11 09.06.2010 13:23
ListBox С++ noob_11 Помощь студентам 3 12.05.2010 21:25
ListBox Witaliy Общие вопросы Delphi 10 27.04.2008 17:15