salvar arquivo da area de transferencia no word automaticamente,

Delphi

26/08/2010

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
Geraldo Leal

Geraldo Leal

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

26/08/2010

Veja se isto pode lhe ajudar
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

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
GOSTEI 0
Emerson Nascimento

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.

GOSTEI 0
Geraldo Leal

Geraldo Leal

26/08/2010

Wilson,
GOSTEI 0
Geraldo Leal

Geraldo Leal

26/08/2010

Wilson, muito
GOSTEI 0
Geraldo Leal

Geraldo Leal

26/08/2010

Wilson, muito obrigado
GOSTEI 0
Geraldo Leal

Geraldo Leal

26/08/2010

Wilson, muito obrigado a
GOSTEI 0
Geraldo Leal

Geraldo Leal

26/08/2010

Wilson, muito obrigado a você pela
GOSTEI 0
Geraldo Leal

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
POSTAR