Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по ProgressBar 
:(
    Опции темы
pharrell
Дата 27.8.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все здравствуйте.Есть небольшая задачка.На форме расположен компонент DBEdit,в котором содержится адре к pdf файлу.Его я открываю так:
Код

ShellExecute(Form5->Handle,"open",DBEdit16->Text.c_str(),
NULL,NULL,SW_RESTORE);

Открытие продолжается некоторое время и хотелось бы чтобы выскакивал ProgressBar,который показывал бы ход открытия файла.
Возможно ли это сделать??И как??
PM MAIL   Вверх
OutlawZ
Дата 29.8.2008, 10:55 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



попробуй кароче так, положи на форму таймер и прогресс бар, в окне редактирования таймера пропиши что то вроде токого:

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ProgressBar1->Visible = true; //Показываем наш индификатор на форме
ProgressBar1->Min = 0; //Указываем Min нулевое значение
ProgressBar1->Max = 30000; //Указываем Max значение 30000
for ( i = ProgressBar1->Min; i <= ProgressBar1->Max; i++) {
     ProgressBar1->Position = i;
     }
     ShellExecute(Form5->Handle,"open",DBEdit16->Text.c_str(), NULL,NULL,SW_RESTORE);
}


Конечно код не совсем истинный он откроет файл когда прогресс бар завершит свою работу а так примерчик ты можешь усовершенствовать!


--------------------
user posted image
user posted image
PM MAIL   Вверх
mrbrooks
Дата 29.8.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



OutlawZ,  smile любопытный подход. 
PM MAIL   Вверх
Alca
Дата 29.8.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Возможно ли это сделать??И как??

Кажись это не реально!


--------------------
PM WWW ICQ Skype Jabber   Вверх
Palladin
Дата 29.8.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возможно все! Но с шелекзекутом вроде действительно нельзя, а вот если ты напишешь свой аналог ShellExecute прибавишь к нему свою примочку(прогрессбар в подарок)... 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
mrbrooks
Дата 30.8.2008, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Palladin, это как то муторно  smile 

pharrell, может стоит поискать компоненты которые могут работать с pdf?

Это сообщение отредактировал(а) mrbrooks - 30.8.2008, 08:21
PM MAIL   Вверх
THandle
Дата 30.8.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Может быть использовать CreateProcess, а потом в ожидании прибавлять значений ProgressBar'у?
PM   Вверх
mrbrooks
Дата 30.8.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



THandle, я об этом тоже думал - вот только без использования ожиданий  smile  хм. Может даже есть смысл влепить событие. Надо подумать.
PM MAIL   Вверх
dumb
Дата 30.8.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(pharrell @  27.8.2008,  22:54 Найти цитируемый пост)
ProgressBar,который показывал бы ход открытия файла
ход открытия ты не сможешь показать. можно только просто гонять прогресс, пока не загрузится:

Unit1.h
Код

//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
  TEdit *DBEdit16;
  TButton *Button1;
  TTimer *Timer1;
  TProgressBar *ProgressBar1;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall Timer1Timer(TObject *Sender);
private:    // User declarations
  void __fastcall OnExecThreadTerminate(TObject *Sender);
public:        // User declarations
  __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Unit1.cpp
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  ProgressBar1->Hide();
  Timer1->Interval = 0;
}
//---------------------------------------------------------------------------


class TExecThread : public TThread
{
  AnsiString FFileName;
  void __fastcall StopProgress();
protected:
  void __fastcall Execute();
public:
  __fastcall TExecThread(const AnsiString &FileName, bool CreateSuspended);
};
//---------------------------------------------------------------------------

__fastcall TExecThread::TExecThread(const AnsiString &FileName, bool CreateSuspended)
  : FFileName(FileName), TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------

void __fastcall TExecThread::StopProgress()
{
  Form1->ProgressBar1->Position = Form1->ProgressBar1->Max;
  Application->ProcessMessages();
  Sleep(200);
  Form1->ProgressBar1->Hide();
}
//---------------------------------------------------------------------------

void __fastcall TExecThread::Execute()
{
  STARTUPINFO si = {sizeof(STARTUPINFO)};
  PROCESS_INFORMATION pi;
  char ExeName[MAX_PATH];
  if ( FindExecutable( FFileName.c_str(), "", ExeName ) > (HINSTANCE)32 )
  {
    if ( CreateProcess(ExeName, (" "+FFileName).c_str(), 0, 0, FALSE, 0, 0, 0, &si, &pi) )
    {
      // дожидаемся окончания загрузки приложения
      WaitForInputIdle(pi.hProcess, INFINITE);
      Synchronize(StopProgress);
      // дожидаемся окончания выполнения приложения
      WaitForSingleObject(pi.hProcess, INFINITE);
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    }
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnExecThreadTerminate(TObject *Sender)
{
//   выполняем какой-либо код
  ShowMessage("end of process in "__FUNC__);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ProgressBar1->Show();
  Timer1->Interval = 50;

  TExecThread *et = new TExecThread(DBEdit16->Text, true);
  et->OnTerminate = OnExecThreadTerminate;
  et->FreeOnTerminate = true;
  et->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  if (ProgressBar1->Visible) ProgressBar1->StepIt();
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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