* * * *

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, 05:54:54 pm

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

349 Visitatori, 0 Utenti

Autore Topic: [RISOLTO] 3,1415 To String: quale type assegnare?  (Letto 1809 volte)

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
[RISOLTO] 3,1415 To String: quale type assegnare?
« il: Novembre 14, 2022, 05:50:11 pm »
Sono perplesso: nel banalissimo programma vorrei convertire in stringa il valore di Pigreco (3,1415). So che dovrebbe esserci una specifica variabile per pigreco, ma il punto è un altro.
Nei tre screenshot viene segnalato un errore perché si aspetta una QWord. Ma anche dichiarando PiGreco come QWord il valore non viene accettato.

Ho provato (non si sa mai...) ad assegnare altri tipi, ma non funziona.

Come mai?

Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: Integer;
Var PiGreco: Double;
  begin
    PiGreco:= 3.1415;;
    Raggio:= StrToInt(Edit1.text);
    Begin
      Label1.Caption:=('Circonferenza di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * PiGreco*2));
      Label2.Caption:=('Diametro di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * 2));
      Label3.Caption:=('Cerchio di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * Raggio * PiGreco));
    end;
end;

 
« Ultima modifica: Novembre 15, 2022, 07:43:39 am da AlexLazarus »

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:3,1415 To String: quale type assegnare?
« Risposta #1 il: Novembre 14, 2022, 06:12:46 pm »
ciao,
prova con FloatToStr

quack

  • Jr. Member
  • **
  • Post: 65
  • Karma: +7/-0
Re:3,1415 To String: quale type assegnare?
« Risposta #2 il: Novembre 14, 2022, 06:54:42 pm »
Per richiamare PiGreco puoi usare la funzione

function Pi: ValReal;

Il prodotto di un intero e un double è ancora un double, non puoi usare IntToStr, utilizza FloatToStr.

Inoltre se definisci PiGrego come intero (Integer, QWord... ), poi non puoi assegnargli un valore reale (Real, Double... ).

Ciao
SO: Fedora\W10
Lazarus: Trunk\3.0
FPC: Trunk\3.2.2

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:3,1415 To String: quale type assegnare?
« Risposta #3 il: Novembre 15, 2022, 07:42:15 am »
Grazie a entrambi!
Mi era sfuggita l'esistenza di ValReal; inoltre ero tratto in inganno dal fatto che Lazarus chiedeva con inistenza Qword.
Se mi avesse detto subito "Ehi bro, PiGreco non è intero: prova con ValReal!" tutto sarebbe stato più semplice. 😁
Nello screenshot il mio modesto contributo.

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #4 il: Novembre 15, 2022, 08:43:43 am »
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)
Qui di seguito il codice in cui ho usato una funzione cui passare un valore numerico "estratto" dalla stringa presente in un Edit.
Lo screenshot chiarisce ulteriormente il concetto.
Codice: [Seleziona]
 Procedure circonferenza(Raggio:ValReal);
Var Pi:ValReal;
Var PiGreco: Double;
 begin
    Pi:= 3.141592653589793238462643383279502884197169399;
    PiGreco:= 3.141592653589793238462643383279502884197169399;
    Begin
      Form1.Label1.Caption:=('Circonferenza di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * PiGreco*2));
      Form1.Label2.Caption:=('Diametro di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * 2));
      Form1.Label3.Caption:=('Cerchio di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * Raggio * PiGreco));
      Form1.Label6.Caption:=('Pigreco /ValReal): ' + FloatToStr(Pi));
      Form1.Label5.Caption:=('Pigreco / (Double): ' + FloatToStr(PiGreco));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
Var Trovato:Boolean;
Var Carattere:String;
  begin
     Begin
       Trovato:=False;
           For Posizione:= 1 to Length(Edit1.Text) Do
                 Begin
                   Carattere:= Copy(Edit1.Text,Posizione,1);
                   If Carattere = '.' then
                   Begin
                     ShowMessage('Attenzione! Punto invece di Virgola!');
                     Trovato := True;
                   end;
                 End;
     end;
     If Trovato = True then exit;
     Raggio:= StrToFloat(Edit1.Text);
      Circonferenza (Raggio);
end;

end.


DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #5 il: Novembre 15, 2022, 08:59:34 am »
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)

In realtà ciò dipende dalla localizzazione: in Italia funziona così. ma se vai in Francia usano la virgola così come in altri paesi.

Se usi il parametro "TFormaSetting" opzionale di FloatToSTr puoi scegliere se usare la virgola o il punto (o altri caratteri  :o ) come decimale.

Posterò un esempio.

N.B.: consiglio spassionato, cercate di usare le definizioni standard per la dichiarazione di variabili, nel passato è più volte successo che definizioni non molto usate siano state abbandonate e non più supportate. In questo caso piuttosto che "ValReal" usate "Double", a meno che ValReal non abbia qualche particolarità specifica.

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

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #6 il: Novembre 15, 2022, 09:37:34 am »
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)

In realtà ciò dipende dalla localizzazione: in Italia funziona così. ma se vai in Francia usano la virgola così come in altri paesi.

Se usi il parametro "TFormaSetting" opzionale di FloatToSTr puoi scegliere se usare la virgola o il punto (o altri caratteri  :o ) come decimale.

Posterò un esempio.

N.B.: consiglio spassionato, cercate di usare le definizioni standard per la dichiarazione di variabili, nel passato è più volte successo che definizioni non molto usate siano state abbandonate e non più supportate. In questo caso piuttosto che "ValReal" usate "Double", a meno che ValReal non abbia qualche particolarità specifica.

Aargh! Ma infatti: avevo usato Double (vedi screenshot iniziali) ma non lo accettava. Credo che però l'errore segalato si riferisse al numero 2 (considerato intero?) e non alle variabili Raggio e Pigreco. Certo è che i messaggi di errore sono (IMHO) un po' troppo criptici.
A parte tutto, credo (sempre IMHO) che usando TFormaSetting (e imponendo, ad esempio, la virgola come valore da accettare) il programma EXE può segnalare errore se fatto girare su un PC che invece richiede il punto. Appena il programma parte bisognerebbe pertanto chiedere "Vuoi usare il punto o la virgola come separatore dei decimali?". Altrimenti il programma si interromperebbe e l'utente non ne saprebbe il motivo.
Approfitto della tua tradizionale(!) cortesia(!!) per chieder un'info "al volo": (cfr. Form del primo post) come devo fare per passare il contenuto dell'Edit1 - quando premo invio - alla procedura TForm1.Button1Click? Per come è fatto ora il programma devo digitare il valore e poi premere il pulsante.
In Visual Basic (se non ricordo male) era sufficiente: Call TForm1.Button1Click (o qualcosa del genere).

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #7 il: Novembre 15, 2022, 01:54:11 pm »
Primo, TFormatSettings: alla partenza del software DEVI caricarti il "formato" locale. In questo modo non avrai problemi. E' semplicemente automatico.
Devi comunque farlo, perchè comunque l'interpretazione del numero viene effettuato internamente usando il "formato" locale se non specificato altrimenti.

Alternativa è forzare la conversione sempre con il punto (ad esempio)  e sostituire il dato immesso dall'utente formato da eventuale virgola con il punto.

Attenzione che c'è anche l'opposto: visualizzare il numero in stringa (ad esempio in una TEdit) c'è comunque il problema del carattere (magari lo visualizzi con la virgola ma l'imissione dovrebbe essere con il punto).

Tutto questo giusto per creare un pò di confusione, ove non ce ne fosse.

Per "trasferire" il dato quanto premi l'invio devi usare l'evento "onkeyup" del controllo TEdit, tracciare il virtual key "Invio" e fare qualcosa ....
In generale, se vuoi fare una cosa "bella" quando l'utente conferma con l'invio il dato potresti cambiare il colore di sfondo della TEdit (o cambiare il colore del Font del carattere) per evidenziare che il dato è stato "accettato".

Abbi pazienza e ti posto un esempio sia per il TFormatSetting sia per l'evento.

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

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #8 il: Novembre 15, 2022, 03:29:44 pm »
Ecco in allegato la demo. Scarica il progetto per capire il tutto. E' più facile a vedersi che a dirsi ....  ;D

Posto piccola parte del codice ...

Codice: [Seleziona]
  var Locale: TFormatSettings;
  //Carica il formato locale
  GetLocaleFormatSettings(SysLocale.DefaultLCID, Locale);

procedure TForm1.ED_EventoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var tempObj: TEdit;
    valuestr: string;
    ValueFloat: double;
begin
  if key = VK_RETURN then
    begin
      if Sender is TEdit then
        begin
            .......

Ciao
« Ultima modifica: Novembre 15, 2022, 03:38:47 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

quack

  • Jr. Member
  • **
  • Post: 65
  • Karma: +7/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #9 il: Novembre 15, 2022, 10:56:00 pm »
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)
Qui di seguito il codice in cui ho usato una funzione cui passare un valore numerico "estratto" dalla stringa presente in un Edit.
Lo screenshot chiarisce ulteriormente il concetto.
Codice: [Seleziona]
 Procedure circonferenza(Raggio:ValReal);
Var Pi:ValReal;
Var PiGreco: Double;
 begin
    Pi:= 3.141592653589793238462643383279502884197169399;
    PiGreco:= 3.141592653589793238462643383279502884197169399;
    Begin
      Form1.Label1.Caption:=('Circonferenza di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * PiGreco*2));
      Form1.Label2.Caption:=('Diametro di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * 2));
      Form1.Label3.Caption:=('Cerchio di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * Raggio * PiGreco));
      Form1.Label6.Caption:=('Pigreco /ValReal): ' + FloatToStr(Pi));
      Form1.Label5.Caption:=('Pigreco / (Double): ' + FloatToStr(PiGreco));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
Var Trovato:Boolean;
Var Carattere:String;
  begin
     Begin
       Trovato:=False;
           For Posizione:= 1 to Length(Edit1.Text) Do
                 Begin
                   Carattere:= Copy(Edit1.Text,Posizione,1);
                   If Carattere = '.' then
                   Begin
                     ShowMessage('Attenzione! Punto invece di Virgola!');
                     Trovato := True;
                   end;
                 End;
     end;
     If Trovato = True then exit;
     Raggio:= StrToFloat(Edit1.Text);
      Circonferenza (Raggio);
end;

end.


Al posto del TEdit potresti usare il componente TSpinEdit per gli interi o TFloatSpinEdit per i numeri decimali, ed accedere al valore digitato dall'utente tramite la proprietà Value. Eviti la seccatura di dover controllare la correttezza di quanto digitato. Stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value, evitando le conversioni da testo a numero e viceversa.

Per cambiare la classe di un componente già posizionato sulla form, in questo caso il TEdit, puoi utilizzare il comando "Cambia classe..." presente nel menu a tendina che compare cliccando con il tasto destro del mouse sul componente da modificare. Dopo aver scelto la classe di destinazione ti verrà chiesto di eliminare le proprietà non valide presenti nel file LMF, clicca su elimina ed il gioco è fatto. Il comando "Cambio di classe" è utile quando hai un componente già posizionato ed ancorato sulla form e vuoi cambiarlo.

Ciao


SO: Fedora\W10
Lazarus: Trunk\3.0
FPC: Trunk\3.2.2

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #10 il: Novembre 16, 2022, 08:25:49 am »
Ecco in allegato la demo. Scarica il progetto per capire il tutto. E' più facile a vedersi che a dirsi ....  ;D

Posto piccola parte del codice ...

Codice: [Seleziona]
... [eccetera] ...

...uhmm... ho scaricato e ho cercato(!) di capire, ma credo che non mi sia spiegato bene.

1) Anzitutto (IMHO) VK_Return dovrebbe essere una costante "riservata", ma a giudicare dal messaggio di errore non lo è (certo, il listato non è completo, ma...)
2) Il programma che mi hai mandato cambia colore all'Edit e agisce quindi solo all'interno dell'Edit stesso.
3) Il mio obiettivo (cfr. screenshot) è invece attivare automaticamente la sezione ButtonClick del programma quando si preme il pulsante invio nell'Edit, cioè come se si premesse Invio contemporaneamente nell'Edit e nel Button.

Sei comunque gentilissimo nel dedicare tanto tempo a un newbie! Conserverò gelosamente il programma ZIP per futuri sviluppi.
« Ultima modifica: Novembre 16, 2022, 08:49:33 am da AlexLazarus »

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #11 il: Novembre 16, 2022, 08:49:04 am »
Al posto del TEdit potresti usare il componente TSpinEdit per gli interi o TFloatSpinEdit per i numeri decimali, ed accedere al valore digitato dall'utente tramite la proprietà Value. Eviti la seccatura di dover controllare la correttezza di quanto digitato. Stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value, evitando le conversioni da testo a numero e viceversa.

Per cambiare la classe di un componente già posizionato sulla form, in questo caso il TEdit, puoi utilizzare il comando "Cambia classe..." presente nel menu a tendina che compare cliccando con il tasto destro del mouse sul componente da modificare. Dopo aver scelto la classe di destinazione ti verrà chiesto di eliminare le proprietà non valide presenti nel file LMF, clicca su elimina ed il gioco è fatto. Il comando "Cambio di classe" è utile quando hai un componente già posizionato ed ancorato sulla form e vuoi cambiarlo.


...comunque sto andando in confusione (screenshot). Tra l'altro... "...stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value...": Dove trovo la proprietà Value?

quack

  • Jr. Member
  • **
  • Post: 65
  • Karma: +7/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #12 il: Novembre 16, 2022, 09:22:57 am »
Screenshot, prosegui cliccando su elimina tutte le proprietà non valide.

Quando ti serve il valore inserito dall'utente  invece di usale la proprietà Text

Edit1.Text

usa

Edit1.Value

SO: Fedora\W10
Lazarus: Trunk\3.0
FPC: Trunk\3.2.2

SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #13 il: Novembre 16, 2022, 03:59:32 pm »
Per gestire il separatore decimale prova a vedere DefaultFormatSettings.DecimalSeparator
Potresti semplicemente sostituire il punto e la virgola con il DecimalSeparator e poi procedere con la conversione, che così non dovrebbe dare problemi qualunque sia la convenzione usata.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:[RISOLTO] 3,1415 To String: quale type assegnare?
« Risposta #14 il: Novembre 16, 2022, 05:35:53 pm »
Approfitto della tua tradizionale(!) cortesia(!!) per chieder un'info "al volo": (cfr. Form del primo post) come devo fare per passare il contenuto dell'Edit1 - quando premo invio - ..............

...uhmm... ho scaricato e ho cercato(!) di capire, ma credo che non mi sia spiegato bene.

1) Anzitutto (IMHO) VK_Return dovrebbe essere una costante "riservata", ma a giudicare dal messaggio di errore non lo è (certo, il listato non è completo, ma...)
2) Il programma che mi hai mandato cambia colore all'Edit e agisce quindi solo all'interno dell'Edit stesso.
3) Il mio obiettivo (cfr. screenshot) è invece attivare automaticamente la sezione ButtonClick del programma quando si preme il pulsante invio nell'Edit, cioè come se si premesse Invio contemporaneamente nell'Edit e nel Button.

Sei comunque gentilissimo nel dedicare tanto tempo a un newbie! Conserverò gelosamente il programma ZIP per futuri sviluppi.

1) Non hai copiato bene ..... se vedi nel codice postato nelle USES c'è "LCLTYPE" .... c'è un motivo se c'è quell'unità.
2) Come descritto nel programma quel cambio colore serve solo a segnalare all'utente che il dato è stato acquisito. Commenta il codice se non ti piace.
3) Vedi in testa all'inizio del post, avevi richiesto come gestire il tasto INVIO nella TEDIT per passare i dati, quello è il codice. Dentro il codice, se vuoi anche fare premere il pulsante Button1 in automatico segui quanto scritto qui (ti posto solo un pezzo, il resto completalo tu, in pratica devi aggiungere Button1.Click anche sul secondo "CASE"):

Codice: [Seleziona]
          //Distinguiamo il controllo tramite la proprietà TAG del controllo stesso
          Case tempObj.tag of
            1: // Perimetro
              begin
                //!!!!! PREMI ESC PER USCIRE DALLA SHOWMESSAGE .... NON E' CORRETTO FARE UNA SHOWMESSAGE QUI, E' SOLO PER ESEMPIO
                ShowMessage('Il valore immesso del perimetro è: '+ FloatToStr(ValueFloat, Locale));
                //Qui puoi fare quello che vuoi con il valore ValueFloat che corrisponde al PERIMETRO
                //Ad esempio assegnarlo ad una variabile globale.
                ......................
                ......................
                //Qui chiami l'evento "click" come se avvessi premuto il BUTTON1, ovviamente devi avere gestito l'evento OnCLick di Button1.
                Button1.Click;
                //Cambiamo il colore di fondo per segnalare all'utente che abbiamo ricevuto l'INPUT
                tempObj.Color := clAqua;
              end;

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

 

Recenti

How To

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

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.