* * * *

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 05, 2024, 11:00:24 pm

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

510 Visitatori, 0 Utenti

Autore Topic: Lazarus e MacBook  (Letto 4266 volte)

graffaele

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
Lazarus e MacBook
« il: Marzo 12, 2012, 11:25:32 am »
Ciao, spero di non aver sbagliato sezione...

Come ho scritto da altre parti sul forum, sono un programmatore Delphi dalla versione 2 a quella attuale, che ha iniziato a sperimentare Lazarus soprattutto per le sue qualità "cross-platform". In particolare mi sarebbe molto utile poter esportare i miei progetti su Mac.

Sabato ho fatto un primo esperimento: ho realizzato un piccolissimo programmino che si collega ad un DB SQLite e visualizza in una griglia un elenco di dati anagrafici. In Windows funziona perfettamente. Ho quindi preso tutto il progetto, incluso il DB SQLite, e l'ho portato su un MacBook dove avevo precedentemente installato Lazarus per tale sistema (incontrando non pochi problemi, dove per Windows non ne avevo praticamente avuti...).

Ho aperto il progetto, l'ho compilato ma non ci sono riuscito. :-(

In questo momento non ho con  me il Mac e non ricordo esattamente quale fosse il problema, ma nel caso qualcuno mi risponderà potrò essere più preciso. La cosa che vi chiedo per il momento è: ma c'è qualcuno di questa comunità che è riuscito a compilare senza problemi uno stesso progetto senza cambiargli una virgola su questi due sistemi?

Vi anticipo che ho utilizzato solo componenti presenti su "Data controls", "Data access" ed "SQLdb", che credo siano cross-platform.

Grazie per l'attenzione. ^_^

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Lazarus e MacBook
« Risposta #1 il: Marzo 12, 2012, 11:28:27 am »
Anticipo che non possiedo dei mac quindi vado per intuizione. Su windows per far funzionare l'applicativo hai dovuto mettere le dll per accedere a sqlite nella stessa cartella del tuo eseguibile. Non è possibile che bisogna fare qualcosa di analogo anche su Mac?!
Ieri è passato, domani è futuro, oggi è un dono...

graffaele

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
Re:Lazarus e MacBook
« Risposta #2 il: Marzo 12, 2012, 11:36:43 am »
azz! mi hai fatto sentire proprio un pivellino...  ;)

effettivamente mi ero "portato dietro" anche la dll, ma giustamente credo che quella usata per Windows non vada bene.... controllo il sito di SQLite, appena posso usare il mac faccio un paio di prove e ti faccio sapere...  :)

P.S.: xinyiman, ma passi tutte le tue giornate su questo forum?  ;D  ;)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Lazarus e MacBook
« Risposta #3 il: Marzo 12, 2012, 11:40:16 am »
No, e che lo tengo sempre aperto e se ogni tanto vedo che c'è qualcuno che ha bisogno di aiuto e se non mi richiede troppo tempo il suggerimento allora provvedo! Invece gli esempi e le guide le preparo a casa la sera e poi il mattino le posto perchè al lavoro ho una linea più veloce.
Ieri è passato, domani è futuro, oggi è un dono...

darione

  • Full Member
  • ***
  • Post: 100
  • Karma: +1/-0
    • Sito personale
Re:Lazarus e MacBook
« Risposta #4 il: Marzo 15, 2012, 03:58:50 pm »
ma c'è qualcuno di questa comunità che è riuscito a compilare senza problemi uno stesso progetto senza cambiargli una virgola su questi due sistemi?

Senza cambiare nulla la vedo dura. Io ad esempio, compilando in un Leopard virtualizzato con vmware, ho dovuto cambiare backslasch e forwardslash (tutte le volte che apro o salvo un file applico una funzione al nome del file che lo corregge a seconda del sistema dove sto compilando). Avendolo compilato in linux, pensavo il trasferimento in mac fosse indolore. Invece poi mi sono accordo che application.exename non mi dava esattamente la stessa cartella, ma fai conto mi buttava dentro la mia root di progetto (come windows) ma poi andava dentro altre sottocartelle, che pure erano nascoste (andando con findere dentro la cartella del progetto non le vedevo).Così con una funzione ho tagliato le sottocartelle che mi creava sul mac.
Mi era preso un colpo pensando che il TFileListBox non funzionasse in Mac, invece era questo strano comportamento di restituire una path di lancio differente dal compilato in windows.
Poi basta,ma non usavo database, ma solo file di testo. Ogni libreria dll aggiuntiva, certo serve nella versione relativa al sistema operativo usato.

Darione


CortelliStefano

  • Newbie
  • *
  • Post: 37
  • Karma: +0/-0
Re:Lazarus e MacBook
« Risposta #5 il: Maggio 02, 2012, 12:23:47 pm »
Ciao, la mia esperienza per quanto riguarda la portabilità del codice con Lazarus è sicuramente positiva, ma compilando in nativo occorre tenere presente che le interfacce dei vari sistemi hanno comportamenti a volte diversi.

Anch'io la vedo dura compilare senza cambiare nulla. Piuttosto diciamo che una volta impostati alcuni accorgimenti la cosa diventa molto più facile.

Vedo essenziale per esempio inserire almeno una variabile/costante globale che identifichi il sistema, per potere poi apportare delle modifiche sul codice quando occorre, a volte può essere necessario inserire qualche direttiva di compilazione, cosa  che quando è possibile cerco di evitare.

Le differenze tra un S.O. e un altro ci sono, e non potrebbero non esserci, compilando in nativo. A parte le piccole cose, come il / o \ nei path dei files, o il percorso dell'eseguibile che sotto Mac fa riferimento al bundle, oppure il carattere di ritorno a capo, su progetti complessi il problema maggiore è il comportamento dei vari componenti.

E qui, sotto Mac, perlomeno con la Carbon che comunque è l'interfaccia più supportata (tra l'altro con Lazarus 0.9.28.2 ho problemi a compilare con le GTK2), si notano molte differenze rispetto alle GTK2 o alle WIN32. Differenze che su form complesse possono anche creare dei problemi, per esempio quando l'evento Change sotto Carbon si verifica anche a componente disabilitato mentre sotto GTK o WIN32 no, oppure quando scopri che su una DbGrid con Enabled = False sotto Mac/Carbon viene comunque mantenuto attivo lo scroll con il mouse.

Poi le stesse caratteristiche dei componenti hanno a volte piccole differenze grafiche, dalla ComboBox che sotto GTK2 deve avere altezza minima 27, ai bottoni che con le GTK devono avere un'altezza maggiore rispetto a Carbon o Win32 perché il testo sia leggibile.

O ancora che la lunghezza di una ComboBox sotto Mac non sia sufficiente per visualizzare tutto il testo delle voci, magari perché più arrotondata rispetto alle altre interfacce. O infine che che i bottoni sotto Mac/Carbon sembrano non recepire la possibilità di prendere il focus e quindi non puoi preimpostare un bottone (p.es. OK) che poi l'utente può confermare con Invio senza toccare il mouse.

Oppure puoi andare a scoprire che un MessageDlg posto nell'evento OnExit di un controllo, che funziona perfettamente sotto GTK2 e Win32, sotto Mac manda in loop l'applicazione.

Con Mac, poi, c'è anche da considerare l'hardware differente, tasti funzione di default utilizzati dal sistema, che magari tu hai utilizzato nel tuo programma. Oppure anche differenze minori, ma che rendono consigliabile prevedere una differenziazione sotto Mac, per rendere il programma più rispondente alle esigenze di chi lo usa, di chi è abituato a lavorare in un modo che non è lo stesso del pc.

Considera anche che lo sviluppo per Mac è più "giovane" anche per Lazarus, qualche baco in più c'è sicuramente, la stessa IDE presenta talvolta qualche problema e se vedi nella RoadMap alcune funzioni della Carbon sono ancora solo parzialmente supportate. Ad esempio il TCalendar manca sotto Carbon e se usi un TDateEdit ad il calendario non lo visualizzi.

Questo per dire che la compilazione multipiattaforma è comunque qualcosa di eccellente, se pensi che compila in nativo. Lazarus (Open Source) ha raggiunto un traguardo che Delphi (commerciale) non ha raggiunto (men che meno dopo il naufragio del progetto Kylix). Ma non si può pensare che lo stesso codice lo compili subito, senza fare nulla, su tutti i S.O. target possibili.

Invece, con un po' di pratica e di esperienza, arrivi a scrivere un codice che sia il più possibile uguale per tutti i sistemi, perché conosci le caratteristiche che ogni sistema presenta. Magari evitando di fare il ricorso ad API, proprie di ciascun sistema operativo, se non strettamente necessario, e quando necessario prevedere apposite direttive di compilazione.

L'ideale, sicuramente, sarebbe quello di testare il progetto sui sistemi che ti interessano durante lo sviluppo, anche se a volte questo non è sempre possibile, capita per esempio che vuoi fare il porting su di un nuovo S.O. di un progetto che hai già , e qui un po' di lavoro è da mettere in conto.

Senza dimenticare che anche lo stesso porting dei componenti non e' sempre scontato, io per esempio sono riuscito a risolvere grazie a questo forum, e solamente con l'aiuto di Stilgar, un problema che non mi permetteva di fare funzionare PowerPdf sotto Mac (a proposito: grazie ancora a Stilgar!).

Infine, anche per quello che può essere il problema che ti si è presentato, la versione Mac di Lazarus necessita di aggiungere il path dei componenti al file fpc.cfg, e poi soprattutto di aggiungere nelle opzioni del compilatore del progetto i path necessari alle stesse directories di Lazarus, dalla lcl alla interfaces, ecc..

Concludendo, Lazarus è una piattaforma di sviluppo fantastica, ti permette di compilare in nativo un codice che girerà incredibilmente più veloce rispetto a Java o Python e che si integra perfettamente con l'interfaccia del S.O. target.

Essendo in nativo, devi al tempo stesso tenere in considerazione le caratteristiche di ogni interfaccia, che è il rovescio della medaglia. Non è e non sarà mai come Java o Python, nel bene e nel male (per me è comunque più un bene che un male, preferisco senza dubbio la compilazione in nativo).

Conoscendo i punti critici delle varie interfacce, potrai scrivere un codice che compilerai sotto i vari S.O., anche grazie all'utilizzo di una costante o variabile che identifica il tuo sistema (o delle direttive di compilazione) nei casi in cui è necessario.

Quello che trovo auspicabile sarebbe magari la realizzazione di HowTo, magari se non in italiano per lo meno nelle lingue principali (non esiste solo l'inglese), che possa dare qualche consiglio perché il codice possa essere portato nella maniera più fluida possibile, indicando i punti che presentano differenze nei vari sistemi.

Questo chiarmante è solo il mio parere, positivo appunto, ma volto a sottolineare come il concetto "write once, compile everywhere" debba comunque tenere conto delle caratteristiche del sistema operativo su cui si va a compilare.

Tieni comunque presente che anch'io sono approdato da poco a Mac e proprio in questi giorni sto lavorando sul porting del codice di un mio progetto, che già girava sotto Linux e Windows, anche sotto Mac OS X. Posso assicurarti che su un progetto abbastanza complesso c'è da lavorare abbastanza, prima nel sistemare i problemi del porting, poi nel testare tutto sul nuovo sistema.

Ciao e in bocca al lupo, vedrai che dopo le prime difficoltà riuscirai a fare il porting del tuo progetto e sarai (almeno spero) entusiasta di Lazarus, buona giornata a tutti e scusate la lunghezza del messaggio, ma il dono della sintesi non è dalla mia parte,

Stefano
« Ultima modifica: Maggio 02, 2012, 01:29:26 pm da CortelliStefano »

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18800
  • Topic in totale: 2239
  • Online Today: 524
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 510
Total: 510

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.