Problem z proceduą w wątku

0

Próbuję uruchomić procedurę w wątku lecz nie wszystko działa tak jak trzeba, plik word-a generuje sie tam gdzie trzeba, lecz nie dziala funkcja Word_StringReplace :(

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, comobj, StdCtrls, ComCtrls, shellapi, XPMan, ExtCtrls, Grids,
  DBGrids, DB, dbf, Mask, shlobj, Menus, dbf_fields, JvComponentBase,
  JvDBGridExport, jpeg, JvExControls, JvAnimatedImage, JvGIFCtrl, CheckLst,
  JvExCheckLst, JvCheckListBox, ImgList, JvExStdCtrls, JvButton, JvCtrls,
  Buttons;

  {$R druki.res}

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit5: TEdit;
    Edit7: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit8: TEdit;
    dtp: TDateTimePicker;
    Label9: TLabel;
    Label10: TLabel;
    Edit10: TEdit;
    Label11: TLabel;
    pb: TProgressBar;
    XPManifest1: TXPManifest;
    Bevel1: TBevel;
    Label14: TLabel;
    Label12: TLabel;
    Dbf1: TDbf;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Edit3: TMaskEdit;
    Edit6: TMaskEdit;
    Edit9: TMaskEdit;
    Edit4: TMaskEdit;
    Edit11: TMaskEdit;
    PopupMenu1: TPopupMenu;
    UsuN1: TMenuItem;
    Uaktualnij1: TMenuItem;
    sb: TStatusBar;
    Label13: TLabel;
    Edit12: TEdit;
    Label15: TLabel;
    Edit13: TEdit;
    Label16: TLabel;
    Edit14: TEdit;
    dtp1: TDateTimePicker;
    Label17: TLabel;
    Edit15: TEdit;
    Label18: TLabel;
    ExportdoExcell1: TMenuItem;
    gxls: TJvDBGridExcelExport;
    sd: TSaveDialog;
    etw: TJvDBGridWordExport;
    ew: TMenuItem;
    eh: TMenuItem;
    eth: TJvDBGridHTMLExport;
    JvGIFAnimator1: TJvGIFAnimator;
    clb: TJvCheckListBox;
    PopupMenu2: TPopupMenu;
    Zaznaczwszystko1: TMenuItem;
    Odznaczwszystko1: TMenuItem;
    JvImgBtn1: TJvImgBtn;
    ImageList1: TImageList;
    JvImgBtn2: TJvImgBtn;
    JvImgBtn3: TJvImgBtn;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure Odznaczwszystko1Click(Sender: TObject);
    procedure Zaznaczwszystko1Click(Sender: TObject);
    procedure clbClickCheck(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ehClick(Sender: TObject);
    procedure ewClick(Sender: TObject);
    procedure ExportdoExcell1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Uaktualnij1Click(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure UsuN1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure rgClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TWatek = class(TThread)
 public
  procedure Execute; override;
end;


var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

type
   TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);

function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
begin

  Result := False;

  { Check if file exists }
  if not FileExists(ADocument) then
  begin
    ShowMessage('Nie odnaleziono pliku.');
    Exit;
  end;

  { Create the OLE Object }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'MS Word jest niedostępny.';
      raise;
    end;
  end;

  try
    { Hide Word }
    WordApp.Visible := false;
    { Open the document }
    WordApp.Documents.Open(ADocument);
    { Initialize parameters}
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := SearchString;
    WordApp.Selection.Find.Replacement.Text := ReplaceString;
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    { Perform the search}
    if wrfReplaceAll in Flags then
      WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
    else
      WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
    { Save word }
    WordApp.ActiveDocument.SaveAs(ADocument);
    { Assume that successful }
    Result := True;
    { Close the document }
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
  finally
    { Quit Word }
    WordApp.Quit;
    WordApp := Unassigned;
  end;
end;


function BrowseForFolder(var Foldr: string; Title: string): Boolean;
var
  BrowseInfo: TBrowseInfo;
  ItemIDList: PItemIDList;
  DisplayName: array[0..MAX_PATH] of Char;
begin
  Result := False;
  FillChar(BrowseInfo, SizeOf(BrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @DisplayName[0];
    lpszTitle := PChar(Title);
    ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE;
  end;
  ItemIDList := SHBrowseForFolder(BrowseInfo);
  if Assigned(ItemIDList) then
    if SHGetPathFromIDList(ItemIDList, DisplayName) then begin
      Foldr := DisplayName;
      Result := True;
    end;
end;

procedure twatek.Execute;
begin
    form1.JvImgBtn3.Click;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
plik:file;
res:integer;
Foldr: string;
begin
  if BrowseForFolder(Foldr, 'Wybierz katalog') then
  try
  begin
sb.Panels[1].Text := Foldr;
if messagebox(handle,'Czy dopisać dane przewoźnika do bazy danych ?','Zapis danych',mb_yesno or MB_ICONQUESTION)= id_yes then
begin
dbf1.Active:=false;
dbf1.FilePathFull := extractfilepath(application.ExeName)+'\dane';
dbf1.TableLevel := 7;
dbf1.TableName := 'dane.dbf';
dbf1.Open;
dbf1.Append;
dbf1.FieldByName('Nazwa').AsString:=edit1.Text;
dbf1.FieldByName('Data').AsDateTime:=dtp.Date;
dbf1.FieldByName('Data rozp.').AsDateTime:=dtp1.Date;
dbf1.FieldByName('Adres').AsString:=edit2.Text;
dbf1.FieldByName('Reprezentant').AsString:=edit10.Text;
dbf1.FieldByName('Nr dowodu').AsString:=edit11.Text;
dbf1.FieldByName('NIP').AsString:=edit3.Text;
dbf1.FieldByName('Regon').AsString:=edit4.Text;
dbf1.FieldByName('Telefon').AsString:=edit7.Text;
dbf1.FieldByName('Fax').AsString:=edit8.Text;
dbf1.FieldByName('Nazwa Banku').AsString:=edit5.Text;
dbf1.FieldByName('Nr konta').AsString:=edit6.Text;
dbf1.FieldByName('Nr Q').AsString:=edit9.Text;
dbf1.FieldByName('Nr KRS/ewid. gosp.').AsString:=edit12.Text;
dbf1.FieldByName('Organ wydający').AsString:=edit13.Text;
dbf1.FieldByName('Właściciel konta').AsString:=edit14.Text;
dbf1.FieldByName('SAP').AsString:=edit15.Text;
dbf1.Post;
dbf1.Close;
dbf1.Open;
end;
if clb.Checked[0]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\umowa.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'UMOWA', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Umowę';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=5;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=10;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=20;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','regon_przewoźnika',edit4.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','reprezentant_przewoźnika',edit10.Text,[wrfReplaceAll]);
pb.Position:=35;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','bank_przewoźnika',edit5.Text,[wrfReplaceAll]);
pb.Position:=45;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','konto_przewoźnika',edit6.Text,[wrfReplaceAll]);
pb.Position:=50;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','telefon_przewoźnika',edit7.Text,[wrfReplaceAll]);
pb.Position:=55;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','fax_przewoźnika',edit8.Text,[wrfReplaceAll]);
pb.Position:=60;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=65;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','nr_kuriera',edit9.Text,[wrfReplaceAll]);
pb.Position:=70;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','Nazwa_właściciela',edit14.Text,[wrfReplaceAll]);
pb.Position:=75;
Word_StringReplace(sb.Panels[1].Text+'\umowa.doc','data_rozpoczecia',datetostr(dtp1.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[1]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\aneks.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'ANEKS', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Aneks';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\aneks.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\aneks.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=50;
Word_StringReplace(sb.Panels[1].Text+'\aneks.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=75;
Word_StringReplace(sb.Panels[1].Text+'\aneks.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[2]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\ocp.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'OCP', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję OCP';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=10;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=20;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=35;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','regon_przewoźnika',edit4.Text,[wrfReplaceAll]);
pb.Position:=50;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','bank_przewoźnika',edit5.Text,[wrfReplaceAll]);
pb.Position:=65;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','konto_przewoźnika',edit6.Text,[wrfReplaceAll]);
pb.Position:=80;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','krs_ewid',edit12.Text,[wrfReplaceAll]);
pb.Position:=90;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','org_wyd',edit13.Text,[wrfReplaceAll]);
pb.Position:=95;
Word_StringReplace(sb.Panels[1].Text+'\ocp.doc','nr_sap',edit15.Text,[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Generuję Informacja OCP';
assignfile(plik,sb.Panels[1].Text+'\informacja_ocp.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'INFORMACJA_OCP', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Szczegóły OCP';
assignfile(plik,sb.Panels[1].Text+'\szczegoly_ocp.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'SZCZEGOLY_OCP', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Gotowe';

end;
if clb.Checked[3]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\umowahh.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'UMOWAHH', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Umowę HH';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\umowahh.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=20;
Word_StringReplace(sb.Panels[1].Text+'\umowahh.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=40;
Word_StringReplace(sb.Panels[1].Text+'\umowahh.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=60;
Word_StringReplace(sb.Panels[1].Text+'\umowahh.doc','nr_kuriera',edit9.Text,[wrfReplaceAll]);
pb.Position:=80;
Word_StringReplace(sb.Panels[1].Text+'\umowahh.doc','nr_dow_osob',edit11.Text,[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[4]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\weksel.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'WEKSEL', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Weksel';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\weksel.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\weksel.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=50;
Word_StringReplace(sb.Panels[1].Text+'\weksel.doc','reprezentant_przewoźnika',edit10.Text,[wrfReplaceAll]);
pb.Position:=75;
Word_StringReplace(sb.Panels[1].Text+'\weksel.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[5]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\stawki.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'STAWKI', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Stawki';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\stawki.doc','nr_kuriera',edit9.Text,[wrfReplaceAll]);
pb.Position:=40;
Word_StringReplace(sb.Panels[1].Text+'\stawki.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=80;
Word_StringReplace(sb.Panels[1].Text+'\stawki.doc','data_rozpoczecia',datetostr(dtp1.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[6]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'ANEKS_WIELOPACZKOWOSC', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Aneks o wielopaczkowości';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=5;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=10;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','regon_przewoźnika',edit4.Text,[wrfReplaceAll]);
pb.Position:=40;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','reprezentant_przewoźnika',edit10.Text,[wrfReplaceAll]);
pb.Position:=55;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=85;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc','data_rozpoczecia',datetostr(dtp1.Date),[wrfReplaceAll]);
pb.Position:=100;

assignfile(plik,sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'ANEKS_WIELOPACZKOWOCS_A', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Aneks o wielopaczkowości';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=5;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=10;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','regon_przewoźnika',edit4.Text,[wrfReplaceAll]);
pb.Position:=40;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','reprezentant_przewoźnika',edit10.Text,[wrfReplaceAll]);
pb.Position:=55;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=75;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc','data_rozpoczecia',datetostr(dtp1.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';

end;
if clb.Checked[7]=true then
begin
assignfile(plik,sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc');
rewrite(plik,1);
res:=FindResource(hInstance, 'ANEKS_DOPLATA_PALIWOWA', RT_RCDATA);
BlockWrite(plik, LockResource(LoadResource(hInstance, res))^, SizeofResource(hinstance, res));
closefile(plik);
sb.Panels[0].Text:='Generuję Aneks doplata paliwowa';
pb.Position:=0;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','Nazwa_przewoźnika',edit1.Text,[wrfReplaceAll]);
pb.Position:=5;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','adres_przewoźnika',edit2.Text,[wrfReplaceAll]);
pb.Position:=10;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','nip_przewoźnika',edit3.Text,[wrfReplaceAll]);
pb.Position:=25;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','reprezentant_przewoźnika',edit10.Text,[wrfReplaceAll]);
pb.Position:=55;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','data_zawarcia_umowy',datetostr(dtp.Date),[wrfReplaceAll]);
pb.Position:=85;
Word_StringReplace(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc','data_rozpoczecia',datetostr(dtp1.Date),[wrfReplaceAll]);
pb.Position:=100;
sb.Panels[0].Text:='Gotowe';
end;
if clb.Checked[7]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\Aneks_doplata_paliwowa.doc'),nil,nil,sw_normal);
if clb.Checked[0]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\umowa.doc'),nil,nil,sw_normal);
if clb.Checked[6]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
begin
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_2.doc'),nil,nil,sw_normal);
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\Aneks_wielopaczkowosc_1.doc'),nil,nil,sw_normal);
end;
if clb.Checked[5]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\stawki.doc'),nil,nil,sw_normal);
if clb.Checked[4]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\weksel.doc'),nil,nil,sw_normal);
if clb.Checked[3]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\umowahh.doc'),nil,nil,sw_normal);
if clb.Checked[2]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
begin
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\ocp.doc'),nil,nil,sw_normal);
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\informacja_ocp.doc'),nil,nil,sw_normal);
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\szczegoly_ocp.doc'),nil,nil,sw_normal);
end;
if clb.Checked[1]=true then
if messagebox(handle,'Czy wydrukować wygenerowany plik ?','Wydruk',mb_yesno or MB_ICONQUESTION)= id_yes then
shellexecute(handle,'print',pchar(sb.Panels[1].Text+'\aneks.doc'),nil,nil,sw_normal);


end;
except;
end;
end;
0

Oww! Moje oczy!
Zadbaj o wcięcia i zamknij w tagi < delphi > bo teraz to to odstrasza =]
Nie patrząc na wrogi zdrowiu oczom kod zapytam czy próbowałeś to samo w głównym wątku programu ( np po prostu pod przyciskiem ) i czy wtedy działało? Parę tygodni temu szperałem za obsługą worda z aplikacji ( przez OLE ) i było coś o jednej linii kodu koniecznej przy obsłudze z wątku pobocznego, na którymś pendrive mam chyba jeszcze to co wtedy pisałem ( OLE w wątku pobocznym tam jest akurat i o ile dobrze pamiętam to jest tamta jedna linijka ) więc jeśli nikt Ci nie poda tej magicznej instrukcji lub sam jej nie znajdziesz to się poświęcę i poszukam maluszka =]

0

pogrzebię, ale byłbym bardzo wdzięczny za pomoc :)

0

Znalazłem =]

CoInitializeEx(nil,0);
0

Już doszedłem do sedna do kodu należy dodać application.Initialize. Banalne :(

function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
begin
application.Initialize;
  Result := False;

  { Check if file exists }
  if not FileExists(ADocument) then
  begin
    ShowMessage('Nie odnaleziono pliku.');
    Exit;
  end;

  { Create the OLE Object }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'MS Word jest niedostępny.';
      raise;
    end;
  end;

  try
    { Hide Word }
    WordApp.Visible := false;
    { Open the document }
    WordApp.Documents.Open(ADocument);
    { Initialize parameters}
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := SearchString;
    WordApp.Selection.Find.Replacement.Text := ReplaceString;
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    { Perform the search}
    if wrfReplaceAll in Flags then
      WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
    else
      WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
    { Save word }
    WordApp.ActiveDocument.SaveAs(ADocument);
    { Assume that successful }
    Result := True;
    { Close the document }
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
  finally
    { Quit Word }
    WordApp.Quit;
    WordApp := Unassigned;
  end;
end;
0
PTwr napisał(a)

Znalazłem =]

CoInitializeEx(nil,0);

Dzięki za pomoc :)

0
  1. Aplication.Initialize automatycznie ląduje w pliku dpr i wywołuje się go tylko raz!
  2. ten Twój wątek to sobie możesz wsadzić, i to głęboko bo nie ma on sensu, a i cud że działa
  3. w StringReplace przekazuj już otwarty dokument (olevariant) a nie ścieżkę do pliku - robisz niepotrzebnie kilkanaście (dziesiąt?) razy close/open na tym samym dokumencie!
  4. formatowanie!!
  5. aż się prosi, żeby tam tablice i pętle wstawić

1 użytkowników online, w tym zalogowanych: 0, gości: 1