En een beetje vergelijken met Gambas ook …
Zie ook Lazarus op Linux, Lazarus gebruik en Lazarus’ nuttig voorbeeld
Ik begrijp dat bij een Lazarus project onderscheid gemaakt wordt tussen de Lazarus code (voor de GUI) en de Freepascal code: LCL = Lazarus Class Library, FCL = Free Pascal Library)
Ik probeer een paar dingen uit op mijn vers geïnstalleerde Lazarus/fpc (bv generate qr codes)
Het scherm is onderverdeeld en je vindt bovenaan menu’s en knoppenbalken, daaronder de Form (editor), Eigenschappen van objecten: “Object Inspector” met zowel de Properties (eigenschappen) als de Events (gebeurtenissen).
Dit zijn aparte vensters (*) die verplaatst kunnen worden (zo’n beetje als in Gambas1). Dus opgelet als je de IDE op een andere desktop wil zetten: alles meenemen!
(*) naargelang je keuze bij de eerste keer opstarten. Je kan kiezen om alles onder een hoofdvenster te hebben, of aparte “ronddrijvende” vensters.
Bij de “hoofdvenster” keuze staat de object inspector links (met Components en daaronder Properties/Events), en heb je rechts een vlak met tabbladen: Messages, Watches, Search Results, Assembler en Breakpoints.
Door een onbedoelde klik (waarbij ik dus niet zag wat ik deed) ben ik trouwens het tabbblad Watches al kwijt. Ik zoek gevoelsmatig bbij “View” naar het weergeven van Watches, en ik kan het daar inderdaad kiezen, waarna het een apart los venstertje wordt. Links staat de titel in een balk met de tekst kwart gedraaid zodat die van onder naar boven leest en in de richting van de balk zit. Ik merk dat je die balk kan vastnemen en ergens naartoe kan trekken. Waar je hem loslaat komt het “Watches” venster dan vast terecht. Na een paar andere locaties krijg ik het terug in het rijtje van Messages enz, maar dan wel achteraan.
Bestanden:
– .lpi Lazarus Project Information (xml) met info over libraries, units..
– .lpr master source file met pascal code.
– .lfm lazarus form (met gegevens zoals gemaakt in Object inspector)
– .lrs gegenereerde resource file.
– .pas de code van bv een form
– ppas.bat wordt vermeld als tijdelijk bestand (script), gemaakt (en terug verwijderd) door de compiler
– De “executable” heeft geen uitgang en wordt gewoon in de projectdirectory gemaakt (maar je kan dat instellen).
De IDE maakt automatisch een Unit1 aan, dat is een broncodebestand dat bij je form Form1 hoort, en de code van die form krijgt (bv dubbelklik op form brengt je in de broncode van Unit1.
Als je bepaalde berekeningen andere code apart wil houden kan je die in een andere Unit steken. Je moet wel aangeven dat die gebruikt moet worden door de naam in te vullen in “Uses …” in de code.
Dankzij de “Package manager” kan je extra functionaliteit installeren in Lazarus (zie vb QR-codes).
Wat ik fijn vind aan Lazarus / (free)pascal
– de duidelijke toewijzing door := in plaats van de = die ook in een test gebruikt wordt
– bij het plaatsen van een element op een form geeft die een blauw uitlijn-lijntje aan zodat je gemakkelijk de elementen mooi onder/naast elkaar kan zetten.
– De tooltip help bij de code schuift duidelijk op in de lijst van parameters, zodat je goed ziet aan welke parameter je bent, door zwarte achtergrond, witte tekst en bold wit voor huidige. (in Gambas is het onderlijd geloof ik).
– De “case” structuur is heerlijk eenvoudig:
case x of
'a', 'b', 'c'
else
WriteLn ('not in abc')
end;
(In gambas zit er een “select” voor)
IDE: je kan een onderdeel van het scherm dat een bepaalde functie heeft in zijn linkse, verticale titel-balk vastpakken en het daarmee helemaal ergens anders naartoe slepen. Het tabblad Watches kan ook een gebied over de hele breedte worden net boven de tabbladen, enz
Waar ik aan moet wennen
– De “begin” lijn in methodes/procedures vind ik nu (na Gambas) een beetje overbodig, maar wel een typische Pascal eigenschap.
– aanhalingstekens worden niet aanvaard, dus niet “letterlijk” maar ‘letterlijk’.
– elke code-lijn moet eindigen met een ; (ipv niets in gambas, wat soms minder duidelijk leest als de instructie over meer lijnen loopt)
– je moet in de broncode opgeven welke libraries gebruikt (met uses SysUtil, db,..) tov Gambas waar je dat in de IDE opgeeft bij het project.
– gedefinieerde variabele is niet onmiddellijk in tooltip hulp beschikbaar (lijkt me).
– try / finally / end; (geen ; na finally) de finally wordt ook uitgevoerd ingeval van een fout in het try gedeelte van de code. Finally wordt ook uitgevoerd bij normaal verloop (geen fout) en zelfs bij een exit tussen de try en finally code.
(Gambas: Try / If Error.. maar Finally bestaat ook als altijd uit te voeren en Catch als uit te voeren bij fout).
Wat ik raar vind
* Lazarus: kopie van project
– iets heel eenvoudigs als een project van naam veranderen/bewaren met een andere naam is omslachtig in Lazarus.
In Gambas geef je gewoon de projectmap een andere naam, en klaar. Of save as en bewaar het met de nieuwe naam.
Bv: mijn “TweedeLazarus” project wil ik omnoemen naar “MijnQRcode”. Ik vindt een paar beschrijvingen, de ene zegt Project, save as .. , maar dan moet je zelf in dat project nog allerlei namen gaan veranderen. De andere beschrijving zegt om File, Save as te gebruiken, maar ook dan moet je manueel allerlei andere dingen ook hernoemen.
Ik probeer 3 manieren uit:
1) ik kopieer de map van het project “TweedeLazarus” naar “MijnQRcode1”.
– in de map zitten dan een aantal bestanden met de vroegere naam: TweedeLazarus (de executable, die wil ik hier al helemaal niet). Het programma compileert en werkt, dus die namen spelen toch niet zo’n rol; behalve misschien in onderlinge referenties.
In Gambas hebben die generieke namen, bv Main (main module), FMain (main Form), … zodat die altijd “juist” blijven. De context is toch altijd de project map waar ze in zitten, en die heeft de project name. Het enige wat je moet veranderen is de project description naargelang wat je daar gezet hebt.
2) Ik probeer Project, Save As .. maar dan geeft Lazarus aan een .lpi bestand te gaan bewaren, niet een nieuwe projectmap te maken. Als ik dan op die plaats maar zelf Create New Folder doe, en daarin bewaar, komen daar: MijnQRcode2.res, MijnQRcode2.lps, MijnQRcode2.lpr, MijnQRcode2.lpi, MijnQRcode2.ico. Vergelijk met originele map, die heeft nog een map “backup” en “lib”, unit1.pas, unit1.frm, die komen dus niet “mee”.
(Als ik geen nieuwe map had aangemaakt maar in de bestaande had bewaard, was het dicht bij een rename geweest denk ik..
3) (todo): File, Save As .. staat klaar om unit.pas te bewaren, in de eigen projectmap, wat waarschijnlijk alleen zin heeft als je een unit2 wil maken waarin je veel van unit1 wil overnemen. Ik neem aan dat ik hier ook naar die andere directory kan gaan waar ik voorheen voor mijn project Save as gedaan heb..Als ik een project
Ik krijg de vraag "The new unit is not yet in the unit search path. Add directory /home/myuser/dev/LazarusFPs/MijnQRcode3/ ?"
Als ik bevestig is de volgende vraag:”The unit Unit1 is used by other files. Update references automatically?” en dan de uitgebreide keuze: “No to all”, “Yes to all”, “No”, “Yes”. Moeilijk als je niet begrijpt wat die vraag betekent… Ik kies No to all omdat ik geen risico wil lopen met mijn origineel project waarvan ik begonnen ben. Nadien bevat MijnQRcode3: mapje backup, unit1.frm, unit1.pas
Conclusie: Als ik een kopie van een project wil dan
– kopieer ik de hele project map vanuit bestandbeheer naar een andere naam. Als je “run” kiest zie je in het lopende programma geen verschil (Form heet gewoon Form1), maar de naam van het gecompileerde bestand is de oude naam, maar je kan die dan hernoemen nadien.
– Dus misschien handiger: Project, Save As, en dan aanvullen met de ontbrekende bestanden, misschien met File, Save As..
* FreePascal:
Hoewel pascal een van de eerste programmeertalen was die ik leerde, vind ik sommige dingen ondertussen een beetje eigenaardig…
– de if ... then (else) voelt inconsequent door ontbrekend einde, of tenminste zonder “end” of “endif”, maar eindigt wel met een ;
– de end. op het einde lijkt me overbodig, de vanzelfsprekende eof is ook wel goed.. (zoals bij Gambas).
Zie ook Lazarus op Linux, Lazarus gebruik en Lazarus’ nuttig voorbeeld