Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2009, 19:26
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию progressbar и экспорт в excel

Значит как сделать чтобы во время экспорта в excel, чтобы пользователь не видел как формируется страничка. Красовалась форма с progressbar и шла загрузка. Может кто сталкивался с подобным подскажите или еще скиньте исходник если есть. плиз.
Ответить с цитированием
  #2  
Старый 27.04.2009, 19:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Создаешь форму с прогресс-баром, делаешь ей стиль, fsStayOnTop, показываешь ее через Show и начинаешь выполнять экспорт. По тому, как у тебя идут операции экспорта, обновляешь прогресс-бар и вызываешь у это формы метод Update (или Redraw, если больше нравится). Все.
Ответить с цитированием
  #3  
Старый 27.04.2009, 19:44
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

а компонет таймер нужен. вообще только одна процедура нужна???
Ответить с цитированием
  #4  
Старый 27.04.2009, 19:55
Аватар для Sphinx
Sphinx Sphinx вне форума
Прохожий
 
Регистрация: 27.04.2009
Адрес: Kemcity
Сообщения: 36
Репутация: 12
По умолчанию

Смотря как у тебя данные выгружаются в Excel, если в цикле перебираешь строки в таблице, то тут и думать не надо, просто progressbar.Position:=progressbar.Position+1 (если слишком быстро все происходит, можно после этой строчки добавить Application.ProcessMessages).А если через компонент какойнить,то тут отдельно нужно рассматривать компонент
Ответить с цитированием
  #5  
Старый 27.04.2009, 19:55
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

может у кого исходник есть а то самому разбираться времени нет. а очень нужно срочно
Ответить с цитированием
  #6  
Старый 27.04.2009, 19:59
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Hobbit_88
progressbar.Position:=progressbar.Position+1
а это вставлять в процедуру экспорта данных. у меня экспорт идет с dbgrid
Ответить с цитированием
  #7  
Старый 27.04.2009, 20:04
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Sphinx
progressbar.Position:=progressbar.Position+1
а это вставлять в процедуру экспорта
Вот мой код экспорта
Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end;
Ответить с цитированием
  #8  
Старый 27.04.2009, 20:12
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Sphinx
progressbar.Position:=progressbar.Position+1
а это вставлять в процедуру экспорта
Вот мой код экспорта
Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end;
Ответить с цитированием
  #9  
Старый 27.04.2009, 20:21
Аватар для Sphinx
Sphinx Sphinx вне форума
Прохожий
 
Регистрация: 27.04.2009
Адрес: Kemcity
Сообщения: 36
Репутация: 12
По умолчанию

Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin

PRogressbar.position:=0;
Progressbar.min:=0;
Progressbar.max:=DBGrid1.DataSource.DataSet.RecordCount-1;
Progressbar.step:=1;
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
PRogressbar.position:=PRogressbar.position+1;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end;
пробуй
Ответить с цитированием
  #10  
Старый 27.04.2009, 20:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Предполагается что у вас на форме есть ProgressBar1.
Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
ProgressBar1.Max := DBGrid1.DataSource.DataSet.RecordCount-1;
ProgressBar1.Position := 0;
ProgressBar1.Step := 1;
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
ProgressBar1.StepIt;
Application.ProcessMessages;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 27.04.2009, 20:28
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Немножко не успел

А пользоваться лучше не прямой записью в значение, а процедурой и гарантировано обновлять экран:
Код:
ProgressBar1.StepIt;
Application.ProcessMessages;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 27.04.2009 в 20:31.
Ответить с цитированием
  #12  
Старый 27.04.2009, 20:30
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

чет не работает.сразу документ экселевский открывается
Ответить с цитированием
  #13  
Старый 27.04.2009, 20:32
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

страдалец. тоесть на форме где dbgrid
Ответить с цитированием
  #14  
Старый 27.04.2009, 20:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если у вас очень маленький документик, то естественно вы ничего увидеть не успеваете. Если есть желание искуственно затормозить, можно добавить комманду Sleep(500); после обновления прогресбара.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #15  
Старый 27.04.2009, 20:41
Hobbit_88 Hobbit_88 вне форума
Прохожий
 
Регистрация: 24.04.2009
Сообщения: 20
Репутация: 10
По умолчанию

вроде только экспорт в эксель тормозит. и мне надо чтобы форма была с прогресс баром пока экспорт идет
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter