Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли в ListBox'е текст в одном Item'е сделать жирным(шрифт), а в другом обычным?

6
22 марта 2007 года
George
4.1K / / 05.01.2007
Можно ли в ListBox'е один Item сделать жирным (шрифт), а другой обычным и т.д.?
9.5K
22 марта 2007 года
Borgir
97 / / 20.12.2006
Скорее всего только через событие OnDrawItem
6
25 марта 2007 года
George
4.1K / / 05.01.2007
Пробовал. Не получается, т.к. элементы добавляются из ADOQuery.
9.5K
26 марта 2007 года
Borgir
97 / / 20.12.2006
ListBox'у без разницы откуда в нем берутся элементы.
Достаточно в событии OnDrawItem проверять, является ли текущий элемент нужным тебе. Если нужный, то делаешь шриф жирным.
Тут никаких проблем возникнуть не должно.
6
26 марта 2007 года
George
4.1K / / 05.01.2007
Код:
with ADOQuery3 do
begin
  close;
  SQL.Clear;
  SQL.Add('Select Plan,Punkt');
  SQL.Add('From Organaiser');
  open;
end;
m:=ADOQuery3.RecordCount;
for i:=1 to m do
begin
ListBox1.AddItem(ADOQuery3.FieldByName('Plan').asString,nil);
Label3.Caption:=IntToStr(i);
ADOQuery3.Next;
end;

Это я добавляю элементы в ListBox.]

 
Код:
Index:=StrToInt(Label3.Caption);
  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;


Это событие onDrawItem.
В итоге вместо 5 элементов разного шрифта вылезает последний.
9.5K
26 марта 2007 года
Borgir
97 / / 20.12.2006
Что-то ты перемудрил. :)
И кроме того:
 
Код:
FillRect(Rect);
     TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);

Должно выполняться в любом случае, а не только при определенном условии (это прорисовка текущего "прямоугольника" и вывод текста на него).
Кроме того, значение Index, тебе передается в параметрах OnDrawItem, поэтому непонятно зачем его получать через заголовок Label.
4.6K
26 марта 2007 года
Tokolist
268 / / 22.03.2007
Предлагаю нестандартный подход к решению задачи (я специально упростил код дабы акцентировать на сути):

Добавление итемов

 
Код:
ListBox1.Items.Objects[ListBox1.Items.Add('value1')] := TObject(1);
  ListBox1.Items.Objects[ListBox1.Items.Add('value2')] := TObject(0);


OnDrawItem

 
Код:
with (Control as TListBox).Canvas do
  begin
    FillRect(Rect);

    if Integer((Control as TListBox).Items.Objects[Index]) = 1 then
      Font.Style:=[fsBold];
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
  end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог