Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Цвет шрифта в статусбаре  (Прочитано 20079 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Дмитрий777
Гость
« : 04-08-2009 08:47 » 

Здравствуйте. Нужно в панели статусбара изменить цвет шрифта. Не могу найти в настройках ничего похожего. Или Дельфи-7 глючит?  Или голову напекло? Подскажите плз. 
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #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
Модератор

ro
Offline 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
Модератор

ro
Offline 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
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 10-08-2009 14:14 » 

мне почему-то кажется, что тут дело не в дельфях. если будет время, скинь, плз., свой comctrls.pas или прогони диффом с моим.

* ComCtrls.zip (128.34 Кб - загружено 972 раз.)
Записан

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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 10-08-2009 14:37 » 

нескромный вопрос. попадающий в оффтоп

А нафига в статусбаре менять цвет?
Шоб моргало и сверкало?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 10-08-2009 15:07 » 

нескромный вопрос. попадающий в оффтоп

А нафига в статусбаре менять цвет?
Шоб моргало и сверкало?

а тут два варианта. либо чтобы моргало и сверкало, либо наоборот - чтобы статусбар был всегда фиксированного цвета в независимости от тем и настроек рабочего стола виндузы.
Записан

x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #11 : 10-08-2009 16:04 » 

может я что не так делаю?


я пустой проект открываю, кидаю статусбар, меняю цвет:



причём он сразу в дизайн-тайме меняется.

* statusbar.GIF (14.61 Кб - загружено 2382 раз.)
Записан

zubr
Гость
« Ответ #12 : 10-08-2009 19:12 » 

x77, название темы - цвет шрифта статус-бара, а не цвет статус-бара. А цвет статус-бара прекрасно меняется, но шрифт, какой бы в свойстве Font  ни ставил - все равно черный.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #13 : 11-08-2009 09:28 » 

zubr, вот это я протупил Улыбаюсь
Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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 » new

Oldy, а зачем
Brush.Color := clRed;
FillRect(Rect);?
Ведь речь о цвете шрифта!
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines