Code Conversion Guide/sk

From Lazarus wiki
Jump to: navigation, search

Deutsch (de) English (en) español (es) français (fr) Bahasa Indonesia (id) 日本語 (ja) português (pt) русский (ru) slovenčina (sk)

Cieľom tejto príručky je zdokumentovať niektoré zo špecifických rozdielov , ktoré sa najčastejšie vyskytujú pri konverii počas prekladu existujúceho kódu z Delphi do Lazarus.

Tento článok je o konverzii existujúceho zdrojového kódu Delphi alebo Kylix tak, aby pracoval s prekladačom Free Pascal a IDE Lazarus. Hoci majú Lazarus a Free Pascal spoločné črty s Delphi a Kylix, nejedná sa o ich klony. Existuje veľa rozdielov vo volaní knižníc a konvencii... a v niektorých oblastiach je Free Pascal rozšírený a môže byť náročnejší na správnu syntax. Pozrite si príručku Lazarus pre používateľov Delphi, v ktorej nájdete popis niektorých funkčných rozdielov.

Cieľom tejto príručky je zdokumentovať niektoré zo špecifických rozdielov, s ktorými sa často stretnete počas procesu konverzie kódu pri prekladaní existujúceho kódu z Delphi na Lazarus.

Tento dokument bol umiestnený na Wiki aby mohol byť jednoducho rozšírený každým, kto sa stretol s unikátnym problémom a zverejní ho aj pre ostatných.

Contents

Výber komponentov alebo knižnice pre konverziu

Kde hľadať kód na konverziu

Na nete je dostupného veľa kódu, ktorý môže byť konvertovaný pre použitie s FreePascal a Lazarus. Tu je Stránka kódov, ktorá je dobrým začiatkom. Prosím vás, pridajte na do nej, ak poznáte nejaký iný dobrý odkaz. Turbo-Power Software uvoľnil ich celú ponuku pod MPL. Zoznam dostupných balíčkov môžete nájsť na Sourceforge.

Aby sme predišli duplicitným snahám, balíčky, ktoré už sú konvertované sú vypísané na stránke Components and Code examples. Ak ste prekonvertovali balíček alebo na nejakom pracujete, pridajteprosím poznámku na stránku [Current Projects].

Licencovanie

Licencie existujúceho kódu siahajú od freeware/public domain po reštriktívne verzie, ktoré bránia modifikácii, redistribúcii a komerčnému použitiu. Pred konverziou každého balíčka, je dobré preskúmať jeho licenciu a zaistiť, že je kompatibilná s Lazarus a Free Pascal. Výber licencie je veľmi dôležitý pri komponentoch, pretože umiestnenie jedného na formulár môže navodiť nechcenú alebo nekompatibilnú licenciu na celú aplikáciu.

Keď konvertujete komponenty, rešopektujte prosím elanie pôvodného autora a ponechajte všetky copyrighty a licenčné hlavičky spolu s emailovou adresou a url. Je slušné a často i užitočné informovať autora, že jeho komponent je konvertovaný... hlavne ak je komponent pod obmedzujúcou licenciou. Nový záujem o staré alebo zabudnuté komponenty môže často podnietiť autora na revíziu originálu a zmeniť reštriktívnu licenciu.

Vo všeobecnosti, Public Domain (freeware) a LGPL/MPL sú najprispôsobiteľnejšie pre distribúciu komponentov. Dobrým začiatkom pre nájdenie ďalších informácií môže byť definícia Open Source. Existuje niekoľko porovnaní, ktoré môžu pomôcť objasniť ako pracujú rôzne typy licencií a aký budú mať dosah na kód, ku ktorému patria. Hľadajte "open source license comparison".

Závislosti

Ďalším krokom pred začatím práce na konverzii je overiť si, že kód nie je závislý na na iných balíčkoch, ktoré možno nemáte alebo predstavujú veľkú výzvu pre konverziu. Niektoré ponuky freeware sú obmedzené alebo rozšírené vlastnené balíčky, ktoré často nie sú dostupné alebo prichádzajú s nevhodnou licenciou.

Poznámky k prekladaču

Viz:

Poznámky k platforme a OS

Lazarus a Free Pascal sú nadplatformové a nadarchitektúrne vývojové nástroje. Naopak, väčšina existujúceho kódu Delphi bola špecificky navrhnutá pre beh na procesore Intel a s Win32. Ak má Váš komponent veľa špecifického kódu Win32, bude možno múdrejšie skúsiť nájsť alternatívu, ktorá je menej závislá na platforme. Ale nenechajte sa tým zastaviť... je naozaj prekvapujúce čo všetko LCL podporuje!

Konverzia

Nastavenie IDE Lazarus pre konverziu projektu

Vytvorenie skúšobného projektu

  • Umiestnite konvertovaný kód do podadresára (napr: convertdir)
  • Spusťte Lazarus
  • File->Save All do adresára convertdir. Zmysluplné mená pre Project a predvolenú jednotku sú voliteľné.
  • Otvorte "základnú" konvertovanú jednotku v convertdir
  • Pridajte ju do projektu: Project->Add Active Unit to Project
  • Spusťte Tools->Quick Syntax Check alebo Run->Build All, čím začnete.

Na čo treba dať pozor

  • Mená súborov sú citlivé na veľkosť pri prekladačoch série 1.0.x. Ak pracujete s touto verziou, premenujte všetky súbory malými písmenami. Ak to neurobíte, ľahko dostanete chybové hlásenie File not found.

Zdrojové kódy Delphi VCL a Kylix CLX v Lazarus

Pri konverzii zdrojových kódov Delphi/Kylix, je často užitočné použiť Find declaration, aby ste sa presvedčili, či daná funkcia funguje. IDE Lazarus môže analyzovať zdrojové kódy Delphi/Kylix. Na to potrebujete nastaviť niektoré cesty a nastavenia prekladača. Jednoducho to môžete nastaviť pomocou Environment->CodeTools Defines Editor->Insert Template.

Problémy konverzie a ich riešenie

Ekvivalenty Delphi/Kylix súborov v Lazarus

Delphi / Kylix Popis Lazarus Popis
.pas

.dfm/.xfm,

.dcu/.dpu,

.dpr(main project file),

.res,

.dof/.kof

---

---

---

súbor zdrojového kódu Delphi,

formulár Delphi,

preložená jednotka Delphi,

projekt Delphi,

Resource súbor Windows,

súbor volieb Delphi

.pas, .pp

.lfm,

.o,

.lpr

---

---

.lrs,

.lpi(hlavný súbor projketu),

.ppu

súbor jednotky Pascal,

dátový súbor formulára,

súbor preloženej jednotky,

súbor projektu,

Resource súbor,

súbor volieb projektu,

Resource súbor Lazarus,

informačný súbor projektu Lazarus,

popisný súbor jednotky FPC

Teda súbor Delphi .dcu zhruba korenšponduje so súbormi FPC .o a .ppu spolu v jednom súbore. Súbor .PPU je prevažne hlavičková (interface) časť, the .o prevažne časť implementation. Hlavnou výnimkou sú inlined funkcie, ktoré vo forme to-be-inlined v .ppu.

Konverzia projektov/formulárov/jednotiek Delphi do Lazarus

Premenujte alebo prekopírujte súbor .dpr na súbor .lpr. Zakomentujte alebo odstráňte direktívu

{$R *.res}

a pridajte direktívu

{$mode delphi}{$H+}

alebo

{$mode objfpc}{$H+}

do súboru .lpr.

S touto konverziou Vám môže pomôcť Lazarus IDE prostredníctvom položky menu Tools menu>Convert Delphi Project to Lazarus Project. Vyžiada si zadanie súboru .dpr (projekt Delphi) a skonvertuje ho na .lpr, ďalej vytvorí súbor .lpi a skonveruje všetky jednotky.

Mnoho existujúcich formulárov Delphi môžete konvertovať pomocou IDE Lazarus pomocou zabudovaného konvertora formulárov DFM na LFM. Nájdete ho v menu Tools->Convert DFM file to LFM. Vyvolajte súborový dialóg, vyberte *.dfm a konvertor urobí zvyšok.

Ak potrebujete konvertovať celú jednotku (s alebo bez formulára), Lazarus má tiež zabudovaný nástroj: Convert Delphi unit to Lazarus unit, ktorý urobí nasledujúce:

  1. upraví veľkosť písmen v sekciách uses a iclude.
  2. konvertuje súbory .dfm na súbory .lfm (bez kontroly obsahu, len formát)
  3. vytvorí prázdny súbor .lrs (obsah bude pridaný neskôr)
  4. pridá direktívu
{$mode delphi}
  1. nahradí jednotku Windows jednotkou LCLIntf
  2. ak je to potrebné, pridá jednotku LResources
  3. odoberie jednotku Variants
  4. odoberie direktívu
{$R *.dfm}
  1. pridá do sekcie initialization direktívu
{$i unit.lrs}

Toto umožní rýchlu a ľahkú konverziu väčšiny jednotiek z formátu Delphi do formátu Lazarus. Tento nástroj nevykonáva žiadnu kontrolu platnosti alebo automatické zmeny syntaxe, tak všetky potrebné zmeny syntaxe, dodatočné zmeny jednotiek, alebo zmeny dfm/pas pre rozdiely v prvkoch/komponentoch, musíte urobiť manuálne, pomocou niekoľkých sprievodcov, ktorý vám pomôžu niektoré kroky, hlavne opravovanie konvertovaných formulárov (lfm).

Výber správneho módu prekladača

Prekladač Free Pascal podporuje 5 rôznych módov Pascalu. Napríklad TP pre Turbo Pascal, vám dovolí prekladať jednotky Turbo Pascal. Má i mód pre kompatibilitu s DELPHI, ktorý môžete nastaviť na uľahčenie konverzie kódu. Lazarus preferuje mód OBJFPC, ktorý je skoro ako mód DELPHI, ale bez mnohoznačnosti syntaxe Delphi. Tu sú dôležité body:

Mód môže byť zvolený na príkazovom riadku alebo na začiatku zdrojového kódu. Použitie príkazového riadku má výhodu, že nemusíte meniť zdrojový kód, ale i nevýhody, ktoré musia vysvetliť iní.

Väčšinu jednotiek Delphi môžete jednoducho preložiť pomocou Free Pascal pridaním tejto konštrukcie, hneď za meno jednotky

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}

Ďalšie podrobnosti o módoch Free Pascal nájdete v dokumentácii Free Pascal.

Viac-platformové poznámky

  • Zahrnutý assembler býva vždy problémom, pretože zväzuje kód s architektúrou Intel. Niektorí vývojári robia prototypy algoritmov v Pascale a pomocou ifdef vkladajú oprimizovaný assembler. Našťastie Turbo-Power toto urobil na mnohých miestach svojho kódu. Ak je toto prípad balíčka, ktorý chcete konvertovať, prepnite ho späť do Pascalu.
  • Neodkazujte na špecifické pamäťové miesto, ako dátová oblasť BIOS. Zistite čo kód potrebuje a skúste nájsť cezplatformovú alternatívu.
  • Nepoužívajte triky, ktoré sú špecifické pre procesor (ako použitie Intel TSC) bez zatvorenia svojho kódu do ifdef pre platformu potrebnú pre kód... a poskytnutia alternatívy pre prostredia, ktoré nie sú hardvérovo kompatibilné.
  • Ak potrebujete nejaký kód, špecifický pre OS, používajte IFDEF. Viz zoznam makier neskôr.

Užitočné premenné prekladača

Pre písanie kódu, ktorý sa má správať na rôznych systémoch rôzne, môžete použiť direktívy

{$IFDEF Name}

Pričom Name môže byť

  • LCL - táto premenná je definovaná pri použití balíčka LCL a je vhodná pre písanie kódu, ktorý pracuje s LCL a Delphi.
{$IfDef LCL}
  • FPC - táto premenná je definovaná pri použití prekladača Free Pascal a je vhodná pre písanie kódu, ktorý pracuje s Free Pascal a Delphi.
{$IfDef FPC}
  • LCLGtk, LCLWin32, LCLQt, ... - tieto premenné sú definované keď je použitý balíček LCL a špecifický WidgetSet. Užitočné pre písanie kódu, pracuje s LCL na určitej platforme.
{$IfDef LCLGtk}
{$IfDef LCLWin32}
{$IfDef LCLQt}
... 
  • Unix, Win32,... - tieto sú definované pre cieľový OS. Delphi definuje Linux, Win32 a MSWindows. Free Pascal beží na oveľa väčšom počte platforiem a tak je vhodné použiť oveľa všeobecnejšie položky. Napríklad Unix je definované pre Linux, FreeBSD, NetBSD a OpenBSD, na ktorých už Lazarus beží.
{$IfDef Unix}
{$IfDef Win32}
...
Pre prácu v Kylix použite nasledujúcu konštrukciu:
{$IfDef Linux}
  {$Define Unix}
{$EndIf}
  • ENDIAN_BIG - táto premenná je definovaná na procesoreoch ako PowerPC (napr. staré počítače Apple, tj. do MacOSX 10.2), ktoré majú obrátené poradie ako Intel kompatibilné procesory.
{$IfDef ENDIAN_BIG}

Ďalšie podrobnosti nájdete v dokumentácii Free Pascal.

Podpora 32bit/64bit

Ukazovatele pod 64bit potrebujú 8 bajtov namiesto 4 na 32bit. Typ 'Integer' zostáva pre kompatibilitu s 32bit. To znamená, že už nepotrebujete pretypovanie ukazovatele na integer a naopak. FPC definuje dva nové typy:

  • PtrInt je 32bit Integer so znamienkom na 32bit platformách a 64bit Integer sp znamienkom na 64bit platformách.
  • PtrUInt, je rovnaké ako predchádzajúce s tým rozdielom, že sa jedná o Integer bez znamienka.

Pre kód, ktorý má pracovať s Delphi a FPC použite:

 {$IFNDEF FPC}
 type
   PtrInt = integer;
   PtrUInt = cardinal;
 {$ENDIF}

Nahrďte všetky

integer(SomePointerOrObject)

týmto

PtrInt(SomePointerOrObject)

Hľadanie chýbajúcich identifikátorov

V organizácii LCL, v porovnaní s Delphi VCL, sú rozdiely. Ak sa stretnete s chybovým hlásením prekladača not found pri významných triedach alebo identifikátoroch, je veľká šanca, že je v inej jednotke. Úplný rížový odkaz môžete nájsť pomocou programu grep na lazarus/docs/xml alebo na podadresár lcl.

Napríklad bežne používaný TButton vyvoláva v kóde Delphi chybu, pretože je umiestnený v jednotke buttons.pp. Tento príkaz nájde správnu jednotku veľmi rýchlo (v adresári zdrojového kódu Lazarus):

 grep -in ' tbutton =' lcl/*

Rozdiely v dôležitých jednotkách Lazarus a Delphi

Prosím dopĺňajte túto časť!;
  • Windows -> LCLIntf, LCLType, LCLProc, VCLGlobals, ...

Keďže LCL nie je špecificky Windowsová knižnica, kód, ktorý je v jednotke Windows z Delphi pre priamy prístup k Win32 API je abstrahovaný do samostatných rozhraní, do ktorých môžete pristupovať z jednotky LCLIntf. Majte na pamäti, že Lazarus neemuluje Win32, tak veľa funkcií cýba a niektoré nepracujú ako ich Win32 náprotivky. Tieto funkcie existujú len pre kompatibiltu s Delphi a sú určené len pre rýchly a (s)prostý prenos. LCL tiež tiež nemá mnoho z typov, tak je často potrebná jednotka LCLType a niekedy aj VCLGlobals. LCLProc tiež obsahuje niekoľko funkcií, ktoré môžu byť užitočné pre najnižšiu úroveň obslúh ako FreeThenNil, DeleteAmpersands na odstránenie dodatočných ampersandov z reťazcov pre ovládacie prvky (& - && atď).

Jednotka Interfaces musí byť zahrnutá v súbore .lpr file pre správnu inicializáciu príslušného WidgetSet.

  • Messages->LMessages

Správy TControl pre spätné volania (callbacks) udalostí Win32 vo formáte WM_CALLBACK a ich príslušná štruktúra je väčšinou umiestnená v jednotke Messages v Delphi. V LCL tieto typy správ a ich štruktúry zvyčajne nájdete v LMessages, zvyčajne premenované z WM_ na LM_, tak sa napríklad WM_MOUSEENTER stáva LM_MOUSEENTER, a TWMMouse sa stáva TLMMouse.

  • Graphics, Controls->GraphTypes, GraphMath, Graphics, Controls

Na zjednodušenie niektorých vecí a prerušenie zložitosti krúženia medzi jednotkami, sú abstrahované niektoré typy do zdieľanej jednotky, zvanej GraphType, ktorá zahŕňa potreby, ktoré sú v Delphi umiestnené v jednotkách Graphics alebo Controls. Tak ju niekedy budete potrebovať zahrnúť, rovnako ako jednotku GraphMath, ktorá, hoci nekompatibilne s Delphi, pridáva ďalšie užitočné funkcie, ako TFloatPoint pre presnosť, užitožné rutiny pre spoluprácu s bezériovými krivkami, čiarami a oblúkmi, ako aj perťažené operátory pre použitie s typmi TPoints a TRect, ako napr.

Point1 := Point2 + Point3

či porovnanie dvoch pravouholníkov ako

if (rect1 = rect2) then ...
  • Mask->MaskEdit

Kvôli inteligentnejšej názvovej úvahe, je jednotka pre TMaskEdit nazvaná [Mask Edit] na rozdiel od tochu nešikovného Mask, ako tomu je v mnohých verziách Delphi.

  • StdCtrls->StdCtrls,Buttons

V mnohých verziách Delphi je TButton umiestnený v StdCtrls, zatiaľ čo TSpeedButton a TBitBtn sú v Buttons. Pre zjednodušenie vkladá LCL všetky tlačítka do Buttons, čo môže niekedy sťažiť konverziu, preto je vhodné túto jednotku vždy zahrnúť.

Rozdiely vo vlastnostiach a metódach Delphi -> FPC/LCL

  • v LCL je Canvas obsahnutý v TBitmap

Sémantické rozdiely

Poradie vyhodnocovania parametrov

Delphi garantuje, že všetky parametre sú vyhodnocované z ľava do prava. FPC takúto garanciu neposkytuje a môže vyhodnocovať parametre v ľubovoľnom poradí, kvôli generovaniu optimálneho kódu.

Vnorené procedúry/funkcie sú procedurálne premenné

Delphi posiela framepointer rodičovskej procedúry vždy do zásobníka a vždy volá ich opätovné odstránenie. To znamená, že ak pokiaľ nepristupujute k premenným rodičovskej procedúry, môžete poslať adresu vnorenej procedúry do inej funkcie, ktorá ich potom môže volať ako každú procedurálnu premennú.

FPC vždy posiela framepointer rodičovskej procedúry ako skrytý prvý parameter, podľa aktuálnej konvecie volania, čiže ak voláte vnorenú procedúru ako bežnú procedurálnu premennú, všetky parametre budú posunuté o jednu pozíciu.

Inými slovami, nevolajte vnorené procedúry pomocou procedurálnych premenných.

Syntaktické rozdiely

Prosím dopĺňajte túto kapitolu!

Kvôli zdedenej prísnosti FPC, budú potrebné niektoré syntaktické zmeny, napriek direktíve

{$Mode Delphi}

pracuje oveľa pomalšie ako Delphi. Kvôli tomu oveľa viac vyhovujú pravidlá syntaxe {$Mode ObjFPC} ak je to možné, vrelo doporučujem, dokonca i keď bude kód zdieľaný medzi Delphi a LCL.

Niektoré z týchto sú jednoducho lepšie praktiky kódovania a niekedy pretože mód Delphi nie je celkom presný, alebo v niektorých prípadoch kód akceptovaný Delphi nefunguje podľa očakávania s Free Pascal, hoci môže byť preložený. Tkže nakoniec nie všetky sú presne vyžadované, nasledujúci zoznam zmien vždy zvážte:

Pri priraďovaní vstupného bodu obsluhy udalosti, pridajte predponu "@"

Napríklad, môžete manuálne priradiť udalosť tlačítka

Delphi OBJFPC
begin
  if not Assigned(MyButton.OnClick) then 
    MyButton.OnClick:= SomeFunction;
    //@ nie je vyžadované
    //ďalší kód...
end;
begin
  if not Assigned(MyButton.OnClick) then
    MyButton.OnClick:= @SomeFunction;
    //@ je vyžadované
    //ďalší kód...
end;
Pri volaní procedurálnej premennej používajte túto syntax: theprocname()

V Delphi nie je rozdiel medzi výsledkom funkcie a premennou, ale v FPC je. Preto volanie function, hoci aj nemá parametre, musí obsahovať zátvorky. Napríklad

Delphi OBJFPC
With (SomeObject) do 
begin
  If Assigned(OnMyCallback) then
    OnMyCallback;
    //zátvorky nie sú vyžadované
end;
With (SomeObject) do 
begin
  If Assigned(OnMyCallback) then
    OnMyCallback();
    //zátvorky sú vyžadované
end;
Pri pristupovaní k hodnotám v ukazovateli na záznam ho musíte najprv dereferencovať

V Delphi nie je nutné dereferencovať ukazovateľ na záznam pre prístup k hodnotám v ňom, môže byť spracovaný presne ako záznam samotný, či iný objekt.

V FPC musí byť najprv dereferencovaný, napríklad:

Delphi OBJFPC
Function GetSomeValue(ARecord: PMyRecord):Integer;
begin
  If Assigned(ARecord) then
    Result:=ARecord.SomeValue
  else
    Result:=0;
end;
Function GetSomeValue(ARecord: PMyRecord):Integer;
begin
  If Assigned(ARecord) then
    Result:=ARecord^.SomeValue
  else
    Result:=0;
end;
Pri pristupovaní znakov indexovaného reťazca Vlastnosti objektu, musí byť najprv uzatvorený v zátvorkách

V Delphi je možné spracovať Vlastnosť priamo ako každú inú konštantu alebo premennú, dokonca i pre prístup k jednotlivým znakom reťazca priamo.

V FPC toto nie je možné, hlavne pre indexované vlastnosti. Namiesto toho to musí byť uzatvorené v zátvorkách , kvôli jednoznačnosti. Hoci to nie je vždypravda, je to dobrý zvyk na zváženie. Napríklad

Delphi OBJFPC
Type TSomeComponent=class(TComponent)
  //Ďalší kód...
Published
Property MyString:String index 3 read GetMyString;
//Ďalší kód...
End;
 
var
  MyChar:char;
begin
  If Length(MyString)>2 then
    //nie sú potrebné zátvorky
    MyChar:= MyString[3];
    //Ďalší kód...
end;
Type TSomeComponent=class(TComponent)
//Ďalší kód...
Published
Property MyString:String index 3 read GetMyString;
//Ďalší kód...
End;
 
var
  MyChar:char;
begin
  If Length(MyString)>2 then
    //niekedy sú potrebné zátvorky
    MyChar:= (MyString)[3];
    //Ďalší kód...
end;
Pri použití ukazovateľov s premennými alebo funkciami, musíte ich najprv pretypovať na príslušný typ

Niekedy máte v Delphi prázdnu ukazovateľovú premennú , reprezentujúcu objekt. Hoci to možno vyzerá ako komplexná situácia, je to nezvyčajne bežné, najmä vo veľkých komponentových balíčkoch, ako metóda predcdhádzajúca mnohým kruhovým includes medzi objektmi v rôznych jednotkách.

V Delphi je potom možné polať tento prázdny ukazovateľ do funkcie očakávajúcej objekt, bez trápenia sa nad jeho aktuálnym typom, v FPC ho musíte najprv pretypovať. Napríklad

Delphi OBJFPC
Unit 1
  Type 
    TSomeObject=class(TComponent)
      //Ďalší kód...
    End;
 
  Procedure DoSomething(Value: TSomeObject);
  Function GetSomeObject: TSomeObject;
 
Unit 2
  Type 
    TSomeComponent=class(TComponent)
    //Ďalší kód...
    Published SomeObject: Pointer;
    //Ďalší kód...
  End;
 
Application
var 
  MyComponent: TSomeComponent;
begin
  MyComponent.SomeObject:=GetSomeObject;
  //Ďalší kód...
  DoSomething(MyComponent.SomeObject);
end;
Unit 1
  Type 
    TSomeObject=class(TComponent)
   //Ďalší kód...
  End;
 
  Procedure DoSomething(Value: TSomeObject);
  Function GetSomeObject: TSomeObject;
 
Unit 2
  Type
    TSomeComponent=class(TComponent)
    //Ďalší kód...
    Published SomeObject: Pointer;
    //Ďalší kód...
  End;
 
Application
var 
  MyComponent: TSomeComponent;
begin
  MyComponent.SomeObject:=Pointer(GetSomeObject);
  //Ďalší kód...
  DoSomething(TSomeObject(MyComponent.SomeObject));
end;

Resources

Súbory zdrojov Delphi sú špecifické pre Win32 a nie sú kompatibilné s Lazarus, takže ich budete musieť znova vytvoriť a preložiť pomocou lazres. Lazres nájdete v podadresári lazarus/tools. Ak máte stiahnutý zdrojový kód Lazarus, najprv ho musíte preložiť:

cd lazarus/tools
make install

Pre pridanie resource do svojej aplikácie spusťte:

lazres myresource.lrs mypix.xpm anotherpix.xpm

A potom

  • pridajte jednotku LResources do sekcie Uses
  • zahrňte vami vytvorený súbor .lrs do bloku initialization
Príklad
 function TForm1.LoadGlyph(const GlyphName: String): TBitMap;
    begin
      Result:= TPixmap.Create;
      Result.LoadFromLazarusResource(GlyphName);
    end;
    //Ďalší kód...
 begin
   Speedbutton1.glyph:= LoadGlyph('mypix');
   //Ďalší kód...
 end
 
 initialization
   {$I unit1.lrs}
   {$I myresource.lrs}
 end.

Iná metóda konverzie projektu Delphi/Kylix do Lazarus

  • premenujte alebo prekopírujte všetky súbory .dfm alebo .xfm na .lfm (skoršie verzie Delphi neposkytovali textový súbor .dfm, konverzný nástroj, by mal byť v adresári \bin a možno ho použiť na konverziu .dfm)
  • premeujte súbor .dpr na .lpr
  • urobte potrebné zmeny súboru .lpr:
  1. pridajte direktívy {$mode delphi}{$H+} alebo {$mode objfpc}{H+}
  2. pridajte jednotku Interfaces do sekcie uses
  3. zakomentujte alebo zmažte direktívu {$R *.res}
  • urobte potrebné zmeny vo všetkých súboroch jednotiek .pas:
  1. pridajte direktívu {$mode delphi}{$H+} alebo {$mode objfpc}{H+}
  2. pridajte LResources a, ak má formulár tlačítka, aj Buttons do sekcie uses
  3. zakomentujte alebo zmažte direktívu {$R *.dfm} alebo {$R *.xfm}
  4. pridajte sekciu Initialization nakoniec každého súboru jednotky a pridajte do nej direktívu {$I unitname.lrs}
  • vyberte Project->New Project from file
  • zvoľte súbor .lpr
  • v okne 'Create a new project' zvoľte 'Application'
  • vybudujte projekt a zaistite ďalšie potrebné opravy, v tomto okamžiku je automaticky vygenerovaný súbor .lpi.
    • Môžete sa stretnúť so správou 'Error reading Form', ak to nastane kliknite na 'Continue Loading'
  • všetko uložte a máte projekt Lazarus :-)

Získanie nápovedy

Ak sa počas konverzie stretnete sproblémom, ktorý neviete vyriešiť, sú široké možnosti ako získať pomoc:

Documentation

Partnerská podpora

Vedomostné bázy

Existujú aj online vyhľadávacie a vedomostné bázy, ktoré tiež môžu poskytnúť významnú pomoc pre učení sa nových techník a riešení problémov:

  • Tamarack Associates poskytuej rýchly vyhľadávací stroj špecifické pre archívy Borland usenet.
  • Mer Systems Inc. poskytuje podobný vyhľadávací stroj.
  • Ďalšie zdroje informácií spolu s s možnosťou hľadania je Earl F. Glynn's Computer Lab and Reference knižnica.

Balíčkovanie a Uvoľňovanie komponentov

Vytvorenie Lazarus balíčka s vašim komponentom

Vytvorenie balíčka výrazne zjednodušuje inštaláciu Vymi skonvertovaného kódu... hlavne ak poskytujete viac ako jeden komponent. Mattias Gärtner má napísaný prehľad Balíčky Lazarus, ktorý si musíte prečítať najprv.

Dokumentácia

Cieľom tejto stránky a formátu wiki je vytvoriť profesionálnu dokumentáciu ľahko a rýchlo. wiki tiež umožňuje ihneď vidieť výsledok Vašich príspevkov a robiť zmeny v reálnom čase.

Použitie Lazarus wiki pre vytváranie vzhľadnej dokumentácie je veľmi jednoduché. Ak ste ešte wiki nepoužívali, oboznámte sa s ňou pomocou pieskoviska - cvičnej oblasti.

Tvorba Code Release stránky

Stránka Code Release obsahuje informácie o vašom komponente, ktoré má prípadný sťahovač vedieť, ako licencia, zamýšľaná polatforma, stav (alpha, beta, stable...), odkiaľ sťahovať, kto ho napísal, či je odstupná podpora, atď.

Pre vytvorenie svojej stránky Code Release vo svojom prehliadači:

  • prejdite na Release new component
  • napíšte meno komponentu do editačného poľa a kliknite na Create Article
  • vyplňte šablónu a stlačte uložiť.
  • upravte stránku Components and Code examples pridaním odkazu na svoju novo vytvorenú stránku do sekcie "Uvoľnené komponenty" a ulože upravenú stránku.

Poslanie komponentu

Ak ste technik uvoľňovania (release technician) projektu, uploadnite svoj komponent do SourceForge File Release System a pridajte ho na zoznam uvoľnených balíčkov. Inak ho pošlite niektorému z administrátorov projektu (Tom Lisjac alebo Vincent Snijders) a budep ridaný do úložiska. Pred uploadom do SourceForge, majte vytvorenú stránku Code Release s popisom komponentu, podľa predchádzajúceho popisu.

Ak si myslíte, že potrebujete pokračovať s vývojom komponentu, môžeme ho tiež uložiť do SVN, aby ste k nemu mali stále prístup. Ak nás unavia úpravy z poslaných patcheov, poskytneme Vám prístup so zápisom do SVN, aby ste mohli odovzdávať svoje patche sami. Detaily nájdete v Použitie SVN úložiska Lazarus.

Contributors and Changes

This page has been converted from the epikwiki version.

  • Initial version by Tom Lisjac and Mattias Gärtner - 9/22/2003 VlxAdmin
  • Moved Getting help from the main page. T. Lisjac - 9/24/2003 VlxAdmin
  • Added documentation templates, procedure and links. 9/25/2003 VlxAdmin
  • LCLLinux was renamed to LCLIntf, Jesus Reyes, 9/27/2003
  • added more information on Unit changes, AndrewJohnson 9/27/2003
  • Updated Syntax differences, including some examples, AndrewJohnson 9/27/2003
  • FPC 1.0.x doesn't support interfaces, Vincent Snijders 9/28/2003
  • Fixed some of the examples per new WikiWord definition, 9/28/2003 VlxAdmin
  • Made code more consistant to remove last accidental Pascal WikiWord definitions, AndrewJohnson 9/27/2003
  • Use tables for code examples for nice blocks, and easy side by side view of Delphi->FPC differences, AndrewJohnson 10/17/2003
  • Use pascal stylesheet to make example code more readable, AndrewJohnson 10/18/2003