* * * *

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 10, 2024, 12:47:46 pm

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

102 Visitatori, 0 Utenti
Il Pascal è un linguaggio di programmazione, e non è il solo, ma noi approfondiremo questo perché Lazarus si basa proprio su Free Pascal. Analizziamo ora il significato del termine 'linguaggio di programmazione'. 'linguaggio' è un modo di comunicare. Noi, per esempio, comunichiamo con i nostri connazionali tramite l'italiano, mentre se volessimo parlare con un inglese dovremmo comunicare con lui tramite l'inglese, con un francese usando il francese e così via. Quindi possiamo capire che il Pascal, essendo un linguaggio, ha le sue regole di sintassi esattamente come la lingua italiana. Ora analizziamo il termine 'di programmazione'. Si riferisce all'atto di programmare un computer perché, come tutti sanno, se il computer non fosse programmato per fare qualcosa (scrivere documenti, calcolare, trasmettere dati) sarebbe solo un ammasso di pezzi elettronici e basta.
Iniziamo a capire la sintassi del Pascal attraverso la scrittura della nostra prima console application. Innanzitutto andare sulla voce 'File', poi su 'Nuovo'.
Ora si dovrebbe aprire una finestra con alcune voci. Tra queste dovrebbe comparire 'Console Application'.
Cliccando su ok ci si dovrebbe aprire una finestra con questo scritto dentro.
Codice: delphi [Seleziona]
program project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp,
  { you can add units after this };
type
  { TMyApplication }
  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
  Esco: String;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h','help');
  if ErrorMsg'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Halt;
  end;
  // parse parameters
  if HasOption('h','help') then begin
    WriteHelp;
    Halt;
  end;
  { add your program here }
  // stop program loop
  Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ',ExeName,' -h');
end;

var
  Application: TMyApplication;
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
   
Questo codice è la base di partenza per ogni nuovo programma da linea di comando. Per il momento prendiamo per buono quello che c'è scritto, ed andiamo ad inserire la parte che a noi interessa approfondire al momento.
Dove troviamo la scritta    
Codice: Delphi [Seleziona]
{ add your program here }

andremo ad inserire la seguenti righe di codice:
Codice: Delphi [Seleziona]

    writeln('Primo programma');
    Clrscr;
    writeln('Hello world!');
    write('Ciao');
    write(' ');
    write('mondo!');
    readkey; {volendo avrei potuto usare anche la dicitura: repeat until keypressed;}

E poi per terminare l'opera ad inizio codice dove c'è scritto
Codice: Delphi [Seleziona]

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp
  { you can add units after this };

andiamo ad inserire:
Codice: Delphi [Seleziona]
, Crt.

Così il codice in quel punto diventa:
Codice: Delphi [Seleziona]

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp, Crt
  { you can add units after this };

Sostituiamo anche la riga:
Codice: Delphi [Seleziona]
program project1;

con
Codice: Delphi [Seleziona]
program PrimoProgramma;

Salviamo in una directory a noi nota con il nome PrimoProgramma; poi clicchiamo sul pulsante a forma di triangolino verde e vedremo comparire il risultato del nostro primo programma.
Ora andiamo ad analizzare quello che abbiamo fatto. Aggiungendo la voce Crt nelle uses abbiamo inserito una libreria che ci permette di utilizzare determinate funzioni e procedure (in questo caso mi permette di usare il clrscr e il keypressed).
Ora prendiamo in esame ogni singola riga:
Codice: Delphi [Seleziona]
writeln('Primo programma');

Writeln mi permette di scrivere a video tutto quello che sta tra le parentesi. In questo caso mi ha stampato la stringa Primo programma, anche se non la vedo a video (con la prossima riga di codice scopriremo come mai) ed è andato a capo.
Codice: Delphi [Seleziona]
Clrscr;

Clrscr vuol dire clear screen, ovvero pulisci schermo. E quindi è per questo che non si vede a video la scritta "Primo Programma", perchè è stata scritta ma poi cancellata.
Codice: Delphi [Seleziona]
writeln('Hello world!');

Come visto precedentemente scrivo a video "Hello world!" e vado a capo.
Codice: Delphi [Seleziona]
write('Ciao');

Scrivo a video "Ciao" ma non vado a capo.
Codice: Delphi [Seleziona]
Write(' ');

Scrivo a video uno spazio ma non vado a capo.
Codice: Delphi [Seleziona]
write('mondo!');

Scrivo a video mondo! ma non vado a capo.
Codice: Delphi [Seleziona]
 readkey; {volendo avrei potuto usare anche la dicitura: repeat until keypressed;}

Aspetto che l'utente digiti un tasto qualsiasi. Questo perchè se non avessimo inserito quest'ultima istruzione non avremmo visto a video nessun risultato, perchè sarebbe stato eseguito ma non si sarebbe fermato e quindi si sarebbe automaticamente chiusa la finestra. Volendo si può sostituire readkey; con repeat until keypressed; si otterrebbe comunque lo stesso risultato.
Bene, a questo punto abbiamo capito che per scrivere a video si possono usare le due parole write e writeln, la prima non va a capo dopo aver scritto quello che deve mentre la seconda sì.
Ok ora iniziamo a vedre anche le altre cose importanti che questo primo programma ci può offrire. Iniziamo con una premessa: il file sorgente non contiene solo parole che servono per realizzare il programma, ma anche parole che servono a ricordarsi cosa un pezzo di codice scritto precedentemente realizzava. Cio' si può ottenere tramite i commenti, ovvero pezzi di codice ignorati dal compilatore. Prendiamo un esempio se scrivo writeln('Hello world!'); a video vedrò la suddetta scritta ma se invece scrivessi {writeln('Hello world!');} a video non vedrei niente perchè il compilatore lo ignorerebbe considerandolo un commento. L'utilità di questa pratica (commentare i sorgenti) è quella di mettere delle informazioni, note o impressioni che sicuramente non ci si può ricordare (ad esempio a distanza di due mesi). Servono per la manutenzione del codice sorgente.
Ora notiamo che il programma inizia con la parola Program che è una di quelle parole riservate del linguaggio pascal, e identifica l'inizio della scrittura di un programma pascal. Program viene seguito dal nome del programma nell'esempio riportato da PrimoProgramma. Un'altra parola riservata molto utile è Uses che come abbiamo visto precede le librerie necessarie al funzionamento del programma stesso.
Notiamo anche che nel corso del programma ci siamo imbattuti più volte nella digitura begin e in end , bene queste due parole servono al compilatore a differenziare la parte esecutiva del programma. A volte troviamo l'end con il punto e altre con il punto e virgola, la prima versione sta a identificare la parte esecutiva principale del programma, mentre la seconda serve a identificare la parte esecutiva di procedure e funzioni (argomento che verrà trattato più avanti - in altri articoli) Quindi tutto quello che noi vogliamo vedere a video verrà immesso tra un begin ed un end.
Tutto il resto lo capiremo nel corso di altri articoli.
N.B. Definizione di codice sorgente: sono uno o più file che contenenti delle informazione che se correttamente compilate danno vita ad un programma.
N.B. Definizione di compilatore: è un programma che legge i codici sorgenti e se sono corretti sintatticamente genera un programma.
N.B. Lazarus genera eseguibili veramente molto grossi, basta andare a vedere le dimensioni del programma appena creato. Per ovviare a questo problema basta selezionare Progetto → Opzioni compilatore...  nelle voci Codice e Linking verificare che i parametri siano li stessi sotto riportati.
Le voci che devono essere selezionate sono:

  • Collegamenti intelligenti (-CX)
  • Mostra i numeri di linea nella backtrace degli errori di esecuzione (-gl)
  • Esegue strip degli eseguibili (-Xs)
  • Link intelligente (-XX)
Se questo modo di compilare non dovesse ridurre le dimensioni degli eseguibili si può tentare quanto segue per l'ambiente windows:
  • Aprire una console
  • Tramite console andare nella cartella di Lazarus che contiene il programma STRIP.exe, generalmente c:\Lazarus\fpc\Numero della Versione Pascal\bin\i386-win32 o  c:\Programmi\Lazarus\fpc\Numero della Versione Pascal\bin\i386-win32
  • Digitare il comando: strip --strip-all Applicazione.exe
  • Digitare il comando: upx -9 Applicazione.exe
Ovviamente applicazione.exe è il nome del programma scritto in FreePascal/Lazarus che si intende ridurre di dimensione, ad esempio C:\ProgrammaProva.exe .
Bene avete appena creato il vostro primo programma in free pascal usando Lazarus.

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

Articles in « PROGRAMMATORE ALZATI E CAMMINA CON LAZARUS »

Comments *

Commenting option has been turned off for this article.

Recenti

How To

Utenti
  • Utenti in totale: 802
  • Latest: Il Faro
Stats
  • Post in totale: 19113
  • Topic in totale: 2281
  • Online Today: 108
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 102
Total: 102

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.