Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2013, 08:06   #1
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос Прогресс загрузки

Всем доброе время суток. Я только недавно начал изучать С++, сильно не ругайте, просто действительно не первый день мучаюсь, невыходит.
каким образом можно реализовать прогресс загрузки архива? Работаю в билдере6. Да есть опция прогресс бара, но скачивание происходит по нажатию кнопки. Каким образом можно вызвать модальное окно с загрузкой в прогрессбар? Скачиваю архив таким образом:
Код:
TFileStream* fs = new TFileStream("имя_архива_на диске.zip", fmCreate|fmOpenWrite); //
IdHTTP1->Get("http://site.com/имя_архива_на_сервере.zip", fs);
delete fs;
// далее идет извлечение архива и другие действия
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 08:14   #2
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
Работаю в билдере6.
И это печально.
По существу, прогресс загрузки это событийный процесс. Например в Qt прогрессбар привязывается к событию onDataAvailable() в котором передается размер полученых данных и полный размер итоговых данных. Из которых вычисляется размерность прогрессбара и его заполнение при получении данных. Думаю в билдере точно так же только со своими тараканами. Ищите привязку по событию.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 02.04.2013, 08:36   #3
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
И это печально.
По существу, прогресс загрузки это событийный процесс. Например в Qt прогрессбар привязывается к событию onDataAvailable() в котором передается размер полученых данных и полный размер итоговых данных. Из которых вычисляется размерность прогрессбара и его заполнение при получении данных. Думаю в билдере точно так же только со своими тараканами. Ищите привязку по событию.
а qt5.0 для студии 2010 подойдет для студии 2012?(сейчас установлена 2012 студия) или лучше версия с minGW? О qt раньше не знал. поэтому поставил билдер. Пока помучаю билдер, попробую вывести прогрессбар. Спасибо за совет
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 09:02   #4
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
а qt5.0 для студии 2010 подойдет для студии 2012?(сейчас установлена 2012 студия) или лучше версия с minGW? О qt раньше не знал. поэтому поставил билдер. Пока помучаю билдер, попробую вывести прогрессбар. Спасибо за совет
qt-фреймверк, билдер - IDE
странное сравнение...
Прогрессбар, используя винапи, можно сделать на чем угодно. На qt - кроссплатформенно. Тебе бы на другой форум( либо книжками завалится), поближе к своей тематике.
Evgeniy вне форума   Ответить с цитированием
Старый 02.04.2013, 09:50   #5
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
qt-фреймверк, билдер - IDE
странное сравнение...
Прогрессбар, используя винапи, можно сделать на чем угодно. На qt - кроссплатформенно. Тебе бы на другой форум( либо книжками завалится), поближе к своей тематике.
я их не сравнивал и не собираюсь сравнивать. Установил qt5_mingw создал проект(пустой) запустил с ctrl+R запустилось, нашел собраный exe в debug пытаюсь запустить оттуда "Системная ошибка, qt5Cored.dll не найден, мол переустанавливай)" О_о.
ЗЫ. Понравилась интеграция с git, mercurial и т.п. Удобно сделано
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 09:58   #6
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
qt-фреймверк, билдер - IDE
странное сравнение...
Прогрессбар, используя винапи, можно сделать на чем угодно. На qt - кроссплатформенно. Тебе бы на другой форум( либо книжками завалится), поближе к своей тематике.
Я знаю в чем разница. Вы я смотрю язвить мостак. По существу ничем не ответили человеку, троли на другом форуме тоже, если уж на то пошло.

Добавлено через 4 минуты
Цитата:
Сообщение от Visible Посмотреть сообщение
я их не сравнивал и не собираюсь сравнивать. Установил qt5_mingw создал проект(пустой) запустил с ctrl+R запустилось, нашел собраный exe в debug пытаюсь запустить оттуда "Системная ошибка, qt5Cored.dll не найден, мол переустанавливай)" О_о.
ЗЫ. Понравилась интеграция с git, mercurial и т.п. Удобно сделано
Не найден, потому что надо в папку с программой положить. Он требует библиотеки для запуска. Если будете на Qt писать, то вот пример. Я как-то заморачивался по поводу автообновления, написал скачку файла с прогрессбаром.

https://bitbucket.org/sidsukana/qsw/...orm.cpp#cl-143

Функция void SWUpdateForm::updateSoftware()

Прошу прощения, событие называется downloadProgress() но сути это не меняет. Оно привязывается к слоту, в котором идет обновление показания прогресс бара на основе полученных данных.
__________________
SpellWork Qt4

Последний раз редактировалось Sid; 02.04.2013 в 10:00.
Sid вне форума   Ответить с цитированием
Старый 02.04.2013, 10:15   #7
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос

Цитата:
Сообщение от Sid Посмотреть сообщение
Я знаю в чем разница. Вы я смотрю язвить мостак. По существу ничем не ответили человеку, троли на другом форуме тоже, если уж на то пошло.

Добавлено через 4 минуты


Не найден, потому что надо в папку с программой положить. Он требует библиотеки для запуска. Если будете на Qt писать, то вот пример. Я как-то заморачивался по поводу автообновления, написал скачку файла с прогрессбаром.

https://bitbucket.org/sidsukana/qsw/...orm.cpp#cl-143

Функция void SWUpdateForm::updateSoftware()

Прошу прощения, событие называется downloadProgress() но сути это не меняет. Оно привязывается к слоту, в котором идет обновление показания прогресс бара на основе полученных данных.
Большое спасибо, буду разбираться.
Сейчас пробывал создать второй (пустой) проект, так даже в откладке теперь запускать нехочет( хотя первый созданный запустился.
Код:
Не удалось запустить программу. Путь или права недопустимы?
C:\Users\Admin\Desktop\asd\asd-build\debug\Updater.exe завершился с кодом -1
Ещё заметил, проект в билдере (с разными функциями в меню) после сборки занимает почти 500 кб пространства. а тут, полностью пустой уже 650 кб
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 11:03   #8
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Я знаю в чем разница. Вы я смотрю язвить мостак. По существу ничем не ответили человеку, троли на другом форуме тоже, если уж на то пошло.
По существу я написал о винапи, а если конкретно - стандартных контролах виндовса. В интернете валом информации как это сделать на С++, С и Delphi и т.д. Это будет не просто - но скорость работы и размер скомпилированого приложения радует.
Посмотрите другие созданные темы пользователя Visible. Человек учится работать в билдере...и это печально. Единственно адекватный способ сделать процесс использования такого приложения проще - использовать винапи. Конкретно - не надо будет качать и таскать борландовские библиотеки( встроенные контролы).
Цитата:
Сообщение от Sid Посмотреть сообщение
прогресс загрузки это событийный процесс
Процесс загрузки - такой каким его напишет программист. Если в qt используется событийная модель и обертка вокруг процесса загрузки, то это не значит, что так везде.
зы линк на попытки человека сделать в билдере http://www.programmersforum.ru/showthread.php?t=187852
ззы мне удобнее использовать wget для закачки файлов - существует и для виндовса. Показывает прогрессбар. Если целью автора ставится изучение с++ как такового, то все же я бы советовал прочитать книги или пройти онлайн курсы в интернете.
Код не мой, собрал - работает (gcc -mwindows -s main.cpp -Wall -O3 -o main.exe 10кб)
ззы
Код:
#include <windows.h>
#include <commctrl.h>
 
#define PBS_MARQUEE     0x08
#define PBS_SMOOTH  1
#define PBS_SMOOTHREVERSE 0x10
#define COLOR_3DFACE 15
#define PBM_SETMARQUEE  (WM_USER + 10)
 
LRESULT CALLBACK Func(HWND, UINT, WPARAM, LPARAM);
INT registerWindow(PCSTR , WNDPROC ,                HBRUSH );
 
HINSTANCE hInstanceProgram;
HWND hWndProgressBar, hWndMain;
 
INT WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                LPSTR lpszArgument, INT nFunsterStil)
{
        MSG message;
 
    hInstanceProgram = hInstance;
        if (registerWindow("MyClass", Func,
                        GetSysColorBrush(COLOR_3DFACE)))
                return 0;
        hWndMain = CreateWindowEx(0, "MyClass",
                        "Progress Bar", WS_CAPTION | WS_SYSMENU
                        | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL);
        ShowWindow(hWndMain, nFunsterStil);
 
    while (GetMessage(&message, NULL, 0, 0))
        {
                TranslateMessage(&message);
                DispatchMessage(&message);
        }
 
        return message.wParam;
}
 
INT registerWindow(PCSTR lpszClassName, WNDPROC lpfnWndProc,
                HBRUSH hbrBackground)
{
        WNDCLASSEX wndClassEx;
 
        ZeroMemory(&wndClassEx, sizeof(WNDCLASS));
 
        wndClassEx.hInstance = hInstanceProgram;
        wndClassEx.lpszClassName = lpszClassName;
        wndClassEx.lpfnWndProc = lpfnWndProc;
        wndClassEx.style = CS_DBLCLKS;
        wndClassEx.cbSize = sizeof(WNDCLASSEX);
        wndClassEx.hIcon = NULL;
        wndClassEx.hIconSm = NULL;
        wndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndClassEx.lpszMenuName = NULL;
        wndClassEx.cbClsExtra = 0;
        wndClassEx.cbWndExtra = 0;
        wndClassEx.hbrBackground = hbrBackground;
 
        if (RegisterClassEx(&wndClassEx))
                return 0;
 
        return 1;
}
 
LRESULT CALLBACK Func(HWND hWnd, UINT message,
                WPARAM wParam, LPARAM lParam)
{
        switch (message)
        {
                case WM_CREATE:
            hWndProgressBar = CreateWindowEx(0, PROGRESS_CLASS, 
                          "", WS_CHILD | WS_VISIBLE | PBS_MARQUEE |PBS_SMOOTHREVERSE, 148, 8, 160, 16, hWnd, NULL,
                       hInstanceProgram, NULL);
                    SetTimer(hWnd, 1, 100, NULL);
            SendMessage(hWndProgressBar, PBM_SETMARQUEE, TRUE, 100);
                        break;
                case WM_DESTROY:
            KillTimer(hWnd, 1);
                        PostQuitMessage(0);
                        break;
                case WM_TIMER:
            SendMessage(hWndProgressBar, PBM_STEPIT, 0, 0);
            break;
                default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
        }
 
    return 0;
}

Последний раз редактировалось Evgeniy; 02.04.2013 в 12:04.
Evgeniy вне форума   Ответить с цитированием
Старый 02.04.2013, 14:54   #9
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Не найден, потому что надо в папку с программой положить. Он требует библиотеки для запуска.
Попробовал пособирать различные программы, ни одна не работает без библиотек. Это же очень неудобно, "таскать их с собой". Есть же наверно какой то выход? другие приложения собранные в других компиляторах работают без доп. библиотек.
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 16:56   #10
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Да, есть.... Собрать заново проект Qt (на сайте можно скачать surse code), и линковать библиотечки статически. Прочитать про это можно тут тык! Я правда пока сам не пробовал, но мне Qt 4.8 нравится больше чем Qt 5, так как в Qt 5 еще больше библиотечек надо пихать с прогой.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 02.04.2013 в 17:00.
lovepsone вне форума   Ответить с цитированием
Старый 02.04.2013, 17:29   #11
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Да, есть.... Собрать заново проект Qt (на сайте можно скачать surse code), и линковать библиотечки статически. Прочитать про это можно тут тык! Я правда пока сам не пробовал, но мне Qt 4.8 нравится больше чем Qt 5, так как в Qt 5 еще больше библиотечек надо пихать с прогой.
Вы не подскажете где можно более старые версии взять qt?

Уже нашел, ненадо

Последний раз редактировалось Visible; 02.04.2013 в 17:32.
Visible вне форума   Ответить с цитированием
Старый 04.04.2013, 19:49   #12
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Если статически линковать либы с бинарником, то его размер будет катастрофических размеров
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Visible (04.04.2013)
Старый 05.04.2013, 15:07   #13
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Цитата:
Сообщение от Sid Посмотреть сообщение
Если статически линковать либы с бинарником, то его размер будет катастрофических размеров
Ну это минусы Qt'a... Зато плюсы у него большие... Хотя вы сами знаете... Ваша разработка по спеллворку меня подбила на Qt, за это вам спасибо!
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Старый 05.04.2013, 15:19   #14
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Ну это минусы Qt'a... Зато плюсы у него большие... Хотя вы сами знаете... Ваша разработка по спеллворку меня подбила на Qt, за это вам спасибо!
а я все таки решил на VSE пользоваться как в старые добрые времена компилил мангос. Пусть нет IDE, но мне нравится. Чем сложнее учиться, тем лучше понимание. Как всегда.
Visible вне форума   Ответить с цитированием
Старый 05.04.2013, 16:17   #15
Astoria
Пользователь
 
Регистрация: 26.03.2010
Сообщений: 40
Сказал(а) спасибо: 12
Поблагодарили 4 раз(а) в 4 сообщениях
Astoria На верном пути
По умолчанию

Тогда уж и блокнот покатит. Максимум понимания.
Astoria вне форума   Ответить с цитированием
Старый 05.04.2013, 19:21   #16
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос

Цитата:
Сообщение от Astoria Посмотреть сообщение
Тогда уж и блокнот покатит. Максимум понимания.
Ну да. Единственное отличие VS все таки немного подсказывает тебе
Visible вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бот как инструмент для загрузки Mediv Флудильня 10 07.07.2011 15:43
[10893][patch]Оптимизация загрузки gossip_menu_option Warlord123 Принятые патчи 1 19.12.2010 20:54
вырубается мир после загрузки kartez Установка MaNGOS 19 09.06.2010 15:46


Текущее время: 11:28. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot