Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 753

/ вопрос открыт /

Здравствуйте, уважаемые эксперты.
В программе наблюдается непонятный глюк с TListView. Стиль отображения - report, т.е. таблица. Проблема в том, что шрифт почему-то отображается жирным стилем (см. рисунок). Естественно, в свойстве Font этот стиль не задан. Кроме того, у всех компонент, на которых расположен этот ListView этот стиль тоже не установлен (т.е. сам ListView расположен на Panel, а Panel - на Notebook). Все остальные шрифты в окне программы отображаются нормально, в т.ч. в другом ListView. Не сталкивался ли кто с подобной проблемой и как её можно решить?

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Blondie Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Blondie (статус: Посетитель)
Вопрос отправлен: 17 июля 2007, 17:19
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Blondie!
Варианты решения.
1) использовать TabControl вместо Notebook
2) после того, как поставили панельку на Notebook,установить в false у неё свойство ParentFont. Потом отредактировать свойство font

P.S. Повторить ваш опыт не удалось. у меня делфи 7. Случайно не 6 делфи + манифест?

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 17 июля 2007, 17:35
Оценка за ответ: 5

Комментарий к оценке: Оценка с учётом мини-форума. Большое спасибо, Вадим! Проблема действительно решилась.

Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 18 июля 2007, 01:43; участников в обсуждении: 2.
Blondie

Blondie (статус: Посетитель), 17 июля 2007, 17:59 [#1]:

to Вадим К:
1) Не выход. TPageControl тоже не нужен.
2) Причём здесь ParentFont?
P.S. Нет, BDS 2006.
Вадим К

Вадим К (статус: Академик), 17 июля 2007, 18:13 [#2]:

Blondie:
1) TPageControl - как по мне, гораздо удобнее. В ответе опечятался.
2) ParentFont потому что наверное Notebook меняет шрифт, а панель наследует его.
P.S. В Delphi 7 не удалось повторить багу. дома попробую в 2006.
P.S.S Вкладку Win3.1 Borland не рекомендует использовать.
Галочка "подтверждения прочтения" - вселенское зло.
Blondie

Blondie (статус: Посетитель), 17 июля 2007, 18:22 [#3]:

Даже если так... Переместил этот загадочный TListView на TPageControl - всё равно шрифт жирный.

> ParentFont потому что наверное Notebook меняет шрифт, а панель наследует его
Как он его меняет, если в Font.Styles нет fsBold? Если бы было, то естественно ParentFont бы решало проблему.

> дома попробую в 2006
Не факт, что воспроизведёте баг. Ведь на форме есть другой LV и он отображается нормально.
Вадим К

Вадим К (статус: Академик), 17 июля 2007, 19:10 [#4]:

Может сделаете минимальный проект, в котором воспроизводиться ошибка?

Хотя мало чего может быть. в некоторых случаях помогает переложить компоненты по новой.

Также попробуйте выделить все "вредные компоненты" на форме и нажать Ctrl+C. Потом вставить сюда, в форум. может там какое-то свойство затерялось.

Также возможен вариант, что полужирность устанавливает уже сама программа, где то кода кусочек есть. Либо какая-то библиотека. Вот так у меня было.
Галочка "подтверждения прочтения" - вселенское зло.
Blondie

Blondie (статус: Посетитель), 17 июля 2007, 19:22 [#5]:

> Также возможен вариант, что полужирность устанавливает уже сама программа, где то кода кусочек есть.
Исключено.

В описании объекта уже смотрел - вроде ничего подозрительного. Вот он:

object List: TJvListView
Left = 11
Top = 31
Width = 393
Height = 132
Color = clWhite
Columns = <
item
Caption = \'Field 1\'
Width = 115
end
item
Alignment = taCenter
Caption = \'Field 2\'
Width = 55
end>
GridLines = True
Items.ItemData = {
016E0000000200000000000000FFFFFFFFFFFFFFFF0100000000000000064900
740065006D0020003100095300750062006900740065006D0020003100000000
00FFFFFFFFFFFFFFFF0100000000000000064900740065006D00200032000953
00750062006900740065006D0020003200FFFFFFFF}
ReadOnly = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
ColumnsOrder = \'0=115,1=55\'
SortOnClick = False
Groups.Sorted = False
Groups = <>
ExtendedColumns = <
item
end
item
end>
end

После того, как я его скопировал в абсолютно новый проект, шрифт и там стал жирным... Чудеса!
Вадим К

Вадим К (статус: Академик), 18 июля 2007, 01:43 [#6]:

Так-с. Вначале надо было написать, что вы используете JVCL ListView. А это очень принципиально. Открываем JvListView.pas и читаем
Known Issues:
  Mantis 3932: In the OnCustomDrawItem, if you change the canvas font directly, then your changes will be ignored and
the items be drawn bold if the item brush is not used for the given list view style (report for instance). As a
workaround, always change the item\'s properties, never the canvas\' directly.
Тоже, но по-русски
Известные глюки:
  Mantis 3932: В OnCustomDrawItem, если вы изменили шрифт canvas непосредственно, тогда ваши изменения будут
проигнорированы и элементы будут отрисованы полужирным, если кисть элементов не используется для предания стиля list
view style (для примера report). Как выход, всегда изменяйте свойства элементов, но никогда канву непосредственно.
Перевод немного кострубатый, но он для незнающих английский.

В вашем случае глюк произошёл, когда было поменяно свойство Color = clWhite. Восстановите его назад в clWindow и всё будет хорошо. При обычных настройках операционной системы clWindow = clWhite и вы соответственно ничего не видите отличного
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.02 сек.