Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.03.2007, 14:19
Washington Washington вне форума
Прохожий
 
Регистрация: 14.02.2007
Сообщения: 29
Репутация: 10
По умолчанию ListBox

Можно ли в ListBox'е один Item сделать жирным (шрифт), а другой обычным и т.д.?
__________________
Ну это нормально...
Ответить с цитированием
  #2  
Старый 22.03.2007, 15:53
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Это пример изменения цветов строк
Код:
 
procedure TTest.ListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    case Index of
      0:
        begin
          Font.Color := clBlue;
          Brush.Color := clYellow;
        end;
      1:
        begin
          Font.Color := clRed;
          Brush.Color := clLime;
        end;
      2:
        begin
          Font.Color := clGreen;
          Brush.Color := clFuchsia;
        end;
    end;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
  end;
end;

Можно менять и стиль шрифта, используя Font.Style:
Код:
 
procedure TTest.ListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    case Index of
      0:
        begin
          Font.Style := fsBold;
          Brush.Color := clYellow;
        end;
      1:
        begin
          Font.Style := fsItalic;
          Brush.Color := clLime;
        end;
      2:
        begin
          Font.Style := fsUnderline;
          Brush.Color := clFuchsia;
        end;
    end;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
  end;
end;
__________________
THE CRACKER IS OUT THERE

Последний раз редактировалось 4kusNick, 22.03.2007 в 15:56.
Ответить с цитированием
  #3  
Старый 22.03.2007, 20:38
Washington Washington вне форума
Прохожий
 
Регистрация: 14.02.2007
Сообщения: 29
Репутация: 10
По умолчанию

Возникли 2 вопроса:
1. Когда происходит событие OnDrawItem?
2. Говорит Imcompatible types TFontStyle и TFontStyles! Как так?
__________________
Ну это нормально...
Ответить с цитированием
  #4  
Старый 23.03.2007, 12:06
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

1. Событие происходит при отрисовке элемента (On Draw Item - При Отрисовке Элемента) =) Для того, чтобы событие срабатывало, поставь у лист бокса св-во Style = lbOwnerDrawFixed, lbOwnerDrawVariable, или lbVirtualOwnerDraw. Событие OnDrawItem срабатывает только в OwnerDraw лист боксах. Кстати, это все написано в хэлпе, так что советую подучить английский, чтобы сэкономить себе в дальнейшем кучу времени.

2. Да, сорри, писал по памяти, забыл [] поставить. Короче вместо Font.Style := fsUnderline; пиши Font.Style := [fsUnderline];
Эта ошибка возникает, т.к. Font.Style - это множество типа TFontStyles, в ктором находятся элементы типа TFontStyle. А для работы с множествами принято использовать []. Например можно указать сразу несколько стилей Font.Style := [fsUnderline,fsItalic], а можно ни одного Font.Style := []; Так же можно использовать + и - при работе с множествами. Например, стили шрифта такие: [fsUnderline,fsItalic,fsBold], а мы хотим оставить только [fsUnderline,fsItalic]; В таком случае необходимо написать так: Font.Style := Font.Style - [fsBold]; Ну и т.д. Вобщем хэлп тебе в руки и вперед!
__________________
THE CRACKER IS OUT THERE

Последний раз редактировалось 4kusNick, 23.03.2007 в 12:13.
Ответить с цитированием
  #5  
Старый 24.03.2007, 08:12
Washington Washington вне форума
Прохожий
 
Регистрация: 14.02.2007
Сообщения: 29
Репутация: 10
По умолчанию

Это всё понятно, но допустим я добывляю элементы в ListBox из ADOQuery:
Код:
Index:=StrToInt(Label3.Caption)-1;
  if ADOQuery3.FieldByName('Punkt').AsInteger=1 then
  begin
   with (Control as TListBox).Canvas do
    begin
     Font.Style:=[fsBold];
     FillRect(Rect);
     TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
    end;
  end;

У меня получается, что в ListBox добавляются все элементы, а потом прорисовываются и вообще не-то что мне нужно отображается.

Через другое событие можно это выполнять?
__________________
Ну это нормально...
Ответить с цитированием
  #6  
Старый 30.03.2007, 21:31
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

А можно ли сделать так что бы LISTVIEW автоматически сделал одну строку синим а другую зеленым и так до бесконечности??
Ответить с цитированием
  #7  
Старый 03.04.2007, 13:45
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

"А можно ли сделать так что бы LISTVIEW автоматически сделал одну строку синим а другую зеленым и так до бесконечности??"
Да, проверяй четность в цикле и раскрашивай.

Washington vbmenu_register("postmenu_5407", true);
,

Ты как-то странно добавляешь... Чет я не понимаю чего тебе именно нужно...
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter