Дмитрий777
Гость
|
|
« : 04-08-2009 08:47 » |
|
Здравствуйте. Нужно в панели статусбара изменить цвет шрифта. Не могу найти в настройках ничего похожего. Или Дельфи-7 глючит? Или голову напекло? Подскажите плз.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 04-08-2009 09:51 » |
|
Тип TStatusBar? Смотри свойства ParentColor и Font.Color.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #2 : 04-08-2009 09:57 » |
|
Рисуй на канве: StatusBar1.Canvas.Font.Color := clRed; StatusBar1.Canvas.TextRect(...
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #3 : 05-08-2009 14:35 » |
|
я вот тоже помню такую шнягу, что надо было ставить у панели ownerdraw и исполнять танцы с бубнами. из-за того, что TStatusBar - это враппер вокруг виндового компонента и его цветом якобы рулит сама винда.
а сейчас попробовал - меняется. штатно - свойство Color. дельфя - 7.0, сборка 4.453. винда - xp pro 2002, sp3.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #4 : 06-08-2009 03:40 » |
|
x77, Win XP SP2 - не меняется.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #5 : 10-08-2009 12:18 » |
|
проверил на работе, на sp2 - меняется. но там стоит D7.0 (build 8.1)
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #6 : 10-08-2009 13:02 » |
|
Delphi2007(v 11.0.2709.7128) - цвет также не меняется
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 10-08-2009 14:14 » |
|
мне почему-то кажется, что тут дело не в дельфях. если будет время, скинь, плз., свой comctrls.pas или прогони диффом с моим.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #8 : 10-08-2009 14:28 » |
|
Найдено одно различие здесь:
procedure TComboExItems.Notify(Item: TCollectionItem; Action: TCollectionNotification); begin case Action of cnAdded: with TComboExItem(Item) do begin FImageIndex := -1; FSelectedImageIndex := -1; FIndent := -1; FOverlayImageIndex := -1; FData := nil; FCaption := ''; end; cnExtracting, cnDeleting: if not (csDestroying in TWinControl(Owner).ComponentState) then SendMessage(TWinControl(Owner).Handle, CBEM_DELETEITEM, Item.Index, 0); end; end;
В моем модуле есть cnDeleting, а в твоем нет. Судя по всему, данное различие никакого отношения к цвету статусбара не имеет. Сейчас нет времени ковыряться в исходниках Delphi, будет время гляну как там свойство Font привязано к отображению текста. Ради интереса, если не трудно, скинь проект с цветным текстом статусбара, может я что не так делаю?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 10-08-2009 14:37 » |
|
нескромный вопрос. попадающий в оффтоп
А нафига в статусбаре менять цвет? Шоб моргало и сверкало?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 10-08-2009 15:07 » |
|
нескромный вопрос. попадающий в оффтоп
А нафига в статусбаре менять цвет? Шоб моргало и сверкало?
а тут два варианта. либо чтобы моргало и сверкало, либо наоборот - чтобы статусбар был всегда фиксированного цвета в независимости от тем и настроек рабочего стола виндузы.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #11 : 10-08-2009 16:04 » |
|
может я что не так делаю?
я пустой проект открываю, кидаю статусбар, меняю цвет: причём он сразу в дизайн-тайме меняется.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #12 : 10-08-2009 19:12 » |
|
x77, название темы - цвет шрифта статус-бара, а не цвет статус-бара. А цвет статус-бара прекрасно меняется, но шрифт, какой бы в свойстве Font ни ставил - все равно черный.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #13 : 11-08-2009 09:28 » |
|
zubr, вот это я протупил
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #14 : 11-08-2009 14:57 » |
|
Из "kuliba" procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin with statusbar1.Canvas do begin Brush.Color := clRed; FillRect(Rect); TextOut(Rect.Left, Rect.Top, 'Панель '+IntToStr(Panel.Index)); end; end;
|
|
« Последнее редактирование: 11-08-2009 15:03 от Oldy »
|
Записан
|
С уважением, Oldy.
|
|
|
zubr
Гость
|
|
« Ответ #15 : 11-08-2009 15:10 » |
|
Oldy, а зачем Brush.Color := clRed; FillRect(Rect);? Ведь речь о цвете шрифта!
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #16 : 11-08-2009 16:15 » |
|
zubr, Я сразу понял, что написал не то, но не смог удалить свой пост. Куда-то девалась эта возможность. Вот из Delphikingdom: Вопрос: Почему при изменении цвета букв StatusBar'а ничего не происходит?
Ответ:
Status bar - стандартный элемент управления Windows, и соответственно цвет его букв - значение clBtnText которое изменяется с помощью настроек в Control Panel. Этот цвет черный по умолчанию и может изменяться в зависимости от выбранной цветовой схемы. Другие стандартные элемент управления Windows, например кнопки, также имеют цвет букв, настраиваемый из ControlPanel. StatusBar и его панели имеют свойство "owner-draw", позволяющее Вам использовать любой цвет букв. Пример:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin if Panel = StatusBar.Panels[0] then begin StatusBar.Canvas.Font.Color := clRed; StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'Panel - 0') end else begin StatusBar.Canvas.Font.Color := clGreen; StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'Panel - 1'); end; end;
|
|
« Последнее редактирование: 11-08-2009 17:13 от Oldy »
|
Записан
|
С уважением, Oldy.
|
|
|
|