Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido]Abrir arquivo com extensão Qrp Automaticamente


Eder

Pergunta

Ola..

tenho vários relatorios numa pasta com salvos extensão QRP

Cada relatorio é o nome de um vendedor.

então tem o relatorio, joao.qrp, mario.qrp e assim por diante.

O que eu queria é claro se for possivel...é o vendedor selecionar no combobox seu nome e no lado um botão com o seguinte codigo:

procedure TForm1.Button1Click(Sender: TObject);
Var
Vendedor:string;
begin
vendedor:=combobox1.text;
If FileExists (ExtractFilePath(Application.ExeName)+'REL\'+Vendedor+'.QRP') then     //verificar o vendedor se existe rel. pronto
begin
MessageDlg('Este Cliente já possui relatório PRONTO. Click em Ok para Visualizar.', mtInformation, [mbOk],0);
ExecFile(ExtractFilePath(Application.ExeName)+'REL\'+VENDEDOR+'.QRP');
Exit;
End
else
begin
MessageDlg('Este Cliente Não possui relatório PRONTO.', mtInformation, [mbOk],0);
end;
end;

o problema é que ele carrega um aplicativo que tenho aqui associado a extesão QRP ....e depois tem que clickar em outro botão e depois visualizar o relatorio...é muito opção.

Mas eu gostaria que lá no proprio programa depois de escolher o nome e clickar no botão o relatorio fosse visualizado.

Tem alguma maneira de fazer funcionar desta forma? tentei umas dicas aqui..e não ta funcionando.

Grato

Editado por Eder
Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0
o problema é que ele carrega um aplicativo que tenho aqui associado a extesão QRP ....e depois tem que clickar em outro botão e depois visualizar o relatorio...é muito opção.

Mas eu gostaria que lá no proprio programa depois de escolher o nome e clickar no botão o relatorio fosse visualizado.

Oi Eder ... faça as modificações necessárias no seu código:

uses QRPrntr;

procedure AbreRelatorio(FileName:string);
var
   QRPrinter: TQRPrinter;
begin
   if FileExists(FileName) then
   begin
     QRPrinter := TQRPrinter.Create;
     try
       QRPrinter.Load(FileName);
       QRPrinter.Preview;
       repeat
         Application.HandleMessage;
       until not QRPrinter.ShowingPreview;
     finally
       QRPrinter.Free;
     end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
      AbreRelatorio(OpenDialog1.FileName);
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ok...JOnas

esta dica você já tinha me dado um tempo atraz, mas eu precisava trabalhando com o combobox, pois eu teria que fazer uma verificação antes e só permitir que o vendedor xxxx tivesse acesso ao seu relatorio e não aos demais..

Partindo da sua ideia e da sua procedure fiz assim:

Var
Vendedor, Recebe : String;
begin
Vendedor:=ComboBox2.text;
If Vendedor = '' then
Begin
showmessage('Selecione o Vendedor');
Combobox2.setfocus;
exit;
end
else
{verifica se existe arquivo gerado}
If FileExists (ExtractFilePath(Application.ExeName)+'REL\'+Vendedor+'.QRP') then     //verificar o attachment0 {0}
begin
MessageDlg('Este Vendedor já possui Relatório PRONTO. Click em Ok para Visualizar.', mtInformation, [mbOk],0);
AbreRelatorio((Application.ExeName)+'REL\'+VENDEDOR+'.QRP');
Recebe:=(ExtractFilePath(Application.ExeName)+'\REL\'+VENDEDOR+'.QRP');
AbreRelatorio(Recebe);
Exit;
End
.....demais codigos

ai deu certo..depois de selecionado o vendedor no combobox....clikando no botão já abre o relatorio do vendedor selecionado..ficou bom..era o que eu precisava.

muito Grato a ajuda.

Grande Abraço :D

Link para o comentário
Compartilhar em outros sites

  • 0

Ola..Jonas..

Acabei descobrindo um pequeno probleminha na visualização do qrp.

Seguinte...depois de visualizado o qrp(preview), notei que que o botão do PRINTER SETUP ficou visible=false

Parece que o código desabilita este botão ou não habilita, mas neste caso é um botão necessário, pois como temos muitas impressoras em rede, e geralmente preciso que seja impresso em impressa na rede e não local.

teria como fazer tornar visivel este botão(habilitar)...tentei mecher no seu codigo codigo mas não objtive êxito.

muito Grato

Eder

Link para o comentário
Compartilhar em outros sites

  • 0
Seguinte...depois de visualizado o qrp(preview), notei que que o botão do PRINTER SETUP ficou visible=false

Parece que o código desabilita este botão ou não habilita, mas neste caso é um botão necessário, pois como temos muitas impressoras em rede, e geralmente preciso que seja impresso em impressa na rede e não local.

teria como fazer tornar visivel este botão(habilitar)...tentei mecher no seu codigo codigo mas não objtive êxito.

Eder .... o código para mexer no botão do preview não seria este.... mas voce pode mexer na procedure AbreRelatorio

basta incluir o componente PrinterSetupDialog e chamá-lo antes do preview e escolher a impressora para imprimir o relatório.

procedure AbreRelatorio(FileName:string);
var
   QRPrinter: TQRPrinter;
begin
   if FileExists(FileName) then
   begin
     QRPrinter := TQRPrinter.Create;
     try
       QRPrinter.Load(FileName);

       Form1.PrinterSetupDialog1.Execute;  
       
       QRPrinter.Preview;
     repeat
         Application.HandleMessage;
       until not QRPrinter.ShowingPreview;
     finally
       QRPrinter.Free;
     end;
   end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jonas...testei a sua dica...porem não funciona..

na hora no botão quando aparece o setup ...ele até altera....mas quando abre o preview que é clickado no botão de imprimir ai parece que ele volta ao estado padrão do windows...e manda imprimir na impressora padrão do windows...

pareque que o quickreport pega de la....

Não teria como habilitar o botão do proprio quickreport?

grato, Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Não teria como habilitar o botão do proprio quickreport?

Eder ... o Micheus já havia lhe postado que voce teria que criar o seu proprio preview para conseguir isso

http://scriptbrasil.com.br/forum/index.php...st&p=445056

Baixe os exemplos que voce consegue fazer

................................................................

Outra forma, seria voce alterar o codigo do proprio preview do delphi, nesta parte do codigo e recompilando o programa QRPREV.PAS

procedure   TQRStandardPreview.LoadClick(Sender:   TObject);   
  begin   
      with   TOpenDialog.Create(Application)   do   
      try   
          Title   :=   SqrLoadReport;   
          Filter   :=   SqrQRFile   +   '   (*.'   +cQRPDefaultExt   +   ')|*.'   +   cqrpDefaultExt;   
          if   Execute   then   
              if   FileExists(FileName)   then   
              begin   
                  QRPrinter.Load(Filename);   
                  QRPreview.PageNumber   :=   1;   
                  QRPreview.PreviewImage.PageNumber   :=   1;   
                  UpdateInfo;   
                  PrintSetup.Enabled   :=   False;   <<-----  alterar para True 
                  Print.Enabled   :=   true;   
              end   
              else   
                  ShowMessage(SqrFileNotExist);   
      finally   
          free;   
      end;   
  end;

OBS: Só faça isso se tiver certeza do que está fazendo e onde está mexendo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ok..Jonas..mas não consegui...trazer o entendimento deste exemplo do Micheus..para esta solução que mencionei...

o que eu fico entrigado é porque este botão do printersetup do quick fica desabilitado...

tentei assim como abaixo e deveria funcionar...porem não funciona..

procedure AbreRelatorio(FileName:string);
var
   QRPrinter: TQRPrinter;
begin
   if FileExists(FileName) then
   begin
     QRPrinter := TQRPrinter.Create;
     try
       QRPrinter.Load(FileName);
       if Printer.Orientation = poPortrait then
       else
                 QRPrinter.Orientation := poLandscape;
     QrPrinter.PrintSetup;
                 QRPrinter.Print;
       repeat
                 Application.HandleMessage;
       until not QRPrinter.ShowingPreview;
     finally
       QRPrinter.Free;
     end;
   end;
end;
usei estes codigos:
QrPrinter.PrintSetup;
        QRPrinter.Print;

que no caso deveria funcionar pois o QrPrinter aceita o codigo e não dá erro algum....simplismente a Tela de PrintSetup não aparece, já vai direto para o Print e manda imprimir na impressora padrão.

Teria que ter uma maneira mais simples de fazer funcionar...ai ficaria show de bola...

bom..mesmo assim valeu a força.

Grato

Editado por Eder
Link para o comentário
Compartilhar em outros sites

  • 0

Leia o post

http://scriptbrasil.com.br/forum/index.php...st&p=520169

Voce teria que mexer neste programa

{   :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::   
      ::   QuickReport   3.0   for   Delphi   and   C++Builder                               ::   
      ::                                                                                                                   ::   
      ::   QRPREV.PAS   -   QUICKREPORT   STANDARD   PREVIEW   FORM                     ::   
      ::                                                                                                                   ::   
      ::   Copyright   (c)   1998   QuSoft   AS                                                         ::   
      ::   All   Rights   Reserved                                                                           ::   
      ::                                                                                                                   ::   
      ::   web:   http://www.qusoft.no                                                               ::   
      ::                                                                                                                   ::   
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::   }   
    
  {$I   QRDEFS.INC}   
    
  unit   QRPrev;   
    
  interface   
    
  uses   
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   
      ExtCtrls,   StdCtrls,   Buttons,   QRPrntr,   QR3const,   ComCtrls,   ToolWin,   Menus   
  {$ifdef   ver110},   ImgList{$endif};   
    
  type   
      TQRStandardPreview   =   class(TForm)   
          StatusBar:   TStatusBar;   
          ToolBar1:   TToolBar;   
          ZoomFit:   TToolButton;   
          Zoom100:   TToolButton;   
          ZoomToWidth:   TToolButton;   
          Separator1:   TToolButton;   
          FirstPage:   TToolButton;   
          PreviousPage:   TToolButton;   
          ToolButton2:   TToolButton;   
          LastPage:   TToolButton;   
          Separator2:   TToolButton;   
          PrintSetup:   TToolButton;   
          Print:   TToolButton;   
          Separator3:   TToolButton;   
          SaveReport:   TToolButton;   
          LoadReport:   TToolButton;   
          Separator4:   TToolButton;   
          Images:   TImageList;   
          ToolButton1:   TToolButton;   
          ExitButton:   TSpeedButton;   
          QRPreview:   TQRPreview;   
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);   
          procedure   ZoomToFitClick(Sender:   TObject);   
          procedure   ZoomTo100Click(Sender:   TObject);   
          procedure   ZoomToWidthClick(Sender:   TObject);   
          procedure   FirstPageClick(Sender:   TObject);   
          procedure   PrevPageClick(Sender:   TObject);   
          procedure   NextPageClick(Sender:   TObject);   
          procedure   LastPageClick(Sender:   TObject);   
          procedure   PrintClick(Sender:   TObject);   
          procedure   ExitClick(Sender:   TObject);   
          procedure   FormResize(Sender:   TObject);   
          procedure   FormKeyDown(Sender:   TObject;   var   Key:   Word;   Shift:   TShiftState);   
          procedure   SaveClick(Sender:   TObject);   
          procedure   PrintSetupClick(Sender:   TObject);   
          procedure   LoadClick(Sender:   TObject);   
          procedure   QRPreviewPageAvailable(Sender:   TObject;   PageNum:   Integer);   
          procedure   QRPreviewProgressUpdate(Sender:   TObject;   Progress:   Integer);   
          procedure   FormCreate(Sender:   TObject);   
      private   
          FQRPrinter   :   TQRPrinter;   
          Gauge   :   TProgressBar;   
          LastProgress   :   integer;   
      public   
          constructor   CreatePreview(AOwner   :   TComponent;   aQRPrinter   :   TQRPrinter);   virtual;   
          procedure   Show;   
          procedure   UpdateInfo;   
          property   QRPrinter   :   TQRPrinter   read   FQRPrinter   write   FQRPrinter;   
      end;   
    
  implementation   
    
  uses   QuickRpt;   
    
  {$R   *.DFM}   
    
  constructor   TQRStandardPreview.CreatePreview(AOwner   :   TComponent;   aQRPrinter   :   TQRPrinter);   
  begin   
      inherited   Create(AOwner);   
      QRPrinter   :=   aQRPrinter;   
      WindowState   :=   wsMaximized;   
      QRPreview.QRPrinter   :=   aQRPrinter;   
      if   (QRPrinter   <>   nil)   and   (QRPrinter.Title   <>   '')   then   Caption   :=   QRPrinter.Title;   
      Gauge   :=   TProgressBar.Create(Self);   
  //     Gauge.Parent   :=   self;//   
      Gauge.Top   :=   2;   
      Gauge.Left   :=   2;   
      Gauge.Height   :=   10;//   
      Gauge.Width   :=   100;   
      LastProgress   :=   0;   
      ZoomToWidth.Down   :=   true;   
      if   qrprinter.status   =   mpFinished   then   
          Print.Enabled   :=   true;   
  end;   
    
  procedure   TQRStandardPreview.FormClose(Sender:   TObject;   var   Action:   TCloseAction);   
  begin   
      QRPrinter.ClosePreview(Self);   
      Action   :=   caFree;   
  end;   
    
  procedure   TQRStandardPreview.UpdateInfo;   
  begin   
      StatusBar.Panels[1].Text   :=   SqrPage   +   '   '   +   IntToStr(QRPreview.PageNumber)   +   '   '   +   
          SqrOf   +   '   '   +   IntToStr(QRPreview.QRPrinter.PageCount);   
  end;   
    
  procedure   TQRStandardPreview.ZoomToFitClick(Sender:   TObject);   
  begin   
      Application.ProcessMessages;   
      QRPreview.ZoomToFit;   
  end;   
    
  procedure   TQRStandardPreview.ZoomTo100Click(Sender:   TObject);   
  begin   
      Application.ProcessMessages;   
      QRPreview.Zoom   :=   100;   
  end;   
    
  procedure   TQRStandardPreview.ZoomToWidthClick(Sender:   TObject);   
  begin   
      Application.ProcessMessages;   
      QRPreview.ZoomToWidth;   
  end;   
    
  procedure   TQRStandardPreview.FirstPageClick(Sender:   TObject);   
  begin   
      QRPreview.PageNumber   :=   1;   
      UpdateInfo;   
  end;   
    
  procedure   TQRStandardPreview.PrevPageClick(Sender:   TObject);   
  begin   
      QRPreview.PageNumber   :=   QRPreview.PageNumber   -   1;   
      UpdateInfo;   
  end;   
    
  procedure   TQRStandardPreview.NextPageClick(Sender:   TObject);   
  begin   
      QRPreview.PageNumber   :=   QRPreview.PageNumber   +   1;   
      UpdateInfo;   
  end;   
    
  procedure   TQRStandardPreview.LastPageClick(Sender:   TObject);   
  begin   
      QRPreview.PageNumber   :=   QRPrinter.PageCount;   
      UpdateInfo;   
  end;   
    
  procedure   TQRStandardPreview.PrintClick(Sender:   TObject);   
  begin   
      if   QRPrinter.Master   =   nil   then   
          QRPrinter.Print   
      else   if   TCustomQuickRep(QRPrinter.Master).QRPrinter.Status   =   mpFinished   then   
          QRPrinter.Print;   
  end;   
    
  procedure   TQRStandardPreview.ExitClick(Sender:   TObject);   
  begin   
      Close;   
  end;   
    
  procedure   TQRStandardPreview.FormResize(Sender:   TObject);   
  begin   
      QRPreview.UpdateZoom;   
  end;   
    
  procedure   TQRStandardPreview.Show;   
  begin   
  {     QRPreview.QRPrinter.ShowingPreview:=true;}   
      inherited   Show;   
      UpdateInfo;   
  end;   
    
  procedure   TQRStandardPreview.FormKeyDown(Sender:   TObject;   var   Key:   Word;   
      Shift:   TShiftState);   
  begin   
      case   Key   of   
          VK_Next   :   if   Shift   =   [ssCtrl]   then   
                                  LastPageClick(Self)   
                              else   
                                  NextPageClick(Self);   
          VK_Prior   :   if   Shift   =   [ssCtrl]   then   
                                    FirstPageClick(Self)   
                                else   
                                    PrevPageClick(Self);   
          VK_Home   :   FirstPageClick(Self);   
          VK_End   :   LastPageClick(Self);   
          VK_Escape   :   ExitClick(self)   
      end;   
  end;   
    
  procedure   TQRStandardPreview.SaveClick(Sender:   TObject);   
  var   
      aExportFilter   :   TQRExportFilter;   
  {$ifndef   win32}   
      FileExt   :   string;   
      I   :   integer;   
  {$endif}   
  begin   
      aExportFilter   :=   nil;   
      with   TSaveDialog.Create(Application)   do   
      try   
          Title   :=   SqrSaveReport;   
          Filter   :=   QRExportFilterLibrary.SaveDialogFilterString;   
          DefaultExt   :=   cQRPDefaultExt;   
          if   Execute   then   
          begin   
          {$ifdef   win32}   
              if   FilterIndex   =   1   then   
                  QRPrinter.Save(Filename)   
              else   
              begin   
                  try   
                      aExportFilter   :=   TQRExportFilterLibraryEntry(   
                          QRExportFilterLibrary.Filters[FilterIndex   -   2]).ExportFilterClass.Create(Filename);   
                      QRPrinter.ExportToFilter(aExportFilter);   
                  finally   
                      aExportFilter.Free   
                  end   
              end   
          {$else}   
              FileExt   :=   ExtractFileExt(Filename);   
              if   copy(FileExt,   1,   1)   =   '.'   then   delete(FileExt,   1,   1);   
              if   (FileExt   =   '')   or   (FileExt   =   cQRPDefaultExt)   then   
                  QRPrinter.Save(Filename)   
              else   
              begin   
                  for   I   :=   0   to   QRExportFilterLibrary.Filters.Count   -   1   do   
                  begin   
                      if   TQRExportFilterLibraryEntry(QRExportFilterLibrary.Filters[I]).Extension   =   FileExt   then   
                      try   
                          aExportFilter   :=   TQRExportFilterLibraryEntry(   
                          QRExportFilterLibrary.Filters[I]).ExportFilterClass.Create(Filename);   
                          QRPrinter.ExportToFilter(aExportFilter);   
                      finally   
                          aExportFilter.Free;   
                      end;   
                  end;   
              end;   
          {$endif}   
          end;   
      finally   
          Free;   
      end;   
  end;   
    
  procedure   TQRStandardPreview.PrintSetupClick(Sender:   TObject);   
  begin   
      QRPrinter.PrintSetup;   
  end;   
    
  procedure   TQRStandardPreview.LoadClick(Sender:   TObject);   
  begin   
      with   TOpenDialog.Create(Application)   do   
      try   
          Title   :=   SqrLoadReport;   
          Filter   :=   SqrQRFile   +   '   (*.'   +cQRPDefaultExt   +   ')|*.'   +   cqrpDefaultExt;   
          if   Execute   then   
              if   FileExists(FileName)   then   
              begin   
                  QRPrinter.Load(Filename);   
                  QRPreview.PageNumber   :=   1;   
                  QRPreview.PreviewImage.PageNumber   :=   1;   
                  UpdateInfo;   
                  PrintSetup.Enabled   :=   False;   
                  Print.Enabled   :=   true;   
              end   
              else   
                  ShowMessage(SqrFileNotExist);   
      finally   
          free;   
      end;   
  end;   
    
  procedure   TQRStandardPreview.QRPreviewPageAvailable(Sender:   TObject;   
      PageNum:   Integer);   
  begin   
      UpdateInfo;   
      if   qrprinter.status   =   mpFinished   then   
      begin   
          PrintSetup.Enabled   :=   true;   
          Print.Enabled   :=   true;   
      end;   
  end;   
    
  procedure   TQRStandardPreview.QRPreviewProgressUpdate(Sender:   TObject;   
      Progress:   Integer);   
  begin   
      if   Progress   >=   LastProgress   +   5   then   
      begin   
          StatusBar.Panels[0].Text   :=   IntToStr(Progress)+'%';   
          LastProgress   :=   Progress;   
      end;   
  //     Gauge.Position   :=   Progress;   
      if   (Progress   =   0)   or   (Progress   =   100)   then   StatusBar.Panels[0].Text   :=   '';   
  end;   
    
  procedure   TQRStandardPreview.FormCreate(Sender:   TObject);   
  begin   
  {$ifdef   win32}   
        HorzScrollbar.Tracking   :=   true;   
        VertScrollbar.Tracking   :=   true;   
  {$endif}   
  end;   
    
  end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Jonas....bza?

carinha...aonde encontro o QRPREV.PAS ?? vasculhei a pasta do delphi4 e não achei....

existe qrprev.dfm e outros mas o *.pas não achei.

Voce encontra bem em cima do seu post .... rs

OBS: voce tem dois caminhos a seguir, montar o seu preview usando esta unit como exemplo, ou se souber usar os recursos do delphi, voce pode trocar o preview do delphi, por este, alterado.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Voce encontra bem em cima do seu post .... rs

OBS: voce tem dois caminhos a seguir, montar o seu preview usando esta unit como exemplo, ou se souber usar os recursos do delphi, voce pode trocar o preview do delphi, por este, alterado.

R.: sim eu peguei a sua dica a não ser que não compreendi o que você quer dizer...mas eu não sei aonde encontrar na minha maquina o arquivo QRPREV.PAS para ALTERAR o codigo que você postou abaixo no outro tópico:

procedure   TQRStandardPreview.LoadClick(Sender:   TObject);   
  begin   
      with   TOpenDialog.Create(Application)   do   
      try   
          Title   :=   SqrLoadReport;   
          Filter   :=   SqrQRFile   +   '   (*.'   +cQRPDefaultExt   +   ')|*.'   +   cqrpDefaultExt;   
          if   Execute   then   
              if   FileExists(FileName)   then   
              begin   
                  QRPrinter.Load(Filename);   
                  QRPreview.PageNumber   :=   1;   
                  QRPreview.PreviewImage.PageNumber   :=   1;   
                  UpdateInfo;   
                  PrintSetup.Enabled   :=   False;   <<-----  alterar para True 
                  Print.Enabled   :=   true;   
              end   
              else   
                  ShowMessage(SqrFileNotExist);   
      finally   
          free;   
      end;   
  end;

É para alterar em qual arquivo pois o tal QRPREV.PAS eu não encontrei....eu encontei..na pasta lib qrprev.dcu, qrprev.dfm mas o qrprev.pas...não

você disse no outro post:

Outra forma, seria voce alterar o codigo do proprio preview do delphi, nesta parte do codigo e recompilando o programa QRPREV.PAS

é esta forma que eu queria trabalhar...mas to meio que perdido..

Grato

Link para o comentário
Compartilhar em outros sites

  • 0

Voce encontra bem em cima do seu post .... rs

OBS: voce tem dois caminhos a seguir, montar o seu preview usando esta unit como exemplo, ou se souber usar os recursos do delphi, voce pode trocar o preview do delphi, por este, alterado.

R.: sim eu peguei a sua dica a não ser que não compreendi o que você quer dizer...mas eu não sei aonde encontrar na minha maquina o arquivo QRPREV.PAS para ALTERAR o codigo que você postou abaixo no outro tópico:

Eder.. voce não vai encontrar esse programa na sua máquina, por isso postei o código todo dele.

Como eu disse.. se voce souber usar os recursos do delphi, voce modifica e recompila este programa e substitui os qrprev.dcu, qrprev.dfm da sua máquina pelos que foram modificados.

a outra sugestão é voce montar o seu preview usando práticamente todo o código da unit que te passei, então o modifica a seu gosto, depois bastaria voce apenas trocar o seu preview pelo do delphi, que é coisa facil de se fazer.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Seguinte...depois de visualizado o qrp(preview), notei que que o botão do PRINTER SETUP ficou visible=false

Parece que o código desabilita este botão ou não habilita, mas neste caso é um botão necessário, pois como temos muitas impressoras em rede, e geralmente preciso que seja impresso em impressa na rede e não local.

Eder, ele fica assim porque, a princípio, você não poderia mudar algumas informações do relatório (como tamanho da folha), pois ele na verdade já foi gerado (toda a informação já está no arquivo).

.... mas voce pode mexer na procedure AbreRelatorio

basta incluir o componente PrinterSetupDialog e chamá-lo antes do preview e escolher a impressora para imprimir o relatório.

procedure AbreRelatorio(FileName:string);
var
   QRPrinter: TQRPrinter;
begin
   if FileExists(FileName) then
   begin
     QRPrinter := TQRPrinter.Create;
     try
       QRPrinter.Load(FileName);

       Form1.PrinterSetupDialog1.Execute;  
       
       QRPrinter.Preview;
     repeat
         Application.HandleMessage;
       until not QRPrinter.ShowingPreview;
     finally
       QRPrinter.Free;
     end;
   end;
end;

abraço

Jhonas, acredito que esteja "tudo" certo nesta sua dica. O que faltou foi observar que o componente PrinterSetupDialog manipula o objeto Printer (declarado em Printers), entretanto o objeto QRPrinter é inicializado apontando para a impressora padrão. Assim, se PrinterSetupDialog for chamado antes da instanciação de QRPrinter, provavelmente a impressora na visualização já estará trocada.

Mas, mantendo o código como está, basta que seja acrescentada a linha abaixo, antes de chamar o Preview:

QRPrinter.PrinterIndex := Printer.PrinterIndex;

Confiram por favo.

Eder , se a idéia for gerar um for para visualizar um .qrp depois do outro, não vai ser interessante você chamar PrinterSetupDialog1.Execute para cada um. Então, coloque esta chamada antes do laço que fará a carga dos arquivos.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Respondendo ao JOnas:

Eder.. voce não vai encontrar esse programa na sua máquina, por isso postei o código todo dele.

Como eu disse.. se voce souber usar os recursos do delphi, voce modifica e recompila este programa e substitui os qrprev.dcu, qrprev.dfm da sua máquina pelos que foram modificados.

a outra sugestão é voce montar o seu preview usando práticamente todo o código da unit que te passei, então o modifica a seu gosto, depois bastaria voce apenas trocar o seu preview pelo do delphi, que é coisa facil de se fazer.

R.: Ok..Jonas..eu achei que tinha uma arquivo do Quickreport com a codigo:

PrintSetup.Enabled := False; <<----- alterar para True

mas parece que pelo sua explicação eu teria que mudar tudo...

Respondendo ao Micheus:

Jhonas, acredito que esteja "tudo" certo nesta sua dica. O que faltou foi observar que o componente PrinterSetupDialog manipula o objeto Printer (declarado em Printers), entretanto o objeto QRPrinter é inicializado apontando para a impressora padrão. Assim, se PrinterSetupDialog for chamado antes da instanciação de QRPrinter, provavelmente a impressora na visualização já estará trocada.

Mas, mantendo o código como está, basta que seja acrescentada a linha abaixo, antes de chamar o Preview:

QRPrinter.PrinterIndex := Printer.PrinterIndex;

R: Amigo não funcionou não...continua desabilitado o botão.

Grato a todos.

Link para o comentário
Compartilhar em outros sites

  • 0
R.: Ok..Jonas..eu achei que tinha uma arquivo do Quickreport com a codigo:

PrintSetup.Enabled := False; <<----- alterar para True

mas parece que pelo sua explicação eu teria que mudar tudo...

Não teria que mudar tudo ...somente esta linha:

PrintSetup.Enabled := False; <<----- alterar para True

Se voce souber usar os recursos do delphi não tem erro.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Não teria que mudar tudo ...somente esta linha:

PrintSetup.Enabled := False; <<----- alterar para True

Se voce souber usar os recursos do delphi não tem erro.

R.: pois é....mas eu te pergunto.

Esta linha hoje:

PrintSetup.Enabled := False; <<----- alterar para True

no meu delphi ela se encontra aonde? ou não existe mesmo....

Em algum lugar hoje este codigo deve estar assim:

PrintSetup.Enabled := False;

se existir...eu qual arquivo ela deve estar, para mim estão procurar e colocar TRUE

Abraço

:blush:

Link para o comentário
Compartilhar em outros sites

  • 0
Respondendo ao Micheus:

Jhonas, acredito que esteja "tudo" certo nesta sua dica. O que faltou foi observar que o componente PrinterSetupDialog manipula o objeto Printer (declarado em Printers), entretanto o objeto QRPrinter é inicializado apontando para a impressora padrão. Assim, se PrinterSetupDialog for chamado antes da instanciação de QRPrinter, provavelmente a impressora na visualização já estará trocada.

Mas, mantendo o código como está, basta que seja acrescentada a linha abaixo, antes de chamar o Preview:

QRPrinter.PrinterIndex := Printer.PrinterIndex;

R: Amigo não funcionou não...continua desabilitado o botão.

Eder, desculpe se não fui claro. O botão não será habilitado, mas a impressora que você escolheu através do PrinterSetupDialog já estará definida e pronta para uso pelo botão de impressão - então não tem porque habilitar o dito cujo. ;)

Voce não deve ter impresso um relatório para teste (após ter alterado a seleção da impressora)?

Eu assumi que nesse seu processo de automação, você apenas quer mudar a impressora destino, nada mais. Como disse, você não poderá mudar tamanho de folha e a orientação, apenas a informação sobre página inicial e final.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Não teria que mudar tudo ...somente esta linha:

PrintSetup.Enabled := False; <<----- alterar para True

Se voce souber usar os recursos do delphi não tem erro.

R.: pois é....mas eu te pergunto.

Esta linha hoje:

PrintSetup.Enabled := False; <<----- alterar para True

no meu delphi ela se encontra aonde? ou não existe mesmo....

Em algum lugar hoje este codigo deve estar assim:

PrintSetup.Enabled := False;

se existir...eu qual arquivo ela deve estar, para mim estão procurar e colocar TRUE

Eder .. voce não entendeu até agora ... voce não tem este programa na sua máquina

por isso eu te passei o código todo dele que está lá naquele post acima.

então se voce soubesse usar os recursos do delphi ( já percebi que voce não sabe usar ) voce teria que pegar aquele código, jogar dentro de uma Unit, modificar, compilar e substituir no delphi.

Entretanto seguindo a dica do Micheus fiz a alteração no código que ele falou e funciona

uses QRPrntr, Printers;

procedure AbreRelatorio(FileName:string);
var
   QRPrinter: TQRPrinter;
begin
   if FileExists(FileName) then
   begin
     QRPrinter := TQRPrinter.Create;
     try
       QRPrinter.Load(FileName);

       Form1.PrinterSetupDialog1.Execute;

       QRPrinter.PrinterIndex := Printer.PrinterIndex;

       QRPrinter.Preview;
       repeat
         Application.HandleMessage;
       until not QRPrinter.ShowingPreview;
     finally
       QRPrinter.Free;
     end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
      AbreRelatorio(OpenDialog1.FileName);
end;

Então para evitar maiores dores de cabeça para voce, sugiro usar este código.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ola...Pessoal..

Graças a Deus deu certo...ufa.

Sim funciona mesmo como vocês haviam postado.

é que eu não entendi direito o que o Micheus quiz dizer.

valeu...pessoal, muito Grato pela ajuda e mais pela paciência. :blush:

Grande Abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...