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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2009, 16:38   #1
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию Word Delphi

процедурка заменяет файлы в шаблоне из множества документов. если документов меньше чем размер шаблона то , удалить незаполненые страницы.
Выдает предупреждение:
[Warning]MainForm.Pas(287):Variable IniFile might Not Have Been Initialized
воюю уже два дня, не могу понять, в чем беда? если он спокойно изменяет документ.

Код:
procedure TForm1.ProcessingDocs(ACodeKey : integer);
 var
      WordDocument1:TWordDocument;
      nomer:string;
      ofile,
      D,Saveasfile : OLEVariant;
      WordDocument1: TWordDocument;
      i            : integer;
      oldPrinter   : AnsiString;
      MessageStr, CaptionStr : AnsiString;
begin
  WordApplication1.Connect;
  WordApplication1.Options.CheckSpellingAsYouType := False;   
  WordApplication1.Options.CheckGrammarAsYouType := False;   

 if  MessageBox( Form1.Handle, PChar(MessageStr), PChar(CaptionStr),  MB_ICONQUESTION or MB_YESNO ) = IDYES then
  begin
   try

   Form2.ProgressBar.Min := 0; Form2.ProgressBar.Position :=0;
   Form2.ProgressBar.Max := StrToInt( lDocumCount.Caption );
   SetWindowPos(Form2.Handle, HWND_TOPMOST, Form2.Left, Form2.Top, Form2.Width, Form2.Height, SWP_NOMOVE or SWP_NOSIZE);
   Form2.Show();
cbPrinters.Text;
   ovCopies := StrToInt(Edit1.Text);
   ofile := ExtractFilePath(Application.ExeName)+'\test.dot';
   if ( ACodeKey = 0 )
     then  
       begin
         WordApplication1.Documents.Open(ofile,EmptyParam, EmptyParam,     EmptyParam, EmptyParam, EmptyParam,                                       EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
         WordApplication1.Visible:=true;
       end
     else 
       begin
         WordApplication1.Documents.Add(ofile,EmptyParam,EmptyParam,EmptyParam);
         WordApplication1.Visible:=true;
       end;

   WordApplication1.ActiveDocument.PageSetup.PaperSize   := wdPaperA4;
   WordApplication1.ActiveDocument.PageSetup.Orientation := wdOrientPortrait;

   oldPrinter := WordApplication1.ActivePrinter;
   if(cbPrinters.Text <> '') then WordApplication1.ActivePrinter := cbPrinters.Text;

   count:=1;
   for i:=0 to clbPayments.Count-1 do
     if clbPayments.Checked[i] then
      begin
        nomer:=IntToStr(count);
        w_date := 'w_date'+nomer;               w_dat_doc := 'w_dat_doc'+nomer;
        w_pp_no := 'w_pp_no'+nomer;             w_rem_name := 'w_rem_name'+nomer;
        w_summa_desc := 'w_summa_desc'+nomer;   w_sender_inn := 'w_sender_inn'+nomer;
        w_kpp_client := 'w_kpp_client'+nomer;   w_summa := 'w_summa'+nomer;
        w_acct_rem := 'w_acct_rem'+nomer;       w_bank_name_rem := 'w_bank_name_rem'+nomer;
        w_bik_rem := 'w_bik_rem'+nomer;         w_acct_bank_rem := 'w_acct_bank_rem'+nomer;
        w_receiv_inn := 'w_receiv_inn'+nomer;   w_kpp_ben := 'w_kpp_ben'+nomer;
        w_acct_rec := 'w_acct_rec'+nomer;       w_rec_name := 'w_rec_name'+nomer;
        w_vid_op := 'w_vid_op'+nomer;           w_ocheredn := 'w_ocheredn'+nomer;
        w_nazn_plat := 'w_nazn_plat'+nomer;     w_p1:='w_p1'+nomer;
        w_p2:='w_p2'+nomer;                     w_p3:='w_p3'+nomer;
        w_p4:='w_p4'+nomer;                     w_p5:='w_p5'+nomer;
        w_p6:='w_p6'+nomer;                     w_p7:='w_p7'+nomer;
        w_name1:='w_name1'+nomer;               w_name2:='w_name2'+nomer;
        w_dat_serv:='w_dat_serv'+nomer;         w_time_serv:='w_time_serv'+nomer;
        w_oper:='w_oper'+nomer;                 w_s:='w_s'+nomer;

       FillPaymentDoc( pTPymentItem (clbPayments.Items.Objects[ i ]), True, 2 );//процедура замены

       Form2.ProgressBar.Position := i+1;
       count:=count+1;
      end;
      WordApplication1.Connect;
      WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
      a:=IntTStr(count);
      WordDocument1.Range(a).Delete(emptyparam,emptyparam);

//*    if ( ACodeKey = 0 )
//*     then
//*      begin
//*       WordApplication1.Printout(ovBackground, ovAppend, ovRange, ovOutputFileName, ovFrom, ovTo,
//*                                 ovItem, ovCopies, ovPages, ovPageType, ovPrintToFile, ovCollate, ovFileName,
//*                                 ovActivePrinterMacGX, ovManualDuplexPrint, ovPrintZoomColumn, ovPrintZoomRow,
//*                                 ovPrintZoomPaperWidth, ovPrintZoomPaperHeight);
//*          WordApplication1.ActivePrinter := oldPrinter;

//*          saveasfile :=False ;
WordApplication1.ActiveDocument.Close(Saveasfile,EmptyParam,EmptyParam);
   WordApplication1.Disconnect;
   WordApplication1.Quit; // âûãðóæàåì âîðä
   Form2.Hide();
   //ïå÷àòü\ïðîñìîòð?
   if ( ACodeKey = 0 )
    then
//*   WordApplication1.ActivePrinter := oldPrinter;
   end;
  end;
end;

Последний раз редактировалось rpy3uH; 29.07.2009 в 16:45.
xtc_win64 вне форума Ответить с цитированием
Старый 29.07.2009, 16:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
воюю уже два дня, не могу понять, в чем беда? если он спокойно изменяет документ.
Не обращай внимание. Это просто предупреждение о том что не инициализировано что-то. Это не смертельно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2009, 16:47   #3
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не обращай внимание. Это просто предупреждение о том что не инициализировано что-то. Это не смертельно.
понимаю но програмка вылетает

естественно изменять он изменяет а вот выделять и удалять не хочет. вылетает програмка.

может кто нибудь что нибудь посоветует? буду весьма благодарен.заранее спасибо.

Последний раз редактировалось Stilet; 29.07.2009 в 16:52.
xtc_win64 вне форума Ответить с цитированием
Старый 29.07.2009, 16:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
понимаю но програмка вылетает
С какой ошибкой и на какой строке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2009, 16:58   #5
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
С какой ошибкой и на какой строке?


вылетает на этой строке.
a:=IntToStr(count);

как понимаю не может выполнить:
WordDocument1.ConnectTo(WordApplica tion1.ActiveDocument);

ошибка:

Progect WAitPrint.exe raised exeption class EaexessViolation With message и далее адрес.

Последний раз редактировалось Stilet; 29.07.2009 в 17:05.
xtc_win64 вне форума Ответить с цитированием
Старый 29.07.2009, 17:04   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Советую не пользоваться компонентом TWordXXX.
Лучше подключаться к ворду через CreateOleObject
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2009, 17:09   #7
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Советую не пользоваться компонентом TWordXXX.
Лучше подключаться к ворду через CreateOleObject
благодарю война продолжается
xtc_win64 вне форума Ответить с цитированием
Старый 31.07.2009, 03:46   #8
SKS
Форумчанин
 
Аватар для SKS
 
Регистрация: 05.01.2009
Сообщений: 242
По умолчанию

Цитата:
bPrinters.Text;
ovCopies := StrToInt(Edit1.Text);
ofile := ExtractFilePath(Application.ExeName )+'\test.dot';
тут так и должно стоять
Цитата:
\test.dot
dot???
SKS вне форума Ответить с цитированием
Старый 31.07.2009, 10:14   #9
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от SKS Посмотреть сообщение
тут так и должно стоять dot???
шаблон ))))
xtc_win64 вне форума Ответить с цитированием
Старый 31.07.2009, 12:48   #10
xtc_win64
 
Регистрация: 29.07.2009
Сообщений: 9
По умолчанию

"секс" с Борланд закончился

Нашел кардинальное решение, не удаление ненужных страниц , а печать нужного диапозона страниц при помощи OvTo,OvFrom,OvPages

OvTo - до какой страницы печать
OvFrom - с какой страницы печать
OvPages(x,y-z). распечатает страницу х и диапозон y-z


Range присваиваем значение wdPrintFromTo по умолчанию стоит AllDocument;

Закрываем топиг спс за сотрудничество

Последний раз редактировалось xtc_win64; 31.07.2009 в 14:18.
xtc_win64 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi + word ToLeG Мультимедиа в Delphi 2 09.07.2009 16:42
delphi и word Doget Помощь студентам 0 03.04.2009 14:07
Delphi и word gool Общие вопросы Delphi 0 07.10.2008 12:21
Ссылка из Delphi на Word s-t-r-i-k-e-r Помощь студентам 2 03.06.2008 19:28
из delphi в word *Devil* Microsoft Office Word 1 24.05.2007 07:55