* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 18, 2024, 04:28:57 am

Inserisci il nome utente, la password e la durata della sessione.

184 Visitatori, 0 Utenti

Autore Topic: lazreport - primi passi  (Letto 5628 volte)

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
lazreport - primi passi
« il: Marzo 19, 2022, 04:33:11 pm »
Dopo l'installazione delle funzioni di report, ho mosso il primo passo verso questo nuovo capitolo installando l'esempio riportato qui
Ho estratto il contenuto del file .zip ed ho aperto il progetto ed i file .pas relativi.
Per vedere la Form dell'esempio coi suoi controlli ho premuto il tasto F12, ma mi sono beccato solamente il seguente messaggio d'errore:
Citazione
Impossibile trovare la classe componente "TDatasource".
Non è registrato tramite RegisterClass e nessun lfm trovato.
È richiesto dalla unit:
/media/dirdati/dativari/lazarus_progetti/SimpleAlbum/unit1.pas
Io volevo solo capire come costruire il mio primo oggetto di tipo Report.

Non capisco perchè F12 non funziona.
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:lazreport - primi passi
« Risposta #1 il: Marzo 20, 2022, 12:26:12 pm »
Il progetto è un pò datato: ha 11 anni, potrebbe essere che i componenti usati non siano più compatibili con quelli attuali, o forse (più plausibile) che il file del progetto non sia compatibile.

Se non trova il TDatasource è probabile che non carichi l'unità DB.

Provo a dare una occhiata ...
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:lazreport - primi passi
« Risposta #2 il: Marzo 20, 2022, 01:52:23 pm »
Progetto aggiornato.

Esegui il build, poi a linea di comando:

project1 dati.txt Config.ini

EDIT: il progetto è a 64 bit, con la dll di SQL (SQLite3.dll) a 64 bit. Se lavori a 32 bit devi sostituire la dll SQLite3.dll con la versione a 32 bit.
Qui trovi le "precompiled binaries" cioè le dll corrispondenti per i vari SO:

 https://www.sqlite.org/download.html

Ciao
« Ultima modifica: Marzo 20, 2022, 06:28:45 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #3 il: Marzo 21, 2022, 04:04:33 pm »
Progetto aggiornato.

Esegui il build, poi a linea di comando:

project1 dati.txt Config.ini

Il comando dovrebbe servire per creare l'archivio dati?

Se è così, non ti preoccupare. Io ho solo bisogno di capire la tecnica costruttiva del report e quindi di:
-  imparare a preparare l'insieme di dati da fornire a TfrReport (io sono abituato a costruire una stringGrid visuale, corrispondente alla pagina PDF finale)
-  imparare quali parametri passare per il formato della pagima Pdf, il Font con le sue caratteristiche di modello,e altezza e stile
-  non so se posso anche predisporre i colori delle varie porzioni di testo col corrispondente sfondo.
-  come potrei disegnare una griglia sulla pagina PDF, impostando anche il colore della linea, insieme all'altezza e la larghezza di ciascuna riga e alla larghezza di ciascuna colonna.

Ho guardato le proprietà dell'oggetto TfrReport, ma non ho trovato o non saputo trovare niente di tutto questo.

Esiste una guida che illustri dettagliatamente come e dove impostare i parametri occorrenti per produrre una pagina Pdf?
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:lazreport - primi passi
« Risposta #4 il: Marzo 21, 2022, 04:28:20 pm »
Mi dispiace, ma di report di Lazarus ne sò meno che niente.

Confidiamo in un aiuto o un consiglio dai membri del forum.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:lazreport - primi passi
« Risposta #5 il: Marzo 21, 2022, 04:48:06 pm »
Se il tuo oggetto TfrReport si chiama MyReport puoi generare il pdf come segue. Nella form devi trascinare un oggetto TfrTNPDFExport (che chiami frTNPDFExport1) e anche  un oggetto TSaveDialog (che chiami SaveDialog1)

poi con un codice simile dovresti riuscirci

Codice: [Seleziona]
               MyReport.LoadFromFile(qui metti il path del file lrf);
               if MyReport.PrepareReport then
               begin
                    SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
                    SaveDialog1.FileName:='Album_' + 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;
Ieri è passato, domani è futuro, oggi è un dono...

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #6 il: Marzo 21, 2022, 04:57:32 pm »
Se il tuo oggetto TfrReport si chiama MyReport puoi generare il pdf come segue. Nella form devi trascinare un oggetto TfrTNPDFExport (che chiami frTNPDFExport1) e anche  un oggetto TSaveDialog (che chiami SaveDialog1)
Fin qui avevo capito, comunque grazie.
Citazione da: xinyiman
poi con un codice simile dovresti riuscirci
Codice: [Seleziona]
               MyReport.LoadFromFile(qui metti il path del file lrf);
               if MyReport.PrepareReport then
               begin
. . .
Ci studio un pò sopra e ti faccio sapere.
Grazie ancora
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #7 il: Marzo 22, 2022, 03:13:42 pm »
Una delle funzioni del mio programma corrente è quella di compilare una StringGrid di cui si può estrarre una successiva StringGrid, ridotta alle sole colonne da riportare in stampa, e solo dopo averla mostrata  a video.
Quindi:
1) mostro a video la StringGrid riportata nell'allegato;
2) Dietro pressione di pulsante "Stampa" , mostro una StringGrid ESTRATTA dalla precedente  (con un numero minore di colonne);
3) Dietro pressione di nuovo pulsante "Avvia Stampa", dovrebbe formare un report con tutte le celle rappresentate nella 2a StringGrid.

Spero di essere stato chiaro, nell'illustrazione della sequenza degli oggetti da trattare.

Dato che lo scopo finale è quello di stampare una griglia non so se l'oggetto TFReport mi permette  di stampare una griglia, pensavo di compilare la StringGrid ESTRATTA dentro un TFrPrintGrid, però mi sono accorto che quest'ultimo è una DBGrid, quindi penso che rilevi automaticamente i dati da un DB.
Se è come ho capito, non fa al caso mio.

Allora non mi resta che creare una StringGrid ESTRATTA di tipo TStringGrid. Ma poi come trasferisco la StringGrid ESTRATTA con tutto il suo contenuto nell'oggetto TFReport?
ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #8 il: Marzo 22, 2022, 05:35:13 pm »
Ciao, Lazreport stampa soprattutto quello che c'è dentro una tabella quindi a grandi linee il procedimento è questo:
Per stampare  una TStringGrid puoi riversare il suo contenuto in una tabella d'appoggio, io uso un tMemDataset, suppomiamo: Mgriglia.
All'interno di Mgriglia ovviamente dovranno esserci tutti i campi relativi alle colonne della griglia che ti interessa stampare.
Poi nel report crei una banda collegata a Mgriglia con all'interno tanti memo, ognuno che fa riferimento ad un campo di Mgriglia. Tramite le proprietà di questi memo poi potrai definire i bordi dei memo stessi per creare proprio la struttura di una griglia.
In questo momento non posso ma più tardi metto un esempio.
P.S. Non l'ho mai usato ma credo che con TFrPrintGrid ci siano problemi nel caso la griglia occupi più di una pagina.
« Ultima modifica: Marzo 22, 2022, 05:40:13 pm da tito_livio »

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #9 il: Marzo 22, 2022, 10:24:12 pm »
Ciao, Lazreport stampa soprattutto quello che c'è dentro una tabella quindi a grandi linee il procedimento è questo:
Per stampare  una TStringGrid puoi riversare il suo contenuto in una tabella d'appoggio, io uso un tMemDataset, suppomiamo: Mgriglia.
All'interno di Mgriglia ovviamente dovranno esserci tutti i campi relativi alle colonne della griglia che ti interessa stampare.
Poi nel report crei una banda collegata a Mgriglia con all'interno tanti memo, ognuno che fa riferimento ad un campo di Mgriglia. Tramite le proprietà di questi memo poi potrai definire i bordi dei memo stessi per creare proprio la struttura di una griglia.
Concettualmente ho capito ed il risultato finale è quello che cerco.
Citazione da: tito_livio
In questo momento non posso ma più tardi metto un esempio.
Mi faresti vertamente un grande regalo. Grazie
Citazione da: tito_livio
Non l'ho mai usato ma credo che con TFrPrintGrid ci siano problemi nel caso la griglia occupi più di una pagina.
Questa non me l'aspettavo.
ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #10 il: Marzo 22, 2022, 11:21:33 pm »
Ciao,
in allegato il progetto di esempio per stampare un StringGrid con Lazreport.

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #11 il: Marzo 23, 2022, 10:03:12 am »
@ tito_livio
Grazie per l'aiuto.
L'ho provato: bene! bene!

Ora dovrò studiarci sopra per capire meglio i vari meccanismi.
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #12 il: Marzo 23, 2022, 11:20:42 am »
Nell'esempio ricevuto leggo:
Codice: [Seleziona]
Mgriglia.Append;     --> prepara l'oggetto TMemDataSet a ricevere l'accodamento di dati?
Mgriglia.Edit;           --> serve a preparare la formattazione dei valori float o  per rendere visibile il TMemDataSet?
Mgriglia.FieldByName('dare').Value := strtofloat(stringgrid1.Cells[2, i]);    --> perché é necessaria la conversione in float ?
Poi ho visto che nelle proprietà del TMemDataSet mancano i parametrisul dimensionamento delle celle e non solo.
Forse l'impostazione di detti parametri è presa in automatico attraverso le istruzioni di caricamento dei dati dalla StringGrid alla MemDataSet?

Scusa se ti chiedo qualche chiarimento, ma mi serve solo per capire. Infatti, non ho trovato documentazione in merito.
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 588
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #13 il: Marzo 23, 2022, 12:00:48 pm »
Ho trovato la guida che cercavo qui.
ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #14 il: Marzo 23, 2022, 01:31:31 pm »
Ciao,
le operazioni su Tmemdataset sono le stesse che si possono fare su qualsiasi tabella contenente dati, come se tu lavorassi su di una tabella di un database Sqlite o Firebird per esempio.
Quindi:
Mgriglia.append crea un nuovo record;
Mgriglia.edit pone Mgriglia in modalità scrittura;
Mgriglia.FieldByName('dare').Value := strtofloat(stringgrid1.Cells[2, i]); poteva anche scriversi:
Mgriglia.FieldByName('dare').Text := stringgrid1.Cells[2, i];  non è necessaria la conversione.
Per la larghezza e altre caratteristiche della cella che vuoi stampare devi aprire il file relativo alla stampa, in questo caso stampa1.lrf, e gestire le varie proprietà dei memo.

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18769
  • Topic in totale: 2232
  • Online Today: 219
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 184
Total: 184

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.