* * * *

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.
Maggio 01, 2025, 05:36:08 am

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

179 Visitatori, 0 Utenti
Pagine: 1 ... 9 10 [11] 12 13 ... 29
Attenzione

L'articolo è da considerarsi obsoleto in quanto fa uso di una libreria che oramai è stata pienamente superata dal codice presente nella unit fpjson distribuita insieme al compilatore pascal.
Una documentazione molto esauriente (tratta sia XML che JSON) è stata fornita dall'autore stesso della unit ed è visionabile tramite il seguente link:
http://www.freepascal.org/~michael/articles/webdata/webdata.pdf

Segue l'articolo originale.


Articolo originale

Si sente spesso parlare di file JSON e se ne sente spesso parlare
relativamente allo sviluppo su web in quanto basato sul linguaggio
JavaScript (Standard ECMA-262 3ª edizione dicembre 1999).
In realtà la sua vera natura - quella di essere un formato per
l'interscambio di dati tra applicazioni - lo ha portato ad essere
usato nei contesti più disparati nell'ambito della programmazione e,
come si può desumere da "http://www.json.org/", oramai esistono
librerie per moltissimi linguaggi di programmazione, incluso il FreePascal.

Ha diverse mancanze rispetto all'XML. Ad esempio non ha il concetto di
attributo e non è utilizzabile né con file XLST, né con file DTD.
Ha però dalla sua la semplicità della rappresentazione delle
strutture dati (e quindi facilità nel parsing) e la semplicità di
essere letto e manipolato dagli esseri umani.

Giusto per avere un primo e semplice approccio, segue un esempio in
questo formato:

Codice: [Seleziona]

{
  "nome"     : "Paolo Rossi",
  "eta"      : 33,
  "email": ["prossi@ppp.it","paolorossi@xpop3.it"],
  "indirizzi": [
    {
      "indirizzo": "Via Dei Mille, 34",
      "citta"    : "Milano",
      "provincia": "MI"
    },
    {
      "indirizzo": "Via T. Tasso, 1",
      "citta"    : "Messina",
      "provincia": "ME"
    }
  ]
}


La semplicità salta subito all'occhio. Si tratta fondamentalmente di
combinazioni nome/valore dove il valore, quando di tipo stringa, è
delimitato dal doppio apice.
Un accenno particolare va ai campi "email" ed "indirizzi" che in
realtà sono rappresentazioni di array. Un array è delimitato dalle
parentesi quadre e quando composto da una semplice lista di valori
("email") basta indicare gli elementi separati da una virgola. Quando
invece l'array è composto da tipi strutturati ("indirizzi"), gli
elementi vanno specificati tra parentesi graffe.


Ora però, come esempio pratico, vorrei proporre l'uso di questo
formato per la memorizzazione delle impostazioni necessarie ad una
ipotetica applicazione dedicata all'aggiornamento dei database.

Segue il contenuto del file "": database.def.
Codice: [Seleziona]

{
  /*
    questo è un commento                              
  */

  /* impostazioni globali */
  "name"    : "Employee",
  "release" : "0.1",

  /* informazioni sui database da aggiornare */
  "targets": [
    {
      "type"    : "Firebird 2.0",
      "host"    : "192.168.0.1",
      "database": "/db/fb2.0/myprojects/EMPLOYEE.FDB",
      "user"    : "SYSDBA",
      "password": "masterkey",
      "settings": [
         {
           "type"     : "database",
           "page"     : "8192",
           "dialect"  : 3,
           "collation": "ISO8859_1"
         }
      ]
    },
    {
      "type"    : "Firebird 1.5",
      "host"    : "192.168.0.2",
      "database": "/db/fb1.5/myprojects/EMPLOYEE.FDB",
      "user"    : "SYSDBA",
      "password": "masterkey",
      "settings": [
         {
           "type"     : "database",
           "page"     : "8192",
           "dialect"  : 3,
           "collation": "ISO8859_1"
         }
      ]
    }
   
  ],

}


La libreria che andremo a provare l'ho stata scaricata dal sito
http://code.google.com/p/superobject/downloads/list
e per chi volesse saperne di più: http://www.progdigy.com/
Si tratta di sorgenti con doppia licenza: MPL o LGPL. Una volta
decompresso il file superobjectv1.2.4.zip, avremo a disposizione 2 file
sorgenti chiamati superobject.pas e superxmlparser.pas che si occupano
rispettivamente del parsing dei file JSON ed XML. A corredo anche una
serie di demo e di progetti test da studiare. Tra le demo, ci sono
interessanti applicazioni con google search, RTTI e VirtualTreeView.

Tornando al nostro ipotetico tool per l'aggiornamento di database,
andiamo a creare, con Lazarus, una nuova applicazione. Tramite
l'analizzatore progetti possiamo aggiungere la unit superobject.pas al
nostro progetto (il tutto risiede in un unico file .PAS e non
ci sono pacchetti da installare).
Sulla form principale aggiungiamo:
- un TEdit chiamato edDefPath ed impostiamo la proprietà Text con la
fullpath del file database.def
- un TButton
- un TMemo chiamato Memo1

Torniamo al sorgente della form principale e, sotto implementation,
mettiamo in "uses" superobject. Fatto questo, nella sezione public,
dichiariamo:
    procedure ScanDef(FilePath: string; log: TStrings);

segue il relativo codice:
Codice: [Seleziona]

procedure TForm1.ScanDef(FilePath: string; log: TStrings);
var
  obj, item: ISuperObject;
  tottargets, scanitem: integer;
  tottsettings, scansettings: integer;
begin

   try

     log.Add('reading structure...');
     log.Add('   path: ' + FilePath);
     obj := TSuperObject.ParseFile(FilePath, TRUE);
     log.Add('   read success');

     log.Add('   type       : ' + obj['type'].AsString );
     log.Add('   name       : ' + obj['name'].AsString );
     log.Add('   release    : ' + obj['release'].AsString );

     // targets
     tottargets := obj['targets'].AsArray.Length;
     log.Add('   nr. targets: ' + IntToStr(tottargets) );
     for scanitem:=0 to tottargets - 1 do begin
        item := obj['targets'].AsArray.O[scanitem];
        log.Add( '   * target: ' + inttostr(scanitem + 1) );
        log.Add( '      type        : ' + item['type'].AsString );
        log.Add( '      host        : ' + item['host'].AsString );
        log.Add( '      path        : ' + item['path'].AsString );
        log.Add( '      user        : ' + item['user'].AsString );
        log.Add( '      password    : ' + item['password'].AsString );

        tottsettings := item['settings'].AsArray.Length;
        log.Add('      nr. settings: ' + IntToStr(tottsettings) );
        for scansettings:=0 to tottsettings - 1 do begin
           item := item['settings'].AsArray.O[scansettings];
           log.Add( '      * settings: ' + inttostr(scansettings + 1) );
           log.Add( '         type     : ' + item['type'].AsString );
           log.Add( '         page     : ' + item['page'].AsString );
           log.Add( '         dialect  : ' + item['dialect'].AsString );
           log.Add( '         collation: ' + item['collation'].AsString );
        end;

     end;

   except
      on e: exception do begin
         log.Add('');
         log.Add('');
         log.Add('*** ERRORE ***');
         log.Add(e.Message);
      end;
   end;

end;


Ultima cosa da ricordare, impostare il richiamo della procedura

nell'evento double click di Button1:

Codice: [Seleziona]

procedure TForm1.Button1Click(Sender: TObject);
begin
   ScanDef(edDefPath.Text, Memo1.Lines);
end;


a questo punto non resta che lanciare il tutto con F9 e cliccare su
Button1. Se tutto è andato come doveva, vedrete popolare il Memo con
le impostazioni lette dal file.

Quello mostrato qui è solo un piccolo sottoinsieme delle possibilità
che si hanno a disposizione con l'utilizzo di questa libreria; una
volta iniziato a capire come funziona è possibile dare un'occhiata
alle varie demo e al file README.html per scoprirne altre funzionalità.

Buon Lavoro.
nomorelogic
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

09 Mar 2012 - Redirect

Quando si effettua programmazione orientata al web con le CGI Free Spider si necessita a volte di voler fare un redirect, ad esempio per una gestione di login capita di doverlo fare nella fase di convalida del dato! Bene fare ciò è abbastanza facile, basta inserire questa procedura nel vostro codice, unico vincolo è che il vostro TDataModule si chiama TDataModule1 (diversamente cambiatelo nel codice sottostante con il vostro nome).

Codice: [Seleziona]

procedure TDataModule1.Redirect(var Response: TSpiderResponse; Url: string);
begin
     Response.Add('< HTML >');
     Response.Add('< HEAD >');
     Response.Add('< TITLE >Redirect...< /TITLE >');
     Response.Add('< META HTTP-EQUIV="REFRESH" CONTENT="0; URL=' + Url + '" >');
     Response.Add('< /HEAD >');
     Response.Add('< BODY >');
     Response.Add('Redirect...');
     Response.Add('< /BODY >');
     Response.Add('< /HTML >');
end;


Per richiamare questa procedura ad esempio per fare un redirect a www.lazaruspascal.it basta  scrivere così

Codice: [Seleziona]

Redirect(Response,'http://www.lazaruspascal.it/');


Per far funzionare correttamente il codice togliete gli spazi dopo il carattere < e prima del carattere >. Ho dovuto aggiungerli per non creare problemi al sito!

Facile vero?!
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

06 Mar 2012 - JQuery - Oggetto JQGrid

Succede sovente di dover lavorare con delle griglie all'interno di una pagina web, potremmo usare le tabelle, ma non sono certamente così accattivanti e comode da usare come invece le JQGrid.

Alla seguente pagina http://www.lazaruspascal.it/index.php?page=101 trovate i link per scaricare i sorgenti in maniera da integrare le JQuery UI all'interno dei vostri progetti.

Requisiti: Per usare l'oggetto JQGrid si necessita di conoscere il funzionamento dell'oggetto TSpiderAction ( http://www.lazaruspascal.it/index.php?page=90 ) e dell'oggetto Template ( http://www.lazaruspascal.it/index.php?page=103 ).

Per prima cosa apriamo un nuovo progetto CGI (se non sappiamo come fare leggere qui http://www.lazaruspascal.it/index.php?page=87 ) che chiamiamo JGrid.
Ora aggiungiamo al progetto i seguenti due oggetti, che troviamo nella "Tab" "FreeSpider"

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Prerequisiti: aver letto la serie di articoli dedicata alla programmazione WEB con Lazarus + Free Spider ed averne studiato gli esempi.

Alcune lezioni fa abbiamo parlato dell'oggetto TSpiderPage (alla pagina http://www.lazaruspascal.it/index.php?page=93 ) in cui accennavamo alla possibilità di separare l'operatività della pagina dal layout della pagina, ed il TSpiderPage lavorava bene a tal proposito se tutti gli elementi di layout erano all'interno della pagina presa in ingresso dal TSpiderPage, ma se già tale pagina html faceva riferimento a dei fogli di stile esterni (file .css) o ad immagini queste non vengono prese in considerazione (o almeno io non ho capito come fare).
Per risolvere questo problema ci viene in soccorso l'oggetto THtmlTemplate che trovate nella libreria "JQuery UI" (alla pagina http://www.lazaruspascal.it/index.php?page=101 ).
Vediamo come si usa, per prima cosa copiamo i file che compongono la libreria "JQuery UI" nella cartella dove risiede il nostro progetto CGI. Successivamente aggiungiamo la seguente unit "htmltemplate" al nostro progetto.

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

02 Mar 2012 - Overload di operatori

Overload di operatori

L'overload di operatori con Free Pascal è molto più performante di quello con Delphi (vale solo su strutture) ed è di una semplicità estrema.

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Pagine: 1 ... 9 10 [11] 12 13 ... 29

Recenti

How To

Utenti
Stats
  • Post in totale: 19727
  • Topic in totale: 2370
  • Online Today: 191
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 179
Total: 179

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.