Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: petrusic - Febbraio 22, 2023, 11:08:59 pm

Titolo: [Risolto] lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 22, 2023, 11:08:59 pm
Non metto mani ad un report in Lazarus da quasi un anno, anche se, dopo quanto appreso e messo in pratica lo scorso anno, ho potuto incontrare alcune tipicità che vorrei affrontare in questa occasione per  migliorarmi.
Nel nuovo report in costruzione vorrei impostare un modello di stampa con il Formato A5 e vorrei produrre un file in formato PDF da stampare, eventualmente, successivamente alla sua produzione.

Quindi le domande sono:
- come impostare il formato A5;
- come produrre  una stampa sul file

L'ultima domanda nasce dal fatto che oggi, riesco a stampare soltanto se comando la stampa agendo sull'icona "Print Report" che compare nella finestra video del Report creato con LazReport. Non ho perciò la possibilità in quel momento  di optare per destinare l'output ad un file PDF, piuttosto  che alla stampante.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Febbraio 23, 2023, 09:12:10 am
Per stampare in pdf da lazreport devi usare trascinare sulla form il componente TfrTNPDFExport (ad esempio con il nome frTNPDFExport1), per farlo devi avere installato il pacchetto che trovi nella directory directory_dove_è_installato_lazarus\components\lazreport\source\addons\pdfexport\lazreportpdfexport.lpk


Detto questo poi ipotizzando che il tuo oggetto TfrReport si chiami MyReport ed hai già provveduto a disegnarlo, devi fare quanto segue

Codice: [Seleziona]
               if MyReport.PrepareReport then
               begin
                    SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
                    SaveDialog1.FileName:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
                    if SaveDialog1.Execute then
                    begin
                         if uppercase(ExtractFileExt(SaveDialog1.FileName))='.PDF' then
                         begin
                              //non faccio niente, il nome è già corretto
                              NomePDF:=SaveDialog1.FileName;
                         end
                         else
                         begin
                              //il nome non è corretto, quindi ci aggiungo il .pdf alla fine
                              NomePDF:=SaveDialog1.FileName + '.pdf';
                         end;
                         Screen.Cursor := crHourglass;
                         MyReport.ExportTo(TFrTNPDFExportFilter, NomePDF);
                         Screen.Cursor := crDefault;
                         ShowMessage('Creazione del file PDF terminata.');
                    end;
               end;

Detto questo poi rispondo anche alla tua domanda di come mandare in stampa senza passare dalla preview, io ipotizzo che tu usi il comando

MyReport.ShowReport

che apre la preview, se vuoi mandare direttamente in stampa usa il seguente codice

Codice: [Seleziona]

               if GedDefaultPrinter(NomeStampante)=FALSE then
               begin
                    ShowMessage('Nessuna stampante predefinita.');
               end
               else
               begin
                    MyReport.ChangePrinter(printer.PrinterIndex, -1);
                    if MyReport.PrepareReport then
                    begin
                         MyReport.PrintPreparedReport('',1) {Primo parametro è il numero di pagina, se è vuoto le fa tutte, il secondo è il numero di copie}
                    end
                    else
                    begin
                         ShowMessage('Stampante non raggiungibile.');
                    end;
               end;


Ti ricordo poi che quando l'eseguibile è in esecuzione puoi sempre lanciare il desiger report con il comando

MyReport.DesignReport;

Spero di essere stato esaustivo. Ciao e buon lavoro
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Febbraio 23, 2023, 09:14:29 am
Per il formato A5 devi dal design report andare su File -> Opzioni pagina -> nella tab Carta cambiare la dimensione dal menù a tendina. Ovviamente meglio se lo fai prima di disegnare il tuo report.

Ciao
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 23, 2023, 12:29:24 pm
Per stampare in pdf da lazreport devi usare trascinare sulla form il componente TfrTNPDFExport (ad esempio con il nome frTNPDFExport1), per farlo devi avere installato il pacchetto che trovi nella directory directory_dove_è_installato_lazarus\components\lazreport\source\addons\pdfexport\lazreportpdfexport.lpk

Grazie per tutte le tue preziose indicazioni. e comincio da quella che sta alla base della produzione srtampe in PDF.

Ho trovato il file lazreportpdfexport.lpk, ho trovato anche il file tfrtnpdfexport.png, contenente l'icona corrispondente,  però non trovo l'icona nella finestra di Lazarus-IDE -> LazReport, come puoi riscontrare nell'allegato.

Ho cercato il pacchetto fra quelli installati/installabili, ma non l'ho trovato, perciò sono sempre in difficoltà, perchè nonostante che abbia trovato i file corrispondente, sembrerebbe che il pacchetto non è installato.

Devo installarlo manualmente? Come?          S.O. attuale: Linux Ubuntu 22.04.2 LTS)
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Febbraio 23, 2023, 12:43:24 pm
Se non lo trovi devi installarlo. Devi andare su Pacchetto -> Apri il file del pacchetto (.lpk) -> Selezionare il file lpk che ti ho detto nel post sopra -> Premi sul pulsante Compila. Quando ha finito premi sul pulsante Use->Installa

Questa è la procedura d'installazione. Ricorda che questo pacchetto ha una dipendenza da pack_powerpdf. Quindi prima devi installare lui. Pack_powerpdf non lo trovi già sul tuo sistema quindi devi andare su Pacchetto -> Online package Manager cercare nella lista la voce PowerPDF e dopo averla selezionata premere sul pulsante Install.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 23, 2023, 04:30:47 pm
Se non lo trovi devi installarlo. Devi andare su Pacchetto -> Apri il file del pacchetto (.lpk) -> Selezionare il file lpk che ti ho detto nel post sopra -> Premi sul pulsante Compila. Quando ha finito premi sul pulsante Use->Installa
Questa è la procedura d'installazione. Ricorda che questo pacchetto ha una dipendenza da pack_powerpdf. Quindi prima devi installare lui. Pack_powerpdf non lo trovi già sul tuo sistema quindi devi andare su Pacchetto -> Online package Manager cercare nella lista la voce PowerPDF e dopo averla selezionata premere sul pulsante Install.

Fatto. Ora il componente compare fra quelli sotto la linguetta LazReport.

Citazione da: xinyiman
rispondo anche alla tua domanda di come mandare in stampa senza passare dalla preview, io ipotizzo che tu usi il comando MyReport.ShowReport
che apre la preview, se vuoi mandare direttamente in stampa usa il seguente codice
. . .

In realtà non pensavo ad un'alternativa fra stampa su file .PDF e stampa diretta, senza Anteprima. Vorrei, infatti, produrre sempre l'export in PDF e, poi, comandare la stampa del PDF appena creato.

Ciò, tradotto in pratica, potrebbe significare che dopo avere eseguito l'export in PDF, dovrei:
- comandare da programma, a fine Anteprima, una shell di stampa del File .PDF;
oppure, in alternativa,
- eseguire la stampa direttamente, per esempio, dopo essere uscito dall'anteprima.


Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Febbraio 23, 2023, 05:05:51 pm
Semplicemente puoi usare la funzione OpenDocument

Codice: [Seleziona]
uses
  ..., LCLIntf;
  
procedure ...
begin
  OpenDocument('nome_file.pdf');
end;

Che ti permette di lanciare dei documenti con il programma predefinito per il sistema operativo.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 23, 2023, 10:22:40 pm
Semplicemente puoi usare la funzione OpenDocument

Codice: [Seleziona]
uses
  ..., LCLIntf;
 
procedure ...
begin
  OpenDocument('nome_file.pdf');
end;

Che ti permette di lanciare dei documenti con il programma predefinito per il sistema operativo.

Ah, perfetto.

Per il formato A5 devi dal design report andare su File -> Opzioni pagina -> nella tab Carta cambiare la dimensione dal menù a tendina. Ovviamente meglio se lo fai prima di disegnare il tuo report.
Anche questa modifica è andata a segno.

Per il resto ancora da fare, ti faccio sapere.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 25, 2023, 12:23:51 pm
Sto cercando di impostare il report di stampa, ma ho ancora qualche difficoltà:
- Ho scorso il contenuto del file .lrf prodotto durante il disegno del modulo di report, ma non trovato i riferimenti alla dimensione di pagina di tipo A5 (le dimensioni che vi ho trovate mi sembrano uguali a quelle di default, quindi A4)
Codice: [Seleziona]
 . . .
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>
        <Height Value="842"/>
        <Script Value=""/>
        <PgSize Value="9"/>
        <Margins>
          <left Value="0"/>
          <Top Value="0"/>
          <Right Value="0"/>
          <Bottom Value="0"/>
        </Margins>
        <Orientation Value="poPortrait"/>
        <UseMargins Value="True"/>
        <PrintToPrevPage Value="False"/>
        <ColCount Value="0"/>
        <ColGap Value="0"/>
        <LayoutOrder Value="loColumns"/>
 . . .
  ho cercato anche di vedere l'impostazione di pagina nella finestra Designer, m andando in File -> opzioni pagina, si accende il messaggio d'Errore "Paper "A4 210 x 297 mm" not supported!", riportato nell'allegato, però ieri sono riuscito ad andare avanti fino a selezionare la dimensione pagina A5.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 25, 2023, 03:34:07 pm
Per il dimensionamento della pagina di stampa, ho trovato che tutti i dimensionamenti selezionabili sono presenti nel file /usr/share/lazarus/2.2.4/components/lazreport/source/lr_prntr.pas
Nel file ho rilevato poi le impostazioni relative:
-  A4:   X:595;  Y:842
-  A5:  X:420;  Y:595

Quindi, per correggere le attuali impostazioni presenti nel file  mioReportA5.lrf, dovrei:
Codice: [Seleziona]
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>       <--- cambiare 595 in 420
        <Height Value="842"/>       <--- cambiare 842 in 595
Così facendo, penso che lo scopo è raggiunto. Vorrei aggiungere un commento, ma non so come si fa.

Non ricordavo l'icona relativa all'inserimento delle Memo, ma poi l'ho individuata.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 26, 2023, 09:35:46 am
Per il dimensionamento della pagina di stampa, ho trovato che tutti i dimensionamenti selezionabili sono presenti nel file /usr/share/lazarus/2.2.4/components/lazreport/source/lr_prntr.pas
Nel file ho rilevato poi le impostazioni relative:
-  A4:   X:595;  Y:842
-  A5:  X:420;  Y:595

Quindi, per correggere le attuali impostazioni presenti nel file  mioReportA5.lrf, dovrei:
Codice: [Seleziona]
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>       <--- cambiare 595 in 420
        <Height Value="842"/>       <--- cambiare 842 in 595
Così facendo, penso che lo scopo è raggiunto. Vorrei aggiungere un commento, ma non so come si fa.

Invece non ha funzionato, perchè, alla prima modifica in  Report Designer, i valori che ho impostati manualmente nel file mioReport.lrf vengono sempre alterati con valori assurdi che, probabilmente, provocano poi l'errore "Paper "A4 210 x 297 mm" not supported!",

Ecco le prime righe del file, dove è riscontrabile l'alterazione appena indicata:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<CONFIG>
  <LazReport>
    <Version Value="31"/>
    <Title Value=""/>
    <Subject Value=""/>
    <KeyWords Value=""/>
    <Comments Value=""/>
    <ReportCreateDate Value="1899-12-30 00:00:00"/>
    <ReportLastChange Value="2023-02-25 23:12:44"/>
    <ReportVersionBuild Value=""/>
    <ReportVersionMajor Value=""/>
    <ReportVersionMinor Value=""/>
    <ReportVersionRelease Value=""/>
    <ReportAutor Value=""/>
    <Script Value=""/>
    <Pages>
      <PrintToDefault Value="False"/>
      <DoublePass Value="False"/>
      <SelectedPrinter Value="HP_OfficeJet_Pro_6960_C12CFC_USB"/>
      <PageCount Value="1"/>
      <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="2100"/>        <--- ???
        <Height Value="2970"/>        <--- ???
        <Script Value=""/>
        <PgSize Value="9"/>
        <Margins>
          <left Value="0"/>
          <Top Value="0"/>
          <Right Value="0"/>
          <Bottom Value="0"/>
        </Margins>
        <Orientation Value="poPortrait"/>
        <UseMargins Value="True"/>
        <PrintToPrevPage Value="False"/>
        <ColCount Value="0"/>
        <ColGap Value="0"/>
        <LayoutOrder Value="loColumns"/>

Non nascondo le mie difficoltà a creare questo nuovo report. Sto faticando forse più della prima volta ed ancora non ho finito.
Forse, sapendo come costruire il file manualmente, si farebbe prima e meglio. Il guaio è però che non so dove attingere le informazioni necessarie per realizzare praticamente il mio pensiero.
 :-\
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: DragoRosso - Febbraio 26, 2023, 11:44:34 am
Purtroppo non posso aiutarti, però posso sconsigliarti dal modificare a mano file che vengono usati dai componenti di Lazarus (in generale vale per ogni IDE) in quanto tali file vengono molto spesso rigenerati o al caricamento del componente o al salvataggio / modifica dello stesso.

In questo caso secondo me i dati che hai indicato sono dati secondari generati come "appoggio" pratico (probabilmente per generare l'interfaccia grafica) e non vengono usati direttamente dal componente.

Ciao
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 27, 2023, 12:53:42 pm
Vista l'impossibilità ad impostare il formato di pagina A5 nel modello di report attuale, ne ho creato uno nuovo.
Ho eseguito quindi "Strumenti→Opzioni Pagina" ed ho potuto così impostare la dimensione del foglio A5 e proseguire, poi, con le altre impostazioni di band e memo.
Devo però anche dire che, rientrando successivamente nelle impostazioni del report creato prima e volendo verificare la rispondenza della dimensione di pagina col formato A5, ritorna imperterrito il messaggio d'errore di dimensione nion supportata (Paper "A5 148x210 mm" not supported!.).

Ne deduco che ci sia un'anomalia, ma di che tipo? Manca pacchetto?
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: DragoRosso - Febbraio 27, 2023, 01:22:38 pm
Banalmente il progetto potrebbe essere danneggiato. Può essere "riparato" a mano ... ma visto che costruendo un nuovo report tutto funziona ti consiglio di cestinare quello vecchio e proseguire con quello nuovo,

Ciao
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 27, 2023, 03:26:51 pm
Banalmente il progetto potrebbe essere danneggiato. Può essere "riparato" a mano ... ma visto che costruendo un nuovo report tutto funziona ti consiglio di cestinare quello vecchio e proseguire con quello nuovo,

Ho provato a partire con un nuovo report ma questa volta non mi ha permesso ci impostare un formato pagina A5, infatti, dopo il click su File -> Opzioni pagina, è apparso subilto il messaggio di Errore "Paper "A4 210 x 297 mm" not supported!"

Ora NON so proprio come andare avanti.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 28, 2023, 09:31:15 am
La segnalazione di Errore, come già detto, NON si verifica sempre, quindi ieri sera ho provato a ridisegnare interamente il report nel formato A5 e sono riuscito ad arrivare fino alla fine delle impostazioni senza incappare nell'Errore. Per riuscire in ciò, ho tentato, e sembra che ci sia riuscito, ad impostare la pagina di tipo A5, subito dopo l'accesso all'area di Report Designer e prima ancora di procedere con tutte le altre impostazioni sul modello.

Posso, perciò, finalmente, cominciare ad aggiungere la codifica per riempire il report coi dati da stampare in PDF.
 :)
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Febbraio 28, 2023, 06:59:03 pm
Per stampare in pdf da lazreport devi usare trascinare sulla form il componente TfrTNPDFExport (ad esempio con il nome frTNPDFExport1), per farlo devi avere installato il pacchetto che trovi nella directory directory_dove_è_installato_lazarus\components\lazreport\source\addons\pdfexport\lazreportpdfexport.lpk
Detto questo poi ipotizzando che il tuo oggetto TfrReport si chiami MyReport ed hai già provveduto a disegnarlo, devi fare quanto segue
Codice: [Seleziona]
               if MyReport.PrepareReport then
               begin
                    SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
                    SaveDialog1.FileName:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
                    if SaveDialog1.Execute then
                    begin
                         if uppercase(ExtractFileExt(SaveDialog1.FileName))='.PDF' then
                         begin
                              //non faccio niente, il nome è già corretto
                              NomePDF:=SaveDialog1.FileName;
                         end
                         else
                         begin
                              //il nome non è corretto, quindi ci aggiungo il .pdf alla fine
                              NomePDF:=SaveDialog1.FileName + '.pdf';
                         end;
                         Screen.Cursor := crHourglass;
                         MyReport.ExportTo(TFrTNPDFExportFilter, NomePDF);
                         Screen.Cursor := crDefault;
                         ShowMessage('Creazione del file PDF terminata.');
                    end;
               end;
Ho quasi superato le difficoltà per disegnare la pagina in formato A5 del report.
Ora dovrei aggiungere le istruzioni che mi hai indicato per produrre il documento pdf, ma non ho capito dove aggiungerle:
Riporto qui la procedura che avvia la preview di stampa:
Codice: [Seleziona]
procedure TForm9.BPulsStampaClick(Sender: TObject);
var
  i, k, nuRg: integer;

  cellaSel, fileReport, striMia, titolo: String;

begin
  WriteLn('procedure TForm9.BPulsStampaClick');
  nuRg:= GridChiuStmp.RowCount;
  if MGridPdf9.Active then
  begin
    MGridPdf9.Close;
  end;
  MGridPdf9.Clear(False);
  MGridPdf9.Open;
  for i:= 1 to nuRg - 1 do
  begin
    MGridpdf9.Append;
    MGridpdf9.Edit;
    MGridpdf9.FieldByName('voceSotCto').Text:= GridChiuStmp.Cells[2, i];
    MGridpdf9.FieldByName('entrate').Text:= GridChiuStmp.Cells[3, i];
    MGridpdf9.FieldByName('uscite').Text:= GridChiuStmp.Cells[4, i];
  end;
  fileReport:= percorso + '/Dati/pdfEntrUsc.lrf';
  frReport1.LoadFromFile(fileReport);
  frReport1.ShowReport;

  if frReport1.PrepareReport then    <------- Gruppo istruzioni per produrre il modulo in PDF
  begin
     SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
     SaveDialog1.FileName:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
     . . .
  end;
end;
???
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Marzo 01, 2023, 08:53:36 am
Devi metterle al posto della ShowReport. O se proprio vuoi fare prima l'anteprima e alla sua chiusura il salvataggio in pdf sposta la showreport all'interno dell'if del preparereport.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 01, 2023, 06:47:36 pm
Devi metterle al posto della ShowReport. O se proprio vuoi fare prima l'anteprima e alla sua chiusura il salvataggio in pdf sposta la showreport all'interno dell'if del preparereport.
Perfetto. Ha funzionato quasi magnificamente.

Io ho preferito formare il file in pdf prima di mostrare l'anteprima, ma niente toglie che possa cambiare idea, oppure, potrei riscriverlo sempre su se stesso, qualora togliessi dal nome del file la data e l'ora di creazione.

Riporto la parte di codice riguardante la creazione del file pdf, perchè avrei bisogno di capire meglio cosa succede:
Codice: [Seleziona]
DomusRatioPDF:=SaveDialog1.FileName + '.pdf';    
è l'istruzione che crea il file .pdf, ma prima di farlo apre una finestra per la conferma del nome file  (ho capito)

Se è come ho capito, vorrei capire anche se è possibile NON mostrare la finestra e proseguire, prendendo sempre buono il nome già impostato nel programma

poi:
Codice: [Seleziona]
 Screen.Cursor := crHourglass;
 frReport1.ExportTo(TFrTNPDFExportFilter, DomusRatioPDF);
 Screen.Cursor := crDefault;               
Ho provato a disinibirle ed ho visto che il file .pdf è stato già creato. Ma allora a cosa servono ?

Scusa xinyiman se chiedo magari concetti scontati, ma preferisco chiedere, piuittosto che andare avanti senza rendermi conto.


Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Marzo 02, 2023, 09:52:05 am
Riporto la parte di codice riguardante la creazione del file pdf, perchè avrei bisogno di capire meglio cosa succede:
Codice: [Seleziona]
DomusRatioPDF:=SaveDialog1.FileName + '.pdf';    
è l'istruzione che crea il file .pdf, ma prima di farlo apre una finestra per la conferma del nome file  (ho capito)

Se è come ho capito, vorrei capire anche se è possibile NON mostrare la finestra e proseguire, prendendo sempre buono il nome già impostato nel programma
No, quella riga prende solo il nome del file pdf che vuoi creare, in quanto ti permette di modificarlo manualmente dalla Save Dialog.
Per non mostrare la finestra cambi il mio codice da così

Codice: [Seleziona]
SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
                    SaveDialog1.FileName:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
                    if SaveDialog1.Execute then
                    begin
                         if uppercase(ExtractFileExt(SaveDialog1.FileName))='.PDF' then
                         begin
                              //non faccio niente, il nome è già corretto
                              NomePDF:=SaveDialog1.FileName;
                         end
                         else
                         begin
                              //il nome non è corretto, quindi ci aggiungo il .pdf alla fine
                              NomePDF:=SaveDialog1.FileName + '.pdf';
                         end;
                         Screen.Cursor := crHourglass;
                         MyReport.ExportTo(TFrTNPDFExportFilter, NomePDF);
                         Screen.Cursor := crDefault;
                         ShowMessage('Creazione del file PDF terminata.');
                    end;

a così

Codice: [Seleziona]
                         NomePDF:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
                         Screen.Cursor := crHourglass;
                         MyReport.ExportTo(TFrTNPDFExportFilter, NomePDF);
                         Screen.Cursor := crDefault;
                         ShowMessage('Creazione del file PDF terminata.');
poi:
Codice: [Seleziona]
 Screen.Cursor := crHourglass;
 frReport1.ExportTo(TFrTNPDFExportFilter, DomusRatioPDF);
 Screen.Cursor := crDefault;               
Ho provato a disinibirle ed ho visto che il file .pdf è stato già creato. Ma allora a cosa servono ?

Scusa xinyiman se chiedo magari concetti scontati, ma preferisco chiedere, piuittosto che andare avanti senza rendermi conto.

La prima riga cambia la grafica del puntatore del mouse in una clessidra, la seconda riga esporta in pdf il tuo report e la terza riga riporta la grafica del puntatore del mouse al tuo cursore di default.

Non scusarti, è giusto voler capire.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 02, 2023, 11:28:08 am
@ xinyiman

Grazie dell'aiuto.  la modifica è  andata bene.
Ora, senza fermare l'esecuzione del programma, riesco a fare l'export in PDF e poi compare automaticamente l'anteprima stampa.

Ho purtroppo qualche difficoltà nella compilazione della griglia del modello di stampa, ma ce l'avevo anche prima di aggiungere le istruzioni di export in pdf.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 02, 2023, 05:36:38 pm
Va bene, ci sono quasi.
Devo ancora scoprire se è possibile impostare il font delle celle della griglia del report.

Ho anche la necessità di impostare un Font bold nella Memo di testata dei pagina e di sottolinearla.
L'unica riga che mi ritrovo col Font bold è quella di testa dei dati principali, perchè è stata impostata così automaticamente in fase di disegno del report.

Poi devo aggiungere anche che dovrei comandare l'allineamento a destra dei valori interni a due delle colonne  del report.
 ::)

Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Marzo 03, 2023, 08:28:31 am
Guarda immagine allegata, devi selezionare il campo e dal menù in alto devi usare i pulsanti di bold e sottolineatura del carattere.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 03, 2023, 11:13:42 am
Guarda immagine allegata, devi selezionare il campo e dal menù in alto devi usare i pulsanti di bold e sottolineatura del carattere.
E' vero. Mi dispiace avere fatto tanto rumore per niente. Sono proprio entrato nel pallone.

Comunque ho provato ad impostare il formato bold, l'allineamento a destra e la sottolineatura.

Nell'anteprima funziona tutto, mentre nel file pdf manca la sottolineatura.
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 03, 2023, 12:52:53 pm
E' arrivato il momento di aggiungere l'anno nella Memo di testa nella pagina.

Ho trovato un suggerimento che sfrutta l'evento OnGetValue del report frReport1 ed ho scritto:
Codice: [Seleziona]
procedure TForm9.frReport1GetValue(const ParName: String; var ParValue: Variant
  );
begin
  Writeln('TForm9.frReport1GetValue');
  begin
    if ParName = 'TestataEntrusc' then       // TestataEntrusc è una variabile della categoria TitoloPaginaA5
    begin
      ParValue := Eanno.Text;
      Writeln('ParValue= ' + ParValue);
    end;
  end;
end;               

Ebbene, a me non ha funzionato. In Console ho trovato il seguente Errore:
Citazione
[WARNING] SetAlphaBlend called without handle for frProgressForm(TfrProgressForm)
TForm9.frReport1GetValue
ParValue= 2019

Ho trovato qualcosa che dice di copiare il file .lrf, generato automaticamente da Lazarus nella cartella /DomusRatio/bin/Dati, nella cartella /DomusRatio/bin, ma non mi sembra logico, altrimenti sarebbe stato Lazarus a crearlo direttamente nella /bin.

In definitiva, anche se l'Errore è un Warning, io non riesco ad aggiungere l'anno di riferimento nella riga di testa, nella pagina del report.

Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Marzo 03, 2023, 01:09:34 pm
E' arrivato il momento di aggiungere l'anno nella Memo di testa nella pagina.

Ho trovato un suggerimento che sfrutta l'evento OnGetValue del report frReport1 ed ho scritto:
Codice: [Seleziona]
procedure TForm9.frReport1GetValue(const ParName: String; var ParValue: Variant
  );
begin
  Writeln('TForm9.frReport1GetValue');
  begin
    if ParName = 'TestataEntrusc' then       // TestataEntrusc è una variabile della categoria TitoloPaginaA5
    begin
      ParValue := Eanno.Text;
      Writeln('ParValue= ' + ParValue);
    end;
  end;
end;               

Ebbene, a me non ha funzionato. In Console ho trovato il seguente Errore:
Citazione
[WARNING] SetAlphaBlend called without handle for frProgressForm(TfrProgressForm)
TForm9.frReport1GetValue
ParValue= 2019

Ho trovato qualcosa che dice di copiare il file .lrf, generato automaticamente da Lazarus nella cartella /DomusRatio/bin/Dati, nella cartella /DomusRatio/bin, ma non mi sembra logico, altrimenti sarebbe stato Lazarus a crearlo direttamente nella /bin.

In definitiva, anche se l'Errore è un Warning, io non riesco ad aggiungere l'anno di riferimento nella riga di testa, nella pagina del report.

Commenta le righe del writeln
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 03, 2023, 03:01:11 pm
Commenta le righe del writeln

Non capisco, comunque, ci provo:
- la prima riga (Writeln('TForm9.frReport1GetValue');  ) è una riga che uso abitualmente come prima istruzione di una procedure o di una function per creare una sorta di trace  a mio uso e consumo: mi serve per capire se la procedura viene avviata e se un'eventuale errore si verfica quindi prima che si avvii la procedure cronologicamente successiva.
- la prima riga (Writeln('ParValue= ' + ParValue);   ) mi è servita per capire se il campo ParValue (parametro della procedure TForm9.frReport1GetValue(const ParName: String; var ParValue: Variant );), viene valorizzato bene.  Ho visto che è stato valorizzato bene.

Non so se era quello che volevi sapere.

Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: xinyiman - Marzo 03, 2023, 03:40:57 pm
Commenta le righe del writeln

Non capisco, comunque, ci provo:
- la prima riga (Writeln('TForm9.frReport1GetValue');  ) è una riga che uso abitualmente come prima istruzione di una procedure o di una function per creare una sorta di trace  a mio uso e consumo: mi serve per capire se la procedura viene avviata e se un'eventuale errore si verfica quindi prima che si avvii la procedure cronologicamente successiva.
- la prima riga (Writeln('ParValue= ' + ParValue);   ) mi è servita per capire se il campo ParValue (parametro della procedure TForm9.frReport1GetValue(const ParName: String; var ParValue: Variant );), viene valorizzato bene.  Ho visto che è stato valorizzato bene.

Non so se era quello che volevi sapere.

No intendo dire di commentare/togliere le righe del writeln (secondo me danno fastidio)

Codice: [Seleziona]
procedure TForm9.frReport1GetValue(const ParName: String; var ParValue: Variant
  );
begin
  //Writeln('TForm9.frReport1GetValue');
  begin
    if ParName = 'TestataEntrusc' then       // TestataEntrusc è una variabile della categoria TitoloPaginaA5
    begin
      ParValue := Eanno.Text;
      //Writeln('ParValue= ' + ParValue);
    end;
  end;
end;     
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 03, 2023, 04:57:35 pm
No intendo dire di commentare/togliere le righe del writeln (secondo me danno fastidio)

Va bene. Le ho eliminate, ma non è cambiato niente. C'è sempre l'Errore
Citazione
[WARNING] SetAlphaBlend called without handle for frProgressForm(TfrProgressForm)
Titolo: Re:lazReport - primi passi - 2.a parte
Inserito da: petrusic - Marzo 03, 2023, 06:15:02 pm
@ xinyiman

L'Errore c'è sempre, ma c'è anche la memo. Io non la vedevo perchè dovevo allungare la dimensione della Memo.
Ho aggiunto anche una riga di pseudo-sottolineatura sotto la stringa di testata di pagina, dichiarando un'altra Memo specifica, sfruttando sempre l'evento OnGetValue.

Funziona tutto.   Grazie!