salvar arquivo da area de transferencia no word automaticamente,
Bom dia pessoal, estou precisando de ajuda mais uma vez, tenho que pegar um arquivo que
estou copiando para a area de transferencia, e colar no word, porem automaticamente, já consigo copiar. mais não consigo colar. o codigo para copiar segue abaixo. uso delphi7 banco de dados firebird.
procedure TFrm_ajudadv.SpeedButton13Click(Sender: TObject);
const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; { Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
S: string;
I: integer; begin S := '';
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do begin
for I := 0 to Dm.qry_ajudadv.FieldCount -1 do
S := S + DM.qry_ajudadv.Fields[I].FieldName + SeparadorCampoValor+
DM.qry_ajudadv.Fields[I].AsString + separadorcampo ;
S := S + SeparadorRegistro;
DM.qry_ajudadv.Next;
end;
Clipboard.AsText := S; end; agradeço a ajuda dos companheiros. geraldo leal
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; { Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
S: string;
I: integer; begin S := '';
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do begin
for I := 0 to Dm.qry_ajudadv.FieldCount -1 do
S := S + DM.qry_ajudadv.Fields[I].FieldName + SeparadorCampoValor+
DM.qry_ajudadv.Fields[I].AsString + separadorcampo ;
S := S + SeparadorRegistro;
DM.qry_ajudadv.Next;
end;
Clipboard.AsText := S; end; agradeço a ajuda dos companheiros. geraldo leal
Geraldo Leal
Curtidas 0
Respostas
Wilson Junior
26/08/2010
Veja se isto pode lhe ajudar
No uses acrescente Clipbrd.
Espero ter colaborado.
Const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; { Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
S: string;
I: integer;
clipTexto: TClipBoard;
begin
S := '';
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do begin
for I := 0 to Dm.qry_ajudadv.FieldCount -1 do
S := S + DM.qry_ajudadv.Fields[I].FieldName + SeparadorCampoValor+
DM.qry_ajudadv.Fields[I].AsString + separadorcampo ;
S := S + SeparadorRegistro;
DM.qry_ajudadv.Next;
end;
clipTexto := TClipBoard.Create;
clipTexto.AsText := S;
clipTexto.Free;
end;
No uses acrescente Clipbrd.
Espero ter colaborado.
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson, obrigado por atender meu pedido.
veja bem, não funcionou para colar automatico, continuou colando manualmente. faltava uma coisa no codigo coloquei agora. veja abaixo do begin. o winexec
procedure TFrm_ajudadv.SpeedButton13Click(Sender: TObject);
//if savedialog1.Execute then
const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; // Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
S: string;
I: integer;
clipTexto: TClipBoard;
begin
WinExec ('C:\Arquivos de programas\Microsoft Office\Office\winWord',SW_Show);// este aqui estava faltando
S := '';
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do begin
for I := 0 to Dm.qry_ajudadv.FieldCount -1 do
S := S + DM.qry_ajudadv.Fields[I].FieldName + SeparadorCampoValor+
DM.qry_ajudadv.Fields[I].AsString + separadorcampo ;
S := S + SeparadorRegistro;
DM.qry_ajudadv.Next;
end;
clipTexto := TClipBoard.Create;
clipTexto.AsText := S;
clipTexto.Free;
end; obs. ele abre o word, e cola manualmente, não vem colado. outra coisa é que está vindo todos os campos da query, como faço pra vir somente os campos do dbgrid. tentei colocar itemfield, mais não compilou. obrigado pela atençaõ sucesso geraldo leal
const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; // Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
S: string;
I: integer;
clipTexto: TClipBoard;
begin
WinExec ('C:\Arquivos de programas\Microsoft Office\Office\winWord',SW_Show);// este aqui estava faltando
S := '';
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do begin
for I := 0 to Dm.qry_ajudadv.FieldCount -1 do
S := S + DM.qry_ajudadv.Fields[I].FieldName + SeparadorCampoValor+
DM.qry_ajudadv.Fields[I].AsString + separadorcampo ;
S := S + SeparadorRegistro;
DM.qry_ajudadv.Next;
end;
clipTexto := TClipBoard.Create;
clipTexto.AsText := S;
clipTexto.Free;
end; obs. ele abre o word, e cola manualmente, não vem colado. outra coisa é que está vindo todos os campos da query, como faço pra vir somente os campos do dbgrid. tentei colocar itemfield, mais não compilou. obrigado pela atençaõ sucesso geraldo leal
GOSTEI 0
Emerson Nascimento
26/08/2010
tente com este código:
procedure TForm12.Button1Click(Sender: TObject);
const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; // Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
MSWord: OleVariant; //cria o objeto
S: string;
I: integer;
begin
MSWord := CreateOleObject('Word.Basic'); //cria o objeto
MSWord.FileNew;
// configura a barra de progresso (coloquei somente pra 'enfeitar')
dm.qry_ajudadv.Last;// uso clientdataset e precisei disso para obter o num. de registros
Gauge1.MaxValue := dm.qry_ajudadv.RecordCount;
Gauge1.Progress := 0;
// fim de 'configura a barra de progresso'
//desliga os controles visuais melhora a performance, pois não há refresh na tela
dm.qry_ajudadv.DisableControls;
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do
begin
Application.ProcessMessages;// para não congelar a aplicação enquanto varre a tabela
S := '';
// 'monta' um registro
for I := 0 to dbGridAjuda.FieldCount-1 do
s := s + dbGridAjuda.Fields[i].Name + SeparadorCampoValor +
dbGridAjuda.Fields[i].AsString + separadorcampo ;
// coloca o registro no word
MSWord.Insert(S + SeparadorRegistro);
DM.qry_ajudadv.Next;
Gauge1.AddProgress(1); // incrementa a barra de progresso
end;
dm.qry_ajudadv.EnableControls; //reabilita os controles visuais
MSWord.AppShow;// 'mostra' o word, com os registros já inseridos
Gauge1.Progress := 0; // reseta a barra de progresso
end;
obs.:
1. não precisa copiar nada para a área de transferência.
2. são 'importados' somente os campos exibidos na grade.
procedure TForm12.Button1Click(Sender: TObject);
const
SeparadorCampoValor = ': ';
SeparadorCampo = #13#10; // Quebra de linha }
SeparadorRegistro = '===========' + #13#10;
var
MSWord: OleVariant; //cria o objeto
S: string;
I: integer;
begin
MSWord := CreateOleObject('Word.Basic'); //cria o objeto
MSWord.FileNew;
// configura a barra de progresso (coloquei somente pra 'enfeitar')
dm.qry_ajudadv.Last;// uso clientdataset e precisei disso para obter o num. de registros
Gauge1.MaxValue := dm.qry_ajudadv.RecordCount;
Gauge1.Progress := 0;
// fim de 'configura a barra de progresso'
//desliga os controles visuais melhora a performance, pois não há refresh na tela
dm.qry_ajudadv.DisableControls;
dm.qry_ajudadv.First;
while not DM.qry_ajudadv.EOF do
begin
Application.ProcessMessages;// para não congelar a aplicação enquanto varre a tabela
S := '';
// 'monta' um registro
for I := 0 to dbGridAjuda.FieldCount-1 do
s := s + dbGridAjuda.Fields[i].Name + SeparadorCampoValor +
dbGridAjuda.Fields[i].AsString + separadorcampo ;
// coloca o registro no word
MSWord.Insert(S + SeparadorRegistro);
DM.qry_ajudadv.Next;
Gauge1.AddProgress(1); // incrementa a barra de progresso
end;
dm.qry_ajudadv.EnableControls; //reabilita os controles visuais
MSWord.AppShow;// 'mostra' o word, com os registros já inseridos
Gauge1.Progress := 0; // reseta a barra de progresso
end;
obs.:
1. não precisa copiar nada para a área de transferência.
2. são 'importados' somente os campos exibidos na grade.
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson,
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson, muito
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson, muito obrigado
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson, muito obrigado a
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson, muito obrigado a você pela
GOSTEI 0
Geraldo Leal
26/08/2010
Wilson e Emerson muito obrigado a vocês pela participação
Emerson o seu codigo funcionou beleza, ficou muito bom.mais se puder me ajudar em
mais uma coisa. é o seguinte, quando chamo o word, ele vem os campos vem tudo otimo
porem, vem os campos que estão na query, eles tem que estar iguais ao dbgrid. se eles
tiverem todos os campos da tabela, da erro. agora se tiver os mesmos campos do dbgrid
não dá erro nenhum. Estou dizendo isto porque você disse que copiaria direto do dbgrid.
mais é assim mesmo ou tem conserto. Somente isto mais. do resto , Perfeito e ficou muito
bom, procurei muito na internet e não encontrei. fica ai para o pessoal, que estiver precisando.
sucesso.
geraldo leal
GOSTEI 0