Delphi x Word
Colega não sei se entende más se você quer tipo criar uma carta de cobrança com um texto padrão é trocar alguns nomes ou linhas faça assim:
unit frmPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, StdCtrls, Buttons;
type
TForm1 = class(TForm)
lbLocador: TLabel;
edLocador: TEdit;
Label1: TLabel;
edLocatario: TEdit;
Label2: TLabel;
edFiadores: TEdit;
ckPintura: TCheckBox;
btImprimir: TBitBtn;
btFechar: TBitBtn;
procedure btImprimirClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Math;
{$R *.dfm}
procedure TForm1.btImprimirClick(Sender: TObject);
var
MSWord: Variant;
szPintura : string;
begin
MSWord := CreateOleObject(´Word.Application´);
MSWord.Documents.Open(ExtractFIlePath(Application.ExeName) + ´modelo.doc´);
// ShowMessage(MSWord.ActiveDocument.Content.Text);
MSWord.ActiveDocument.Content.Find.Execute(FindText := ´<¬NOMELOCADOR¬>´, ReplaceWith := edLocador.Text,
Replace := 2);
MSWord.ActiveDocument.Content.Find.Execute(FindText := ´<¬NOMELOCATARIO¬>´, ReplaceWith := edLocatario.Text,
Replace := 2);
MSWord.ActiveDocument.Content.Find.Execute(FindText := ´<¬FIADORES¬>´, ReplaceWith := edFiadores.Text,
Replace := 2);
if ckPintura.Checked then
szPintura := ´Pintura Nova´
else
szPintura := ´´;
MSWord.ActiveDocument.Content.Find.Execute(FindText := ´<¬PINTURA¬>´, ReplaceWith := szPintura,
Replace := 2);
MSWord.ActiveDocument.PrintOut(Copies := 1);
MSWord.Exit;
// MSWord.Visible := True;
end;
end.
Se não for isso.
Bom encontrei isso aqui já no forum que resolve quase que 100¬ das minhas dúvidas, a principal dúvida é a seguinte. Como o documento do word vai ser um laudo de vistoria, e conterá fotos. É possivel inserir ou trocar fotos do mesmo jeito que é feito com os textos? O objeto tem um salvar como de modo que depois de alterar eu possa salvar ele em disco e imprimir em seguida?
Agradeço desde já as possiveis ajudas.
Vitor Rodrigues
Curtidas 0
Respostas
Vitor Rodrigues
07/03/2008
up
GOSTEI 0
Johnny-walker
07/03/2008
Amigo o segredo está em vc pesquisar as macros que o word cria...
neste exemplo insiro uma imagem do arquivo para o word:
no arquivo WordXP.pas há referencia a estas linhas de código.
Assim quando resolvo inserir uma imagem por cima desta veja:
E mais uma vez o delphi nos mostra o caminho, há esta propriedade no trecho de codigo seguido de sua interface:
[code]
property InlineShapes: InlineShapes read Get_InlineShapes;
e tb sua interface:
/ *********************************************************************//
// Interface: InlineShapes
// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID: {000209A9-0000-0000-C000-000000000046}
// *********************************************************************//
InlineShapes = interface(IDispatch)
[´{000209A9-0000-0000-C000-000000000046}´]
function Get_Application: WordApplication; safecall;
function Get_Creator: Integer; safecall;
function Get_Parent: IDispatch; safecall;
function Get_Count: Integer; safecall;
function Get__NewEnum: IUnknown; safecall;
function Item(Index: Integer): InlineShape; safecall;
function AddPicture(const FileName: WideString; var LinkToFile: OleVariant;
var SaveWithDocument: OleVariant; var Range: OleVariant): InlineShape; safecall;
function AddOLEObject(var ClassType: OleVariant; var FileName: OleVariant;
var LinkToFile: OleVariant; var DisplayAsIcon: OleVariant;
var IconFileName: OleVariant; var IconIndex: OleVariant;
var IconLabel: OleVariant; var Range: OleVariant): InlineShape; safecall;
function AddOLEControl(var ClassType: OleVariant; var Range: OleVariant): InlineShape; safecall;
function New(const Range: Range): InlineShape; safecall;
function AddHorizontalLine(const FileName: WideString; var Range: OleVariant): InlineShape; safecall;
function AddHorizontalLineStandard(var Range: OleVariant): InlineShape; safecall;
function AddPictureBullet(const FileName: WideString; var Range: OleVariant): InlineShape; safecall;
property Application: WordApplication read Get_Application;
property Creator: Integer read Get_Creator;
property Parent: IDispatch read Get_Parent;
property Count: Integer read Get_Count;
property _NewEnum: IUnknown read Get__NewEnum;
end;
[code]
Acredito que isto possa resolver o seu caso....
PS.: a propósito quando coloco a macro para gravar infeliizmente trava-se o mouse para clicar em objetos, o que achei estranho, então a solução é acionar o menu de contexto pelo teclado...
bye
neste exemplo insiro uma imagem do arquivo para o word:
Sub Macro5() ´ ´ Macro5 Macro ´ Macro gravada 16/11/2008 por XP Vista Edition ´ Selection.InlineShapes.AddPicture FileName:= _ "C:\Documents and Settings\Administrador\Meus documentos\Minhas imagens\pequim_logo_censura.jpg" _ , LinkToFile:=False, SaveWithDocument:=True End Sub
no arquivo WordXP.pas há referencia a estas linhas de código.
function AddPicture(const FileName: WideString; var LinkToFile: OleVariant; var SaveWithDocument: OleVariant; var Left: OleVariant; var Top: OleVariant; var Width: OleVariant; var Height: OleVariant; var Anchor: OleVariant): Shape; safecall;
Assim quando resolvo inserir uma imagem por cima desta veja:
Sub Macro6() ´ ´ Macro6 Macro ´ Macro gravada 16/11/2008 por XP Vista Edition ´ Selection.InlineShapes(1).Reset Selection.InlineShapes(1).Reset Selection.InlineShapes.AddPicture FileName:= _ "C:\Documents and Settings\Administrador\Meus documentos\Minhas imagens\teste recordcount.JPG" _ , LinkToFile:=False, SaveWithDocument:=True ´Linha irrelevante - apenas subi o scroll ActiveWindow.ActivePane.VerticalPercentScrolled = 0 End Sub
E mais uma vez o delphi nos mostra o caminho, há esta propriedade no trecho de codigo seguido de sua interface:
[code]
property InlineShapes: InlineShapes read Get_InlineShapes;
e tb sua interface:
/ *********************************************************************//
// Interface: InlineShapes
// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID: {000209A9-0000-0000-C000-000000000046}
// *********************************************************************//
InlineShapes = interface(IDispatch)
[´{000209A9-0000-0000-C000-000000000046}´]
function Get_Application: WordApplication; safecall;
function Get_Creator: Integer; safecall;
function Get_Parent: IDispatch; safecall;
function Get_Count: Integer; safecall;
function Get__NewEnum: IUnknown; safecall;
function Item(Index: Integer): InlineShape; safecall;
function AddPicture(const FileName: WideString; var LinkToFile: OleVariant;
var SaveWithDocument: OleVariant; var Range: OleVariant): InlineShape; safecall;
function AddOLEObject(var ClassType: OleVariant; var FileName: OleVariant;
var LinkToFile: OleVariant; var DisplayAsIcon: OleVariant;
var IconFileName: OleVariant; var IconIndex: OleVariant;
var IconLabel: OleVariant; var Range: OleVariant): InlineShape; safecall;
function AddOLEControl(var ClassType: OleVariant; var Range: OleVariant): InlineShape; safecall;
function New(const Range: Range): InlineShape; safecall;
function AddHorizontalLine(const FileName: WideString; var Range: OleVariant): InlineShape; safecall;
function AddHorizontalLineStandard(var Range: OleVariant): InlineShape; safecall;
function AddPictureBullet(const FileName: WideString; var Range: OleVariant): InlineShape; safecall;
property Application: WordApplication read Get_Application;
property Creator: Integer read Get_Creator;
property Parent: IDispatch read Get_Parent;
property Count: Integer read Get_Count;
property _NewEnum: IUnknown read Get__NewEnum;
end;
[code]
Acredito que isto possa resolver o seu caso....
PS.: a propósito quando coloco a macro para gravar infeliizmente trava-se o mouse para clicar em objetos, o que achei estranho, então a solução é acionar o menu de contexto pelo teclado...
bye
GOSTEI 0
Johnny-walker
07/03/2008
sei que é uma mensagem velha, mas isto deve ajudar alguém
bye
bye
GOSTEI 0