Sign in Join
Wiki copytemporary

Code Conversion Guide/sk: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Code Conversion Guide/sk

OldNewLine
1+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.
2+
3+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 For Delphi Users/sk|Lazarus pre používateľov Delphi]], v ktorej nájdete popis niektorých funkčných rozdielov.
4+
5+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.
6+
7+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.
8+
9+## Výber komponentov alebo knižnice pre konverziu
10+
11+### Kde hľadať kód na konverziu
12+
13+Na nete je dostupného veľa kódu, ktorý môže byť konvertovaný pre použitie s FreePascal a Lazarus. Tu je [[Page Of Code Sites|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](http://sourceforge.net/users/tpsfadmin/).
14+
15+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\].
16+
17+### Licencovanie
18+
19+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.
20+
21+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.
22+
23+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](http://www.opensource.org/docs/definition.php). 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".
24+
25+### Závislosti
26+
27+Ď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.
28+
29+### Poznámky k prekladaču
30+
31+Viz:
32+
33+- [Známe problémy](http://www.freepascal.org/probs.html)
34+- [Neopravené chyby](http://www.freepascal.org/bugs/db.php3?statusfield=Unfixed)
35+
36+### Poznámky k platforme a OS
37+
38+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!
39+
40+## Konverzia
41+
42+### Nastavenie IDE Lazarus pre konverziu projektu
43+
44+#### Vytvorenie skúšobného projektu
45+
46+- Umiestnite konvertovaný kód do podadresára (napr: convertdir)
47+- Spusťte Lazarus
48+- **File-\>Save All** do adresára convertdir. Zmysluplné mená pre Project a predvolenú jednotku sú voliteľné.
49+- Otvorte "základnú" konvertovanú jednotku v convertdir
50+- Pridajte ju do projektu: **Project-\>Add Active Unit to Project**
51+- Spusťte **Tools-\>Quick Syntax Check** alebo **Run-\>Build All**, čím začnete.
52+
53+#### Na čo treba dať pozor
54+
55+- 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**.
56+
57+#### Zdrojové kódy Delphi VCL a Kylix CLX v Lazarus
58+
59+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**.
60+
61+### Problémy konverzie a ich riešenie
62+
63+#### Ekvivalenty Delphi/Kylix súborov v Lazarus
64+
65+<table>
66+<thead>
67+<tr>
68+<th><p>Delphi / Kylix</p></th>
69+<th><p>Popis</p></th>
70+<th><p>Lazarus</p></th>
71+<th><p>Popis</p></th>
72+</tr>
73+</thead>
74+<tbody>
75+<tr>
76+<td data-valign="top"><p>.pas</p>
77+<p>.dfm/.xfm,</p>
78+<p>.dcu/.dpu,</p>
79+<p>.dpr(main project file),</p>
80+<p>.res,</p>
81+<p>.dof/.kof</p>
82+<p>---</p>
83+<p>---</p>
84+<p>---</p></td>
85+<td data-valign="top"><p>súbor zdrojového kódu Delphi,</p>
86+<p>formulár Delphi,</p>
87+<p>preložená jednotka Delphi,</p>
88+<p>projekt Delphi,</p>
89+<p>Resource súbor Windows,</p>
90+<p>súbor volieb Delphi</p></td>
91+<td data-valign="top"><p>.pas, .pp .lfm,</p>
92+<p>.o,</p>
93+<p>.lpr</p>
94+<p>---</p>
95+<p>---</p>
96+<p>.lrs,</p>
97+<p>.lpi(hlavný súbor projketu),</p>
98+<p>.ppu</p></td>
99+<td data-valign="top"><p>súbor jednotky Pascal,</p>
100+<p>dátový súbor formulára,</p>
101+<p>súbor preloženej jednotky,</p>
102+<p>súbor projektu,</p>
103+<p>Resource súbor,</p>
104+<p>súbor volieb projektu,</p>
105+<p>Resource súbor Lazarus,</p>
106+<p>informačný súbor projektu Lazarus,</p>
107+<p>popisný súbor jednotky FPC</p></td>
108+</tr>
109+</tbody>
110+</table>
111+
112+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.
113+
114+#### Konverzia projektov/formulárov/jednotiek Delphi do Lazarus
115+
116+Premenujte alebo prekopírujte súbor .dpr na súbor .lpr. Zakomentujte alebo odstráňte direktívu
117+
118+`{$R *.res}`
119+
120+a pridajte direktívu
121+
122+`{$mode delphi}{$H+}`
123+
124+alebo
125+
126+`{$mode objfpc}{$H+}`
127+
128+do súboru .lpr.
129+
130+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.
131+
132+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.
133+
134+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:
135+
136+1. upraví veľkosť písmen v sekciách uses a iclude.
137+2. konvertuje súbory .dfm na súbory .lfm (bez kontroly obsahu, len formát)
138+3. vytvorí prázdny súbor .lrs (obsah bude pridaný neskôr)
139+4. pridá direktívu
140+
141+`{$mode delphi}`
142+
143+1. nahradí jednotku Windows jednotkou LCLIntf
144+2. ak je to potrebné, pridá jednotku LResources
145+3. odoberie jednotku Variants
146+4. odoberie direktívu
147+
148+`{$R *.dfm}`
149+
150+1. pridá do sekcie initialization direktívu
151+
152+`{$i unit.lrs}`
153+
154+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).
155+
156+#### Výber správneho módu prekladača
157+
158+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:
159+
160+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í.
161+
162+Väčšinu jednotiek Delphi môžete jednoducho preložiť pomocou [[Free Pascal]] pridaním tejto konštrukcie, hneď za meno jednotky
163+
164+`{$IFDEF FPC}`\
165+`  {$MODE DELPHI}`\
166+`{$ENDIF}`
167+
168+Ďalšie podrobnosti o módoch [[Free Pascal]] nájdete v [dokumentácii Free Pascal](http://www.freepascal.org/docs-html/prog/progap4.html#progse62.html).
169+
170+#### Viac-platformové poznámky
171+
172+- 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.
173+- Neodkazujte na špecifické pamäťové miesto, ako dátová oblasť BIOS. Zistite čo kód potrebuje a skúste nájsť cezplatformovú alternatívu.
174+- 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é.
175+- Ak potrebujete nejaký kód, špecifický pre OS, používajte **IFDEF**. Viz zoznam makier neskôr.
176+
177+#### Užitočné premenné prekladača
178+
179+Pre písanie kódu, ktorý sa má správať na rôznych systémoch rôzne, môžete použiť direktívy
180+
181+`{$IFDEF Name}`
182+
183+Pričom Name môže byť
184+
185+- **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.
186+
187+`{$IfDef LCL}`
188+
189+- **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.
190+
191+`{$IfDef FPC}`
192+
193+- **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.
194+
195+`{$IfDef LCLGtk}`\
196+`{$IfDef LCLWin32}`\
197+`{$IfDef LCLQt}`\
198+`... `
199+
200+- **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ží.
201+
202+`{$IfDef Unix}`\
203+`{$IfDef Win32}`\
204+`...`
205+
206+
207+Pre prácu v Kylix použite nasledujúcu konštrukciu:
208+
209+`{$IfDef Linux}`\
210+`  {$Define Unix}`\
211+`{$EndIf}`
212+
213+- **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.
214+
215+`{$IfDef ENDIAN_BIG}`
216+
217+Ďalšie podrobnosti nájdete v [dokumentácii Free Pascal](http://www.freepascal.org/docs-html/prog/prog.html#QQ2-23-21).
218+
219+#### Podpora 32bit/64bit
220+
221+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:
222+
223+- **PtrInt** je 32bit Integer so znamienkom na 32bit platformách a 64bit Integer sp znamienkom na 64bit platformách.
224+- **PtrUInt**, je rovnaké ako predchádzajúce s tým rozdielom, že sa jedná o Integer bez znamienka.
225+
226+Pre kód, ktorý má pracovať s Delphi a FPC použite:
227+
228+` {$IFNDEF FPC}`\
229+` type`\
230+`   PtrInt = integer;`\
231+`   PtrUInt = cardinal;`\
232+` {$ENDIF}`
233+
234+Nahrďte všetky
235+
236+`integer(SomePointerOrObject)`
237+
238+týmto
239+
240+`PtrInt(SomePointerOrObject)`
241+
242+#### Hľadanie chýbajúcich identifikátorov
243+
244+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.
245+
246+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):
247+
248+` grep -in ' tbutton =' lcl/*`
249+
250+#### Rozdiely v dôležitých jednotkách Lazarus a Delphi
251+
252+Prosím dopĺňajte túto časť!;
253+
254+- Windows -\> LCLIntf, LCLType, LCLProc, VCLGlobals, ...
255+
256+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ď).
257+
258+Jednotka **Interfaces** musí byť zahrnutá v súbore .lpr file pre správnu inicializáciu príslušného WidgetSet.
259+
260+- Messages-\>LMessages
261+
262+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**.
263+
264+- Graphics, Controls-\>GraphTypes, GraphMath, Graphics, Controls
265+
266+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.
267+
268+`Point1 := Point2 + Point3`
269+
270+či porovnanie dvoch pravouholníkov ako
271+
272+`if (rect1 = rect2) then ...`
273+
274+- Mask-\>MaskEdit
275+
276+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.
277+
278+- StdCtrls-\>StdCtrls,Buttons
279+
280+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úť.
281+
282+#### Rozdiely vo vlastnostiach a metódach Delphi -\> FPC/LCL
283+
284+- v LCL je Canvas obsahnutý v TBitmap
285+
286+#### Sémantické rozdiely
287+
288+##### Poradie vyhodnocovania parametrov
289+
290+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.
291+
292+##### Vnorené procedúry/funkcie sú procedurálne premenné
293+
294+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ú.
295+
296+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.
297+
298+Inými slovami, nevolajte vnorené procedúry pomocou procedurálnych premenných.
299+
300+#### Syntaktické rozdiely
301+
302+Prosím dopĺňajte túto kapitolu!
303+
304+Kvôli zdedenej prísnosti FPC, budú potrebné niektoré syntaktické zmeny, napriek direktíve
305+
306+`{$Mode Delphi}`
307+
308+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.
309+
310+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:
311+
312+##### Pri priraďovaní vstupného bodu obsluhy udalosti, pridajte predponu "@"
313+
314+Napríklad, môžete manuálne priradiť udalosť tlačítka
315+
316+<table>
317+<thead>
318+<tr>
319+<th><p>Delphi</p></th>
320+<th><p>OBJFPC</p></th>
321+</tr>
322+</thead>
323+<tbody>
324+<tr>
325+<td><div class="sourceCode" id="cb1"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
326+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="kw">if</span> <span class="kw">not</span> Assigned(MyButton.OnClick) <span class="kw">then</span> </span>
327+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> MyButton.OnClick:= SomeFunction;</span>
328+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> <span class="co">//@ nie je vyžadované</span></span>
329+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//ďalší kód...</span></span>
330+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
331+<td><div class="sourceCode" id="cb2"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
332+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> <span class="kw">if</span> <span class="kw">not</span> Assigned(MyButton.OnClick) <span class="kw">then</span></span>
333+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> MyButton.OnClick:= @SomeFunction;</span>
334+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="co">//@ je vyžadované</span></span>
335+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//ďalší kód...</span></span>
336+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
337+</tr>
338+</tbody>
339+</table>
340+
341+##### Pri volaní procedurálnej premennej používajte túto syntax: theprocname()
342+
343+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
344+
345+<table>
346+<thead>
347+<tr>
348+<th><p>Delphi</p></th>
349+<th><p>OBJFPC</p></th>
350+</tr>
351+</thead>
352+<tbody>
353+<tr>
354+<td><div class="sourceCode" id="cb1"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">With</span> (SomeObject) <span class="kw">do</span> </span>
355+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
356+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Assigned(OnMyCallback) <span class="kw">then</span></span>
357+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> OnMyCallback;</span>
358+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//zátvorky nie sú vyžadované</span></span>
359+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
360+<td><div class="sourceCode" id="cb2"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">With</span> (SomeObject) <span class="kw">do</span> </span>
361+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
362+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Assigned(OnMyCallback) <span class="kw">then</span></span>
363+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> OnMyCallback();</span>
364+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//zátvorky sú vyžadované</span></span>
365+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
366+</tr>
367+</tbody>
368+</table>
369+
370+##### Pri pristupovaní k hodnotám v ukazovateli na záznam ho musíte najprv dereferencovať
371+
372+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.
373+
374+V FPC musí byť najprv dereferencovaný, napríklad:
375+
376+<table>
377+<thead>
378+<tr>
379+<th><p>Delphi</p></th>
380+<th><p>OBJFPC</p></th>
381+</tr>
382+</thead>
383+<tbody>
384+<tr>
385+<td><div class="sourceCode" id="cb1"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Function</span> GetSomeValue(ARecord: PMyRecord):<span class="dt">Integer</span>;</span>
386+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
387+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Assigned(ARecord) <span class="kw">then</span></span>
388+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> Result:=ARecord.SomeValue</span>
389+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">else</span></span>
390+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a> Result:=<span class="dv">0</span>;</span>
391+<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
392+<td><div class="sourceCode" id="cb2"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Function</span> GetSomeValue(ARecord: PMyRecord):<span class="dt">Integer</span>;</span>
393+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
394+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Assigned(ARecord) <span class="kw">then</span></span>
395+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> Result:=ARecord^.SomeValue</span>
396+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">else</span></span>
397+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> Result:=<span class="dv">0</span>;</span>
398+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
399+</tr>
400+</tbody>
401+</table>
402+
403+##### Pri pristupovaní znakov indexovaného reťazca Vlastnosti objektu, musí byť najprv uzatvorený v zátvorkách
404+
405+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.
406+
407+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
408+
409+<table>
410+<thead>
411+<tr>
412+<th><p>Delphi</p></th>
413+<th><p>OBJFPC</p></th>
414+</tr>
415+</thead>
416+<tbody>
417+<tr>
418+<td><div class="sourceCode" id="cb1"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Type</span> TSomeComponent=<span class="kw">class</span>(TComponent)</span>
419+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
420+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="kw">Published</span></span>
421+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="kw">Property</span> MyString:<span class="dt">String</span> index <span class="dv">3</span> <span class="kw">read</span> GetMyString;</span>
422+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="co">//Ďalší kód...</span></span>
423+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">End</span>;</span>
424+<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a></span>
425+<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="kw">var</span></span>
426+<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a> MyChar:<span class="dt">char</span>;</span>
427+<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
428+<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Length(MyString)&gt;<span class="dv">2</span> <span class="kw">then</span></span>
429+<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> <span class="co">//nie sú potrebné zátvorky</span></span>
430+<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> MyChar:= MyString[<span class="dv">3</span>];</span>
431+<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
432+<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
433+<td><div class="sourceCode" id="cb2"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Type</span> TSomeComponent=<span class="kw">class</span>(TComponent)</span>
434+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="co">//Ďalší kód...</span></span>
435+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="kw">Published</span></span>
436+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="kw">Property</span> MyString:<span class="dt">String</span> index <span class="dv">3</span> <span class="kw">read</span> GetMyString;</span>
437+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a><span class="co">//Ďalší kód...</span></span>
438+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="kw">End</span>;</span>
439+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a></span>
440+<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a><span class="kw">var</span></span>
441+<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> MyChar:<span class="dt">char</span>;</span>
442+<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
443+<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">If</span> Length(MyString)&gt;<span class="dv">2</span> <span class="kw">then</span></span>
444+<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> <span class="co">//niekedy sú potrebné zátvorky</span></span>
445+<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> MyChar:= (MyString)[<span class="dv">3</span>];</span>
446+<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
447+<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
448+</tr>
449+</tbody>
450+</table>
451+
452+##### Pri použití ukazovateľov s premennými alebo funkciami, musíte ich najprv pretypovať na príslušný typ
453+
454+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.
455+
456+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
457+
458+<table>
459+<thead>
460+<tr>
461+<th><p>Delphi</p></th>
462+<th><p>OBJFPC</p></th>
463+</tr>
464+</thead>
465+<tbody>
466+<tr>
467+<td><div class="sourceCode" id="cb1"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Unit</span> <span class="dv">1</span></span>
468+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="kw">Type</span> </span>
469+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> TSomeObject=<span class="kw">class</span>(TComponent)</span>
470+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
471+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">End</span>;</span>
472+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a></span>
473+<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">Procedure</span> DoSomething(Value: TSomeObject);</span>
474+<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> <span class="kw">Function</span> GetSomeObject: TSomeObject;</span>
475+<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a></span>
476+<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="kw">Unit</span> <span class="dv">2</span></span>
477+<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">Type</span> </span>
478+<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> TSomeComponent=<span class="kw">class</span>(TComponent)</span>
479+<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
480+<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">Published</span> SomeObject: <span class="dt">Pointer</span>;</span>
481+<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
482+<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a> <span class="kw">End</span>;</span>
483+<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a></span>
484+<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a>Application</span>
485+<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a><span class="kw">var</span> </span>
486+<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a> MyComponent: TSomeComponent;</span>
487+<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
488+<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a> MyComponent.SomeObject:=GetSomeObject;</span>
489+<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
490+<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a> DoSomething(MyComponent.SomeObject);</span>
491+<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
492+<td><div class="sourceCode" id="cb2"><pre class="sourceCode pascal"><code class="sourceCode pascal"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">Unit</span> <span class="dv">1</span></span>
493+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> <span class="kw">Type</span> </span>
494+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> TSomeObject=<span class="kw">class</span>(TComponent)</span>
495+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
496+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">End</span>;</span>
497+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a></span>
498+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">Procedure</span> DoSomething(Value: TSomeObject);</span>
499+<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="kw">Function</span> GetSomeObject: TSomeObject;</span>
500+<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a></span>
501+<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a><span class="kw">Unit</span> <span class="dv">2</span></span>
502+<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">Type</span></span>
503+<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> TSomeComponent=<span class="kw">class</span>(TComponent)</span>
504+<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
505+<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">Published</span> SomeObject: <span class="dt">Pointer</span>;</span>
506+<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
507+<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> <span class="kw">End</span>;</span>
508+<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a></span>
509+<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a>Application</span>
510+<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a><span class="kw">var</span> </span>
511+<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> MyComponent: TSomeComponent;</span>
512+<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
513+<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> MyComponent.SomeObject:=<span class="dt">Pointer</span>(GetSomeObject);</span>
514+<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a> <span class="co">//Ďalší kód...</span></span>
515+<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> DoSomething(TSomeObject(MyComponent.SomeObject));</span>
516+<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
517+</tr>
518+</tbody>
519+</table>
520+
521+#### Resources
522+
523+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ť:
524+
525+`cd lazarus/tools`\
526+`make install`
527+
528+Pre pridanie resource do svojej aplikácie spusťte:
529+
530+`lazres myresource.lrs mypix.xpm anotherpix.xpm`
531+
532+A potom
533+
534+- pridajte jednotku **LResources** do sekcie **Uses**
535+- zahrňte vami vytvorený súbor .lrs do bloku *initialization*
536+
537+Príklad
538+
539+``` pascal
540+ function TForm1.LoadGlyph(const GlyphName: String): TBitMap;
541+ begin
542+ Result:= TPixmap.Create;
543+ Result.LoadFromLazarusResource(GlyphName);
544+ end;
545+ //Ďalší kód...
546+ begin
547+ Speedbutton1.glyph:= LoadGlyph('mypix');
548+ //Ďalší kód...
549+ end
550+
551+ initialization
552+ {$I unit1.lrs}
553+ {$I myresource.lrs}
554+ end.
555+```
556+
557+### Iná metóda konverzie projektu Delphi/Kylix do Lazarus
558+
559+- 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)
560+- premeujte súbor .dpr na **.lpr**
561+- urobte potrebné zmeny súboru **.lpr**:
562+
563+1. pridajte direktívy **{\$mode delphi}{\$H+}** alebo **{\$mode objfpc}{H+}**
564+2. pridajte jednotku **Interfaces** do sekcie uses
565+3. zakomentujte alebo zmažte direktívu {\$R *.res}
566+
567+- urobte potrebné zmeny vo všetkých súboroch jednotiek **.pas**:
568+
569+1. pridajte direktívu **{\$mode delphi}{\$H+}** alebo **{\$mode objfpc}{H+}**
570+2. pridajte **LResources** a, ak má formulár tlačítka, aj **Buttons** do sekcie uses
571+3. zakomentujte alebo zmažte direktívu {\$R *.dfm} alebo {\$R *.xfm}
572+4. pridajte sekciu **Initialization** nakoniec každého súboru jednotky a pridajte do nej direktívu **{\$I unitname.lrs}**
573+
574+- vyberte **Project-\>New Project from file**
575+- zvoľte súbor **.lpr**
576+- v okne 'Create a new project' zvoľte 'Application'
577+- vybudujte projekt a zaistite ďalšie potrebné opravy, v tomto okamžiku je automaticky vygenerovaný súbor .lpi.
578+ - Môžete sa stretnúť so správou 'Error reading Form', ak to nastane kliknite na 'Continue Loading'
579+- všetko uložte a máte projekt Lazarus :-)
580+
581+## Získanie nápovedy
582+
583+Ak sa počas konverzie stretnete sproblémom, ktorý neviete vyriešiť, sú široké možnosti ako získať pomoc:
584+
585+### Documentation
586+
587+- Pre čisto Object Pascal a FPC problémy, jen ajlepšie začať s [Dokumentáciou Free Pascal](http://www.freepascal.org/docs-html/) od Michaëla Van Canneyta a Floriana Klämpfla.
588+- Pre problémy viac orientované na Lazarus, hľadajte aj v [[Main Page|Dokumentácii projektu Lazarus]].
589+
590+### Partnerská podpora
591+
592+- Mailing listy - otázky môžete posielať do niektorého z [mailing listov pre Free Pascal Compiler](http://www.freepascal.org/maillist.html) alebo [FPC fór](http://community.freepascal.org:10000/bboard/), kde je prihlásených veľa odborníkov.
593+- IRC - na irc.freenode.net: [\#fpc](irc://irc.freenode.net/fpc) rpe FPC alebo [\#lazarus-ide](irc://irc.freenode.net/lazarus-ide) pre Lazarus
594+
595+### Vedomostné bázy
596+
597+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:
598+
599+- Tamarack Associates poskytuej rýchly \[ <http://codenewsfast.com/> vyhľadávací\] stroj špecifické pre archívy Borland usenet.
600+- Mer Systems Inc. poskytuje podobný vyhľadávací [stroj](http://www.mers.com/searchsite.html).
601+- Ďalšie zdroje informácií spolu s s možnosťou [hľadania](http://www.efg2.com/Lab/search.htm) je Earl F. Glynn's Computer Lab and Reference [knižnica](http://www.efg2.com/).
602+
603+## Balíčkovanie a Uvoľňovanie komponentov
604+
605+### Vytvorenie Lazarus balíčka s vašim komponentom
606+
607+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 [[Lazarus Packages/sk|Balíčky Lazarus]], ktorý si musíte prečítať najprv.
608+
609+### Dokumentácia
610+
611+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.
612+
613+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 [[Sand Box/sk|pieskoviska]] - cvičnej oblasti.
614+
615+### Tvorba Code Release stránky
616+
617+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ď.
618+
619+Pre vytvorenie svojej stránky Code Release vo svojom prehliadači:
620+
621+- prejdite na [[Release new component]]
622+- napíšte meno komponentu do editačného poľa a kliknite na *Create Article*
623+- vyplňte šablónu a stlačte uložiť.
624+- 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.
625+
626+### Poslanie komponentu
627+
628+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.
629+
630+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 [[Using the Lazarus-ccr SVN repository|Použitie SVN úložiska Lazarus]].
631+
632+## Contributors and Changes
633+
634+This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=CodeConversionGuide).
635+
636+- Initial version by Tom Lisjac and Mattias Gärtner - 9/22/2003 VlxAdmin
637+- Moved Getting help from the main page. T. Lisjac - 9/24/2003 VlxAdmin
638+- Added documentation templates, procedure and links. 9/25/2003 VlxAdmin
639+- LCLLinux was renamed to LCLIntf, Jesus Reyes, 9/27/2003
640+- added more information on Unit changes, [AndrewJohnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 9/27/2003
641+- Updated Syntax differences, including some examples, [AndrewJohnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 9/27/2003
642+- FPC 1.0.x doesn't support interfaces, Vincent Snijders 9/28/2003
643+- Fixed some of the examples per new WikiWord definition, 9/28/2003 VlxAdmin
644+- Made code more consistant to remove last accidental Pascal WikiWord definitions, [AndrewJohnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 9/27/2003
645+- Use tables for code examples for nice blocks, and easy side by side view of Delphi-\>FPC differences, [AndrewJohnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/17/2003
646+- Use pascal stylesheet to make example code more readable, [AndrewJohnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/18/2003
647+
648+---
649+*From the Free Pascal wiki, page "Code Conversion Guide/sk", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history