Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Application->ProcessMessages + ProgressBar 
V
    Опции темы
DCamer
Дата 2.8.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Как сделать чтобы при создании формы приложением это отображалось в TLabel, вместе с прибавление единицы в ProgressBar?
Сейчас у меня есть код (не работает):
название программы.cpp
Код

//---------------------------------------------------------------------------
#include "splash.h"

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
     try
     {
       SplashForm = new TSplashForm(Application);
       SplashForm->Show();
       SplashForm->Update();

    Application->Title = "название программы";
    Application->Initialize();
    Application->CreateForm(__classid(TSDIAppForm), &SDIAppForm);
        Application->CreateForm(__classid(TSplashForm), &SplashForm);

        SplashForm->Label1->Caption=SplashForm->Label1->Caption+"окна \"о программе\"";
        SplashForm->Label1->Update();
        SplashForm->ProgressBar1->StepBy(15);
        SplashForm->ProgressBar1->Update();
        Application->CreateForm(__classid(TAboutBox), &AboutBox);

        SplashForm->Label1->Caption=SplashForm->Label1->Caption+"раздела \"Эффекты\"";
        SplashForm->Label1->Update();
        SplashForm->ProgressBar1->StepBy(15);
        SplashForm->ProgressBar1->Update();
        Application->CreateForm(__classid(TForm1), &Form1);

        SplashForm->Label1->Caption=SplashForm->Label1->Caption+"раздела \"AI\"";
        SplashForm->Label1->Update();
        SplashForm->ProgressBar1->StepBy(15);
        SplashForm->ProgressBar1->Update();
        Application->CreateForm(__classid(TForm2), &Form2);

        Application->CreateForm(__classid(TForm3), &Form3);
        SplashForm->Free();
        SplashForm->Close();
        Application->Run();

   }
   catch (Exception &exception)
   {
       Application->ShowException(&exception);
   }
       return 0;
}
//---------------------------------------------------------------------


splash.cpp
Код

//---------------------------------------------------------------------------
void __fastcall TSplashForm::Timer1Timer(TObject *Sender)
{
Timer1->Enabled=false; // заблокировать дальнейшее применение таймера
if (SDIAppForm->Visible)
Close(); // если главное окно уже видно, то закрыть окно-заставку
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) DCamer - 2.8.2010, 15:26
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 2.8.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Приходится эмулировать набег процентов таймером:
Код

//---------------------------------------------------------------------------
void __fastcall TSplashForm::Timer2Timer(TObject *Sender)
{
   ProgressBar1->StepBy(4);
   Label1->Caption=Label1->Caption+".";
}
//---------------------------------------------------------------------------

--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Domain
Дата 2.8.2010, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



а что если после каждого выполнения какого либо определенного действия прибавлять какое-то количество %. Ну это если ты заранее знаешь сколько ты операций выполнишь чтобы 100 разделить. 
PM MAIL   Вверх
_Dimon_
Дата 2.8.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Так в ProgressBar1 есть Минимальное и Максимальное значение. Забить туда нужные цифры, и при каждой операции добавлять 1.

А вместо
Код

  SplashForm->Label1->Update();
  SplashForm->ProgressBar1->StepBy(15);
  SplashForm->ProgressBar1->Update();

делать
Код

  SplashForm->ProgressBar1->Progress+=1;
  Application->ProcessMessages();


P.S. Билдера нет под рукой - немогу точно сказать как сделать.... но как-то так, если я правильно понял


PM MAIL   Вверх
_Dimon_
Дата 2.8.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



И если я не ошибаюсь, то 
Код

        SplashForm->Free();
        SplashForm->Close();
 
кажись неправильно

надо 

Код

        SplashForm->Close();
        delete SplashForm;

PM MAIL   Вверх
DCamer
Дата 2.8.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(_Dimon_ @  2.8.2010,  19:20 Найти цитируемый пост)
если я правильно понял

Понял правильно, но с "Progress" пишет что оный не является частью ProgressBar1, а StepBy или Position ничего не меняют (даже если создание формы немного усыпить), однако при эмуляции процесса загрузки работают отлично.

Добавлено @ 18:59
Цитата(_Dimon_ @  2.8.2010,  19:47 Найти цитируемый пост)
И если я не ошибаюсь, то 
Код

        SplashForm->Free();
        SplashForm->Close();

 кажись неправильно

Я закрытие сплэш-формы уже по-другому сделал.

Это сообщение отредактировал(а) DCamer - 2.8.2010, 19:00
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
mrbrooks
Дата 3.8.2010, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



1. Не совсем ясно, зачем дублировать создание двух форм SplashForm. Один раз самому, другой раз - Билдеру. Надо SplashForm убрать из автоматического создания форм в свойствах проекта.

2. Есть смысл создать метод в классе SplashForm аля:
Код

void __fastcall TSplashForm::MessageLoadForm(String message)
{
    Label1->Caption = message;
    ProgressBar1->StepBy(20); //форм у тебя 5. При ProgressBar1->Max = 100 шаг = 20
    Sleep(1000);
    Application->ProcessMessages();
}


3. В итоге точка входа будет такой:
Код

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
     try
     {
       SplashForm = new TSplashForm(Application);
       SplashForm->Show();
       SplashForm->Update();  
        Application->Title = "название программы";
        Application->Initialize();
        Application->CreateForm(__classid(TSDIAppForm), &SDIAppForm);
        SplashForm->MessageLoadForm("окна \"о программе\""); 
        Application->CreateForm(__classid(TAboutBox), &AboutBox);
        SplashForm->MessageLoadForm("раздела \"Эффекты\""); 
        Application->CreateForm(__classid(TForm1), &Form1);
        SplashForm->MessageLoadForm("раздела \"AI\""); 
        Application->CreateForm(__classid(TForm2), &Form2);
        SplashForm->MessageLoadForm("From2"); 
        Application->CreateForm(__classid(TForm3), &Form3);
        SplashForm->MessageLoadForm("Form3"); 
        SplashForm->Close();
        delete SplashForm;
        Application->Run();
   }
   catch (Exception &exception)
   {
       Application->ShowException(&exception);
   }
       return 0;
}


Это сообщение отредактировал(а) mrbrooks - 3.8.2010, 09:45
PM MAIL   Вверх
DCamer
Дата 3.8.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(mrbrooks @  3.8.2010,  10:44 Найти цитируемый пост)
зачем дублировать создание двух форм SplashForm

Это билдер сам впихнул.

Цитата(mrbrooks @  3.8.2010,  10:44 Найти цитируемый пост)
//форм у тебя 5. При ProgressBar1->Max = 100 шаг = 20

5 лучше, а форм у меня 22.

Спасибо. Но есть одно "но": этот текст должен прибавляться к тексту в Label.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
mrbrooks
Дата 3.8.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(DCamer @  3.8.2010,  12:55 Найти цитируемый пост)
Это билдер сам впихнул.


Цитата(mrbrooks @  3.8.2010,  10:44 Найти цитируемый пост)
Надо SplashForm убрать из автоматического создания форм в свойствах проекта.




Цитата(DCamer @  3.8.2010,  12:55 Найти цитируемый пост)
5 лучше, а форм у меня 22.

в примере 5. однако под 22 код переделать не проблема.


Цитата(DCamer @  3.8.2010,  12:55 Найти цитируемый пост)
Спасибо. Но есть одно "но": этот текст должен прибавляться к тексту в Label. 

и в чем проблема? в сложности замены = на +=? smile
PM MAIL   Вверх
DCamer
Дата 3.8.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(mrbrooks @  3.8.2010,  13:12 Найти цитируемый пост)
и в чем проблема? в сложности замены = на +=?

Нет. В удалении message из Label, чтобы осталось изначальный текст Label.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
mrbrooks
Дата 3.8.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(DCamer @  3.8.2010,  13:23 Найти цитируемый пост)
Нет. В удалении message из Label, чтобы осталось изначальный текст Label. 

ок. 

Код

Label1->Caption = String().sprintf(L"Исходный текст: %s", message);

PM MAIL   Вверх
DCamer
Дата 3.8.2010, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Всем спасибо, все свободны. smile 
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
mrbrooks
Дата 3.8.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(DCamer @  3.8.2010,  13:55 Найти цитируемый пост)
Всем спасибо, все свободны.

Спасибо в карман не положишь.  smile  smile 

PM MAIL   Вверх
DCamer
Дата 3.8.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(mrbrooks @  3.8.2010,  13:57 Найти цитируемый пост)
Спасибо в карман не положишь

И ещё "плюс" smile 
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.