Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
-30 / 0 / 0
Регистрация: 05.07.2015
Сообщений: 104
1

Как сделать прогресс бар туда-сюда в С++ Builder 6?

09.07.2015, 18:37. Показов 5049. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В .NET можно менять bricks или marquee,а в билдере как?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 18:37
Ответы с готовыми решениями:

TIdHTTP в отдельном потоке и прогресс бар на основной форме
У меня есть TIdHTTP (upd) в отдельном потоке и надо отобразить хот загрузки файла на основной...

Как сделать прогресс-бар при загрузке данных ADOTable?
Как сделать прогресс-бар при загрузке данных ADOTable в C++ Builder?

Как сделать прогресс-бар?
Есть батник, который копирует архив командою xcopy xcopy \\192.168.0.11\555\BackUp_HOME\1...

Как сделать круглый прогресс бар?
Здравствуйте, мне на экран загрузки нужен круглый прогресс бар, а как его сделать не шарю....

21
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
10.07.2015, 00:07 2
Если есть (в чем сильно сомневаюсь), посмотри свойства Style (pbstNormal или pbstMarquee) и MarqueeInterval.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
10.07.2015, 10:20 3
SuperProgramer, а можете пояснить что подразумевается под "туда-сюда"?
0
1408 / 571 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
10.07.2015, 10:46 4
SatanaXIII, видимо вот это
Название: progressbar.gif
Просмотров: 186

Размер: 31.4 Кб
но я не припомню, чтоб в builder 6 такое было
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
10.07.2015, 10:47 5
Свойство Smooth компонента ProgressBar, если ты имеешь в виду то, что на скрине.

Не по теме:

А правда, что такое "туда-сюда"?

Изображения
 
0
D1973
10.07.2015, 10:50
  #6

Не по теме:

_Dimon_, а оно едет только "туда", а "сюда" не едет - не то :D

0
_Dimon_
10.07.2015, 10:53
  #7

Не по теме:

D1973, но потом опять сначала едет, значит едет и "сюда", просто мы этого не видим :D

0
D1973
10.07.2015, 10:56
  #8

Не по теме:

_Dimon_, примем этот постулат как еще одно доказательство шарообразности Земли :umnik:

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
10.07.2015, 11:04 9
А при чем тут версия Билдер-а? Это вообще-то ОС решает, умеет она такое или нет, а не Билдер...
C++
1
2
3
4
5
6
#include <commctrl.h>
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ::SetWindowLong(ProgressBar1->Handle, GWL_STYLE, PBS_MARQUEE + WS_CHILD + WS_VISIBLE);
    ::SendMessage(ProgressBar1->Handle,PBM_SETMARQUEE, 1, 50);
}
, а если в commctrl нет описаний этих констант - то добавить их вручную:
C++
1
2
    const int PBS_MARQUEE = 8;
    const int PBM_SETMARQUEE = WM_USER + 10;
1
-30 / 0 / 0
Регистрация: 05.07.2015
Сообщений: 104
10.07.2015, 11:41  [ТС] 10
Цитата Сообщение от volvo Посмотреть сообщение
А при чем тут версия Билдер-а? Это вообще-то ОС решает, умеет она такое или нет, а не Билдер...
C++
1
2
3
4
5
6
#include <commctrl.h>
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ::SetWindowLong(ProgressBar1->Handle, GWL_STYLE, PBS_MARQUEE + WS_CHILD + WS_VISIBLE);
    ::SendMessage(ProgressBar1->Handle,PBM_SETMARQUEE, 1, 50);
}
, а если в commctrl нет описаний этих констант - то добавить их вручную:
C++
1
2
    const int PBS_MARQUEE = 8;
    const int PBM_SETMARQUEE = WM_USER + 10;
Добавил,не работает.Как запустить то её?
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
10.07.2015, 11:59 11
SuperProgramer, еще раз переспрошу. Объясните пожалуйста своими словами что такое туда-сюда? Как он должен себя вести?
0
-30 / 0 / 0
Регистрация: 05.07.2015
Сообщений: 104
10.07.2015, 12:13  [ТС] 12
Это вот так :
Как сделать прогресс бар туда-сюда в С++ Builder 6?
0
-30 / 0 / 0
Регистрация: 05.07.2015
Сообщений: 104
10.07.2015, 13:12  [ТС] 13
Цитата Сообщение от SatanaXIII Посмотреть сообщение
SuperProgramer, еще раз переспрошу. Объясните пожалуйста своими словами что такое туда-сюда? Как он должен себя вести?
И чтобы туда сюда ездило

Добавлено через 42 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
SuperProgramer, еще раз переспрошу. Объясните пожалуйста своими словами что такое туда-сюда? Как он должен себя вести?
Получилось Ура!:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
#include <commctrl.h>
#pragma hdrstop
#define PBS_MARQUEE 8
#define PBM_SETMARQUEE (WM_USER+10)
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma resource "WindowsXP.res"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
InitCommonControls();
long cs = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
SetWindowLong(ProgressBar1->Handle, GWL_STYLE, cs | PBS_MARQUEE);
SendMessage(ProgressBar1->Handle, PBM_SETMARQUEE, (WPARAM) true, (LPARAM)100);
ProgressBar1->Position-100;
}
Добавлено через 15 минут
Цитата Сообщение от volvo Посмотреть сообщение
А при чем тут версия Билдер-а? Это вообще-то ОС решает, умеет она такое или нет, а не Билдер...
C++
1
2
3
4
5
6
#include <commctrl.h>
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ::SetWindowLong(ProgressBar1->Handle, GWL_STYLE, PBS_MARQUEE + WS_CHILD + WS_VISIBLE);
    ::SendMessage(ProgressBar1->Handle,PBM_SETMARQUEE, 1, 50);
}
, а если в commctrl нет описаний этих констант - то добавить их вручную:
C++
1
2
    const int PBS_MARQUEE = 8;
    const int PBM_SETMARQUEE = WM_USER + 10;
А как обратно вернуть?Чтобы стала обычной по нажатию кнопки
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
10.07.2015, 16:26 14
Лучший ответ Сообщение было отмечено SuperProgramer как решение

Решение

C++
1
2
    long cs = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
    SetWindowLong(ProgressBar1->Handle, GWL_STYLE, cs &~PBS_MARQUEE);
1
-30 / 0 / 0
Регистрация: 05.07.2015
Сообщений: 104
10.07.2015, 17:39  [ТС] 15
Цитата Сообщение от volvo Посмотреть сообщение
C++
1
2
    long cs = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
    SetWindowLong(ProgressBar1->Handle, GWL_STYLE, cs &~PBS_MARQUEE);
Спасибо большое.Чтоб не заморачиваться я сделал функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Marquee (bool mar,HANDLE pbar)
{
long cs;
cs = GetWindowLong(pbar, GWL_STYLE);
if(mar==false)
{
SetWindowLong(pbar, GWL_STYLE, cs &~PBS_MARQUEE);
}
else
{
SetWindowLong(pbar, GWL_STYLE, cs | PBS_MARQUEE );
SendMessage(pbar, PBM_SETMARQUEE, (WPARAM) true, (LPARAM)100);
}
}
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
24.10.2016, 09:57 16
Я так понимаю, что на XP необходимы дополнительные манипуляции.
Библиотека есть, но что-то не работает эта штука.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
24.10.2016, 11:43 17
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
на XP необходимы дополнительные манипуляции
Это вообще не работает на XP, потому как PBM_SETMARQUEE message говорит, что
Minimum supported client
Windows Vista [desktop apps only]
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
24.10.2016, 11:44 18
Спасибо. Я думал, что работает, т.к. ComCtl32.dll version 6.00, вроде, есть уже на ХР.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
24.10.2016, 11:52 19
Хотя... Если рядом с Project1.exe положить текстовый файл Project1.exe.manifest вот с таким содержимым:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="Company.Product.Name"
    type="win32"
/>
<description></description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
, то Marquee заведется и на WinXP
2
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
24.10.2016, 12:01 20
Что-то не выходит.
0
24.10.2016, 12:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2016, 12:01
Помогаю со студенческими работами здесь

Как сделать прогресс-бар для цикла операций?
Добрый день сталкнулся с проблемой. Сделал батник который запускает софтину с определенной...

Как сделать прогресс бар для скачиваемых файлов?
Как сделать тут прогресс бар? private void button2_Click_1(object sender, EventArgs e) ...

Как сделать прогресс бар к вот такой процедуре?
procedure TForm1.Button1Click(Sender: TObject); begin if Edit1.Text&lt;&gt;'' then...

Ajax, jQuery, как сделать прогресс бар обработки серверной функции
Всем привет! Разрабатываю веб-приложение. Js, Jquery, Ajax, серверная часть на Python. С помощью...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru