* * * *

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.
Novembre 24, 2024, 01:21:15 am

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

71 Visitatori, 0 Utenti

Autore Topic: [RISOLTO]Lazreport problemi con testo dbmemo lungo  (Letto 3794 volte)

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
[RISOLTO]Lazreport problemi con testo dbmemo lungo
« il: Aprile 24, 2021, 09:57:34 pm »

Buonasera, nuovo problema con Lazreport.Se il testo di un campo DBmemo è più lungo dello spazio che rimane nella pagina Lazreport salta pagina, al posto di completare la pagina con parte del testo e scrivere la restante parte su una nuova pagina, lasciando a volte meta pagina vuota. Non oso pensare cosa succederebbe se il testo fosse più lungo di una intera pagina...
Qualcuno ha affrontato questo problema?

Allego immagine esplicativa
« Ultima modifica: Giugno 15, 2021, 12:11:25 am da antoniog »
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #1 il: Aprile 24, 2021, 10:29:13 pm »
Ciao, infatti per questo ti avevo detto, nel tuo precedente topic: Io in una stampa di questo tipo userei un memo di una sola riga, ripetuto tante volte. In questo modo decido io cosa mettere in ogni riga e che lunghezza deve avere il testo contenuto.
Prima mi riverso ogni riga dei dbmemo o dei memo in un record di un tmemdataset e poi faccio un report che "pesca" i record dal tmemdataset.
Poi può darsi che esista un modo per posizionare un memo a cavallo di due pagine.

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #2 il: Aprile 25, 2021, 12:03:23 am »
Tito Livio, la cosa sembra interessante, hai qualche linea di codice per renderla fattibile?
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #3 il: Aprile 25, 2021, 12:49:59 am »
Ciao, io procedo così:

-prendo un componente tmemorydataset (mreferto_rx) e tramite la proprietà fielddefs creo dei campi.
Nel mio esempio ho un campo solo ma nel tuo caso vedo che hai nel report 5 colonne quindi penso che dovresti avere 5 campi.

-poi al momento di stampare:

    mreferto_rx.Clear(False);
    ...
    sqlquery1.first;
    while not sqlquery1.eof do
    begin
      for i := 0 to form1.dbmemo1.Lines.Count - 1 do
          mreferto_rx.AppendRecord([form1.dbmemo1.Lines [ i ] ] );
      ...
      mreferto_rx.AppendRecord([... altre voci ..]);
      sqlquery1.next
    end;
    mreferto_rx.AppendRecord([... conclusione ...]);

-poi creo un report come in allegato

Spero possa esserti utile
« Ultima modifica: Aprile 25, 2021, 12:57:01 am da tito_livio »

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #4 il: Aprile 25, 2021, 02:27:14 am »
Tito Livio, cioè tu fai tanti record quante sono le linee del campo memo? la proposta è buona ma nel mio caso non credo che funzioni perchè ho molti campi che sono raggruppati e non credo di potere far funzionare all'interno di un ciclo un'altro ciclo.
Gli articoli sono raggruppati da un codice, tutte le linee del memo (composto da due campi, uno : codice e uno :memo) dovrebbero avere il codice del gruppo, potrebbe funzionare ma mi creerà un'infinità di record per ogni articolo. Al momento penso di provare con gli script cercando di fare leggere a Lazreport il campo memo una riga per volta
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #5 il: Aprile 25, 2021, 12:30:52 pm »
Probabilmente nel tuo caso questa mia soluzione si adatta poco, comunque in stampe più complicate, usando più campi e gli script nel report, riesco a gestire  il raggruppamento (che poi faccio fare al Lazreport), il salto pagina, il font della riga e l'inserimento immagini.
Invece volevo chiederti, come mai hai lasciato il Fortes Report?
« Ultima modifica: Aprile 25, 2021, 12:35:12 pm da tito_livio »

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #6 il: Aprile 25, 2021, 03:13:24 pm »
dall'esempio che hai postato, l'elaborazione viene fatta su un sull'ultimo o campo, di un solo record, sbaglio?
io ho molti record che si ripetono, i cicli utilizzano diverse FRvariabili e 3 ZTable collegate. Comunque grazie, proverò a elaborare il concetto.
Non ho lasciato Fortesreport, prima di Lazarus utilizzavo Delphi 4 e 7 con quickReport che è molto simile a Fortes, utilizzo la versione CE ed è molto valida, molto flessibile e programmabile ma quando si apportano modifiche si deve ricompilare il programma e non si  può modificare il report a runtime mentre con Lazreport fare e modificare anche a runtime è possibile. Lazreport  non è meno flessibile di Fortes, negli script si possono richiamare procedure e funzioni esterne che restituiscono valori per la stampa, l'utilizzo di variabili esterne è funzionale, mi trovo molto bene per la gestione grafica, ho risolto uno alla volta le difficoltà ed ora sono all'ultima che è veramente complessa, si dovrebbe calcolare la lunghezza del campo dbmemo, verificare quante righe mancano a fine pagina e se la pagina non è capiente dividere il testo in due parti, uno scherzo ;D . La tua soluzione può essere invece utilizzabile nella stesura di relazioni anche molto lunghe.
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #7 il: Aprile 26, 2021, 12:49:49 am »
questa istruzione:
for i := 0 to form1.dbmemo1.Lines.Count - 1 do
da errore:
Error: identifier idents no member "Lines"
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #8 il: Aprile 26, 2021, 12:18:56 pm »
Potrebbe essere:
-Penso che tu non abbia fatto la uses della unit DBcontrols.
A me funziona anche col dbmemo vuoto e con il file chiuso.
-Mi sembra di capire che tu usi Zeoslib, io non lo conosco, uso i componenti standard.
Il comportamento diverso del componenete dbmemo potrebbe essere dovuto a questo.
Con l'occasione mi sono accorto che il codice di esempio che ti ho dato è incompleto. Cioè la tabella tmemdataset prima di essere azzerata con clear, deve essere chiusa ti riporto il mio codice così corretto:
Codice: [Seleziona]
  if memdataset1.Active then
    memdataset1.close;
  memdataset1.Clear(False);
  memdataset1.Open;
  for i := 0 to dbmemo3.Lines.Count - 1 do
   memdataset1.AppendRecord([dbmemo3.Lines[i]] );
« Ultima modifica: Aprile 26, 2021, 12:46:29 pm da tito_livio »

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #9 il: Aprile 26, 2021, 09:12:41 pm »
Ave Tito Livio, il tuo codice funziona, l'idea di dividere il testo nel DBMemo in tanti record quante sono le linee è stata una bella intuizione.
Ma io non ho risolto il problema, Lazreport salta comunque pagina quando vuole lui
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #10 il: Aprile 26, 2021, 11:15:12 pm »
Dovresti dirmi in che senso "salta pagina quando vuole lui".
Può darsi che ci vuole una banda di tipo pedice di pagina per lasciare un certo margine.
Io,quando non riesco a risolvere in altro modo, uso un campo del tmemdataset chiamato "pagina". Poi faccio raggruppare al Lazreport per "pagina" e spunto "force new page"
nell'intestazione di gruppo.
In questo modo posso decidere quali record stampare nella stessa pagina, assegnandogli a tutti lo stesso numero pagina.
Ovviamente so quante righe possono entrare nella stessa pagina.
Se c'è gia un altro gruppo all'interno della pagina non è un problema perchè funzionano i gruppi annidati. Fino a 2 livelli l'ho provato.
« Ultima modifica: Aprile 26, 2021, 11:23:20 pm da tito_livio »

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #11 il: Aprile 27, 2021, 01:52:36 am »
Tito Livio, il salto pagina avviene quando il testo non entra completamente in quel che resta della pagina.
Ho tre tabelle collegate, la tabella "misure" ha mastersource "totarticoli", la tabella "Totarticoli" ha mastersource la tabella "Lotti",
quindi iniziando il ciclo da "Lotti" tutto il resto viene elaborato correttamente e la stampa è accettabile.
Ho provato ad usare le tue linee di codice ed in Lazreport e ho inserito:
1. una Master Data collegata a Totarticoli dove stampo il codice articolo
2. Una Master Data collegata collegata al MemDataset
3. una Detail Data stampa i record della descrizione ricavati da Totarti
L'aggiunta di record in MemDataset.Descrizione avviene durante l'elaborazione del Report attraverso un campo DBMemo invisibile collegato a Totarti e con il seguente codice nell' OnDataChange del DataSource di Totarti:
Codice: [Seleziona]

procedure TGescompF.DTotartiDataChange(Sender: TObject; Field: TField);
var
       i:integer;
begin
  if Dataprogetto.MemTotarti.Active then
      Dataprogetto.MemTotarti.close;
    Dataprogetto.MemTotarti.Clear(False);
    Dataprogetto.MemTotarti.Open;
    Dataprogetto.MemTotarti.AppendRecord([Dataprogetto.TotartiCodice.Text] );
    for i := 0 to GescompF.dbmemo28.Lines.Count - 1 do
     Dataprogetto.MemTotarti.AppendRecord([GescompF.dbmemo28.Lines[i]] );
end; 
Mettendo un controllo sulle righe del MemDataset ho verificato che la lunghezza del testo contenuto in un record può essere anche di molte righe sul Report,naturalmente in base al width del Rettangolo che lo contiene, quindi per esempio stampa il codice e salta pagina lasciando molte righe in bianco. Dovrei provare a ricavare in MemDataset record con numero di caratteri corrispondenti alla larghezza di una riga prevista nel report che in questo caso è 320.
Grazie per l'aiuto.
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

antoniog

  • Scrittore
  • Sr. Member
  • *****
  • Post: 257
  • Karma: +0/-0
    • Informatica Utile
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #12 il: Aprile 27, 2021, 05:18:29 pm »
Stabilire il numero di caratteri per record è una stupidaggine perchè taglia e va a capo.
Niente da fare! anche il codice seguente, da inserire in "OnEnterRect" del frReport,  funziona per stampe di un solo record:
Codice: [Seleziona]

if (View is TfrMemoView) then
      if (View as TfrMemoView).Name = 'Memo27' then
        (View as TfrMemoView).Memo.Text := Form1.DBMemo28.Lines.Text;   
Forse dovrò tornare a Fortes Report...
avrai solo la libertà che riuscirai a conquistarti e anche questa sarà incerta.

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #13 il: Aprile 27, 2021, 09:04:01 pm »
Ciao,
mi potresti fare vedere, con una immagine, la banda masterdata che colleghi al tmemdataset?

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Lazreport problemi con testo dbmemo lungo
« Risposta #14 il: Aprile 27, 2021, 09:32:26 pm »
Scusami ma è difficile capire a distanza il problema, da quello che ho capito mi viene di dirti che:
La riga del report, la lunghezza del record di MemTotArti e la larghezza di Dbmemo28 devono essere "compatibili".
Cioè vedi quanti caratteri possono e vuoi far entrare in una sola riga (senza andare a capo) del Report, poi la diminuisci un pochino ed hai la lunghezza del record e poi la larghezza di Dbmemo 28 deve essere tale che ogni sua riga starà sempre sotto la lunghezza del record.
In questo modo sei sicuro che ad una riga di dbmemo28 corrisponderà sempre una sola riga del report.
Si devono fare dei tentativi perchè il carattere è quasi sempre proporzionale.
Se vuoi, puoi farmi avere il .lrf.

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19180
  • Topic in totale: 2288
  • Online Today: 97
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 71
Total: 71

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.