Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Рисование в StatusBar

14.06.2014, 01:20. Показов 4887. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята подскажите по такому вопросу? Мне нужно нарисовать текст и заобно определить его длину и поставить согласно этой длине бордюр, чтобы нарисовать во второй секции текст. С таким кодом не хочет рисовать в первой секции вообще никак. Свойство psOwnerDraw выставлено.
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TMainForm::StatusBar1DrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel,
          const TRect &Rect)
{
 if(Panel == StatusBar1->Panels->Items[0])
 {
     StatusBar1->Canvas->TextOut(Rect.Left,Rect.Top,L"Количество наименований: " + IntToStr(stolbci));
     StatusBar1->Panels->Items[0]->Width =StatusBar1->Canvas->TextWidth(StatusBar1->Panels->Items[0]->Text);
 
 }
}
Заранее благодарен за ответ
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2014, 01:20
Ответы с готовыми решениями:

StatusBar
Как сдесь StatusBAr запрограмировать что виполнял свои функции?

Работа со Statusbar
Подскажите пожалуйста, как мне растянуть статус бар вот на картинке выбелено красным

Hint в StatusBar
Есть форма, на которой присутствует MainMenu, ещё есть на форме StatusBar, StatusBar поделён на 3-и StatusBar'a. Тоисть: ...

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
14.06.2014, 01:50
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

А вот так:
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
    TStatusPanel *Panel, const TRect &Rect)
{
    if (Panel == StatusBar1->Panels->Items[0])
    {
        Panel->Text = L"Количество наименований: " + IntToStr(stolbci); // ну или просто String s...
        StatusBar1->Canvas->TextOut(Rect.Left, Rect.Top, Panel->Text);
        Panel->Width = StatusBar1->Canvas->TextWidth(Panel->Text);
    }
}
?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.06.2014, 02:03  [ТС]
UI, а для для того чтобы не наезжал бордюр на запись на верно е надо ещё пару пикселей добавить про запас, а то вот как получается (см. скриншот) что на тройку наехал бордюр. К тому же на картинке видно что текст идёт не поцентру, а съехал немного вниз, но это надо Rect.Top выравнивать
Изображения
 
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
14.06.2014, 02:11
Ну, так выравнивай:
C++
1
2
        StatusBar1->Canvas->TextOut(Rect.Left, Rect.Top - 2, Panel->Text);
        Panel->Width = StatusBar1->Canvas->TextWidth(Panel->Text) + 4;
так вроде по центру, и не наезжает граница панели...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.06.2014, 02:12  [ТС]
Толко что установил свойство ParentFont в true и автоматом снялась галочка UseSystemFont и текст стал по центру, но тройку всё равно не всю видно
Изображения
 
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.06.2014, 02:15  [ТС]
А почему в статусе надо дополнительно добавлять пиксели чтобы текст был виден полностью без наездов. Разве ширины текста не достаточно чтобы сделать ширину панели идеальной чтобы ничё сзади не наезжало на текст?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
14.06.2014, 02:17
У меня нормально видно:
Изображения
 
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.06.2014, 02:32  [ТС]
Сейчас бы заставить перерисовываться статус бар в зависимости от действий, а не один раз как он делает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
14.06.2014, 02:44
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Кто мешает после необходимых действий (или по наступлению каких-либо событий) заставлять StatusBar перерисоваться:
C++
1
StatusBar1->Invalidate();
?
2
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.06.2014, 02:55  [ТС]
Спасибо. И последний вопрос по этой теме. Не будет ли "тупить" - виснуть программа при перериске сразу трёх ячеек в статус баре, если я сделал вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TMainForm::DataSource1DataChange(TObject *Sender, TField *Field)
{
StatusBar1->Invalidate();
}
 
void __fastcall TMainForm::StatusBar1DrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel,
          const TRect &Rect)
{
  if (Panel == StatusBar1->Panels->Items[0])
    {
        Panel->Text = L"Количество наименований: " + IntToStr(InsertandUpdate1->DBGrid1->FieldCount); // ну или просто String s...
        
    }
    if (Panel == StatusBar1->Panels->Items[1])
    {
        Panel->Text = L"Количество компьютеров: "+IntToStr(ADOQuery1->RecNo)+":"+IntToStr(ADOQuery1->RecordCount); // ну или просто String s...
        
    }
    StatusBar1->Canvas->TextOut(Rect.Left, Rect.Top, Panel->Text);
    Panel->Width = StatusBar1->Canvas->TextWidth(Panel->Text)+4;
}
 
//здесь ещё будет 3-я панель
Из этого кода следует что при перемищении курсора в DBGrid каждый раз будет перерисовываться 3 панели в статус баре
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
14.06.2014, 12:59
Не будет ничего тормозить. В 14 строке добавь else перед вторым if-ом, кстати...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2014, 12:59
Помогаю со студенческими работами здесь

Dbgrid и statusbar
Здравствуйте! Имеется DBGrid и Statusbar. В статусбаре должна отображаться расшифровка заголовков столбцов дбгрида, т.е. я нажимаю на...

ProgressBar to StatusBar
добрый день. как поместить прогресс в одну из панелей статус бара?

StatusBar ToolButon
StatusBar И ToolButton возможно? они совместимы?

StatusBar + Anchors
Доброго дня.Ребят, как сделать что бы при разворачивании программы на весь экран последний элемент StatusBar1 Перемещался в право ? ...

StatusBar с гиперсылками
Доброй ночи, подскажите как реализовать ? - StatusBar с гиперсылками


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru