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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2007, 14:25   #1
Washington
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 38
По умолчанию Можно ли в ListBox шрифт в одном Item сделать жирным, а в другом обычным?

Можно ли в ListBox'е один Item сделать жирным (шрифт), а другой обычным и т.д.?
Washington вне форума Ответить с цитированием
Старый 22.03.2007, 14:40   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

procedure TForm1.ListBox1DrawItem
(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
myColor: TColor;
myBrush: TBrush;
begin
myBrush := TBrush.Create;
with (Control as TListBox).Canvas do
begin
if not Odd(Index) then
myColor := clSilver
else
myColor := clYellow;

myBrush.Style := bsSolid;
myBrush.Color := myColor;
Windows.FillRect(handle, Rect, myBrush.Handle);
Brush.Style := bsClear;
TextOut(Rect.Left, Rect.Top,
(Control as TListBox).Items[Index]);
MyBrush.Free;
end;
end;

делает фон для разных строчек.
Это лучше чем цвет текста, можете поверить.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.03.2007, 21:22   #3
Washington
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 38
По умолчанию

Так я пробовал. Как сделать это при добавлении элементов из ADOQuery?
Washington вне форума Ответить с цитированием
Старый 25.03.2007, 21:31   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

TextOut(Rect.Left, Rect.Top,
(Control as TListBox).Items[Index]);

вы внимательно читали ?
какое имеет значение откуда вы берете текст ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.03.2007, 10:54   #5
Washington
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 38
По умолчанию

Код:
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 элементов разного шрифта вылезает последний.
Washington вне форума Ответить с цитированием
Старый 26.03.2007, 11:31   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Index:=StrToInt(Label3.Caption);
ошибка.
Label3.caption статичен.
и делать преобразование strtoint , без try.. не совсем корректно
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 27.03.2007, 22:39   #7
Washington
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 38
По умолчанию

Подождите, а как это Label3.Caption статичен? В ходе добавления записей из ADOQuery курсор перемещается и Index изменяется!
Washington вне форума Ответить с цитированием
Старый 28.03.2007, 10:10   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Имхо самый нормальный выход для вас будет: выгрузка данных из базы в некий массив, с последующей вставкой их в listbox.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 28.03.2007, 12:40   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что-то вы мудрите...
При добавлении записи в ListBox нужно просто использовать не метод AddItem, а Items.AddObject, где в качестве параметра объекта использовать некий признак для "утолщения" или подкраски шрифта данной записи. Если я правильно понял, этот признак можно взять из ADOQuery3.FieldByName('Punkt').AsIn teger.
А анализировать ADOQuery3.FieldByName('Punkt').AsIn teger при прорисовке ListBox-а совершенно бесполезно - между ними никакой связи нет...
Цитата:
Если сделать так, то канва будет "дергаться" при перерисовке )
С какого лешего ей дергаться?
Вроде я не предлагал какого-то дополнительного прорисовывания...

Последний раз редактировалось mihali4; 28.03.2007 в 12:51.
mihali4 вне форума Ответить с цитированием
Старый 28.03.2007, 12:43   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Если сделать так, то канва будет "дергаться" при перерисовке )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли скопировать поле базы данных в ListBox? Вася Рогов БД в Delphi 4 07.05.2009 19:45
Можно ли подсчитать FPS в другом процессе? Minimus Win Api 7 26.08.2008 02:08
можно ли в одном классе реализовать несколько интерфейсов Galinka08 Общие вопросы по Java, Java SE, Kotlin 2 08.03.2008 21:33
Как в ячейке Excel сделать надстрочный шрифт? Sony Общие вопросы Delphi 2 26.07.2007 01:59
Как сделать все данные на одном языке? Python Microsoft Office Excel 2 29.01.2007 12:37