Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2010, 03:43   #1
slai
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 21
По умолчанию Progressbar

Здравствуйте.
Подскажите пожалуйста как сделать так чтобы progressbar показывал статус экспорта данных из stringgrid в excel ?
Вот код:
Код:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ComObj, Buttons, OleServer, ExcelXP, DateUtils,
  ComCtrls, ExtCtrls;

type
  TForm5 = class(TForm)
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    ea: TExcelApplication;
    ProgressBar1: TProgressBar;
    procedure FormActivate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);




      private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form5: TForm5;
  dir_:string;
implementation

uses Unit3, Unit1, Unit2;

{$R *.dfm}
procedure TForm5.BitBtn1Click(Sender: TObject);
var
Excel, WorkBook, Sheet:variant;
i, j: integer;
GridPrevFile,extens: string;

begin
GetDir(0, dir_); 
Excel:=CreateOleObject('Excel.Application');
Excel.DisplayAlerts:=False;
Excel.Visible:= False;
Workbook:=Excel.
Workbooks.Add;
Workbook.SaveAs(dir_ + '\temp_' + IntToStr(DayOfTheMonth(Date)) + '.' + IntToStr(MonthOfTheYear(Date)) + '.' + IntToStr(YearOf(Date)) + '.xls');
Sheet:= Workbook.ActiveSheet;
for i:= 0 to StringGrid1.RowCount - 1 do



begin
for j:= 0 to StringGrid1.ColCount - 1 do
Sheet.Cells[i+1, j+1]:= StringGrid1.Cells[j, i];


Excel.WorkBooks[1].WorkSheets[1].Name := 'Лист1';
Excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 33;
Excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 15;
Excel.WorkBooks[1].WorkSheets[1].Columns[3].ColumnWidth := 10;
Excel.WorkBooks[1].WorkSheets[1].Columns[4].ColumnWidth := 23;
end;

Workbook.Save;
Workbook.Close;
Excel.Quit;
Excel:= UnAssigned;
end;



procedure TForm5.FormActivate(Sender: TObject);
var i:integer;
begin

try
DM.dbs.Open;
dm.query.Open;
DM.query.First;
except
on e: exception do showmessage(e.Message);
end;
stringgrid1.Visible:=false;
i:=0;

DM.query.SQL.Text:='select (select F+'+char(39)+' '+char(39)+'+I+'+char(39)+' '+char(39)+'+O from owner where card_id=card.card_id),spiski.card_number,(select mobile_phone from owner where card_id=card.card_id),(select email_address from owner where card_id=card.card_id)'+
'from spiski inner join card on card.card_number=spiski.card_number where act_'+Form1.StringGrid1.cells[0,form1.StringGrid1.row]+'=1';


StringGrid1.Cells[0,0]:= 'Ф.И.О.';
StringGrid1.Cells[1,0]:= 'Номер карточки';
StringGrid1.Cells[2,0]:= 'Телефон';
StringGrid1.Cells[3,0]:= 'Почта';

StringGrid1.ColWidths[0] := 220;
StringGrid1.ColWidths[1] := 100;
StringGrid1.ColWidths[2] := 70;
StringGrid1.ColWidths[3] := 130;

DM.query.Open;
DM.query.First;
while not DM.query.Eof do
begin
inc(i);
stringgrid1.Cells[0,i]:=DM.query.Fields[0].AsString;
stringgrid1.Cells[1,i]:=DM.query.Fields[1].AsString;
stringgrid1.Cells[2,i]:=DM.query.Fields[2].AsString;
stringgrid1.Cells[3,i]:=DM.query.Fields[3].AsString;



stringgrid1.RowCount:=i+1;
DM.query.Next;
end;
stringgrid1.FixedRows:=1;
stringgrid1.Visible:=true;
DM.query.Close;

end;




end.
slai вне форума Ответить с цитированием
Старый 18.10.2010, 04:12   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Код:
Gauge1.MaxValue:=100;
Gauge1.Progress:=0;
for i:= 0 to StringGrid1.RowCount - 1 do
begin
     for j:= 0 to StringGrid1.ColCount - 1 do
     Sheet.Cells[i+1, j+1]:= StringGrid1.Cells[j, i];

     Excel.WorkBooks[1].WorkSheets[1].Name := 'Ëèñò1';
     Excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 33;
     Excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 15;
     Excel.WorkBooks[1].WorkSheets[1].Columns[3].ColumnWidth := 10;
     Excel.WorkBooks[1].WorkSheets[1].Columns[4].ColumnWidth := 23;
     if StringGrid1.RowCount>0 then
     Gauge1.Progress:=Round(((i+1)*100)/StringGrid1.RowCount);
end;
ПС: Gauge - это панель прогресса TGauge из вкладки Samples, использую его, потому как TProgressBar ест больше ресурсов (испытал на своей практике, может быть это не так, но с тех пор я использую Gauge)
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 18.10.2010, 04:36   #3
slai
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 21
По умолчанию

Спасибо большое. Все работает.
slai вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
progressbar Erick Cartman Мультимедиа в Delphi 0 26.03.2010 23:33
ProgressBar masterenergy Microsoft Office Excel 0 18.03.2010 14:04
ProgressBar mish@ Общие вопросы Delphi 2 27.05.2009 16:56
ProgressBar Simon..14 Общие вопросы C/C++ 10 24.01.2009 14:56
ProgressBar Andrei Isaev Общие вопросы Delphi 1 20.11.2008 14:59