| 
| 
 | Вопрос # 4 453/ вопрос открыт / | 
 |  Здравствуйте!В TListBox в рантайме меняю цвет с clWindow на clYellow. Все корректно. потом меняю обратно с clYellow на clWindow - цвет меняется только под текстом, на свободных полях строк остается желтый. Как это победить?
 Приложение:Переключить в обычный режим procedure TMainForm.setListBoxFocused(focused: boolean);begin  if (focused) then  begin    ListBox1.Color := clYellow;  end  else  begin    ListBox1.Color := clWindow;  end;end;
|  |   Вопрос задал: AlexMPEI (статус: 1-ый класс)Вопрос отправлен: 22 июля 2010, 11:29
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ В OnCreate формы поставь:
 procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox.DoubleBuffered:= True;
end; 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 22 июля 2010, 11:49
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 22 июля 2010, 13:02; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 22 июля 2010, 11:43 [#1]:а если после изменения цвета добавить какой нибудь update или repaint для листбокса или формы, эффект останется? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 22 июля 2010, 11:54 [#2]: Цитата (Вадим К): а если после изменения цвета добавить какой нибудь update или repaint для листбокса или формы, эффект останется?  Останется. Я вот так проверял:
 
 procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox.Items.BeginUpdate();
  try
  if ListBox.Color = clWindow
    then ListBox.Color:= clYellow
    else ListBox.Color:= clWindow;
  finally
    ListBox.Items.EndUpdate();
  end;
  ListBox.Repaint();
  ListBox.Update();
  ListBox.Refresh();
  ListBox.Invalidate();
end;Странно, я раньше про такое поведение ListBox не знал, ибо в программах везде стараюсь оставлять стандартное оформление, на которое будут влиять системные настройки пользователей. Так демократичнее.Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | AlexMPEI (статус: 1-ый класс), 22 июля 2010, 11:54 [#3]:ListBox.DoubleBuffered:= True;  помог, спасибо. 
 
 update или repaint, invalidate и т.п. эффекта не дают.
 |  
|   | min@y™ (статус: Доктор наук), 22 июля 2010, 12:56 [#4]: Цитата (AlexMPEI): ListBox.DoubleBuffered:= True; помог, спасибо. А где оценка "5"?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | AlexMPEI (статус: 1-ый класс), 22 июля 2010, 13:02 [#5]:репутация +1 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |