Sign in Join
Wiki copytemporary

Lazarus For Delphi Users/sk: what changed

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

OldNewLine
11Tento článok je pre tých, ktorí sú zainteresovaní v Lazarus a už poznajú Delphi. Popisuje rozdiely medzi týmito dvomi prostrediami.
22
33## Delphi -\> Lazarus
44
55Lazarus je Rapid Application Development (RAD) nástroj ako Delphi. To znamená, že prichádza s knižnicou vizuálnych komponentov a IDE. Knižnica komponentov Lazarus (LCL) sa veľmi podobá Delphi VCL. Väčšina jednotiek, tried a vlastností má rovnaké meno a funkciu, čím je prechod jednoduchý. Ale Lazarus nie je 'open source Delphi klon', tak neočakávajte 100% kompatibilitu.
66
77### Najväčšie rozdiely
88
99Lazarus je úplný open source, je napísaný bez závislosti na platforme a používa silný prekladač FreePascal (FPC). FPC beží na viac ako 15 platformách, ale nie všetky balíčky a knižnice sú prenesené, tak Lazarus práve beží pod Linux, Free/Open/NetBSD, Mac OS X a win32.
1010
1111Lazarus zatiaľ nie je kompletný, ako aj tento text. Stále hľadáme nových vývojárov, porterov, pisateľov dokumentácie, ... .
1212
1313### Prvá vec pri pokuse o konverziu projektu z Delphi
1414
1515Spustite Lazarus, choďte do **Tools** a potom **Convert Delphi Project to Lazarus Project**. Toto síce nespraví úplne všetko, je to však najlepší spôsob ako začať. Všimnite si, že pomôcky na konverziu sú v Lazaruse jednosmerné, a neobsahujú spätnú konverziu do Delphi. Na tento účel môžete použiť [XDev Toolkit](http://wiki.lazarus.freepascal.org/XDev_Toolkit).
1616
1717### Podpora Unicode
1818
1919Delphi až do verzie 2007 nepodporovalo Unicode, a používalo štandardné ANSI kódovanie Windows. Od verzie 2008 Delphi podporuje Unicode prostredníctvom stringov UTF-16.
2020
2121Lazarus však na druhej strane od začiatku podporuje Unicode, a to prostredníctvom stringov UTF-8. Viac informácií: [[LCL Unicode Support]].
2222
2323## Delphi IDE -\> Lazarus IDE
2424
2525### Projekty
2626
2727Základným súborom aplikácie Delphi je súbor .dpr. Základným súborom projektu Lazarus je súbor .lpi (Lazarus Project Information). Súbor .dpr je základný zdrojový kód programu a Delphi IDE v ňom uchováva niektoré informácie o direktívach prekladača a jednotkách. Aplikácia Lazarus má tiež súbor .lpr, ktorý je súborom so základným zdrojovým kódom, ale všetky ostatné informácie sú uchovávané v súbore .lpi. Teda, dôležitým súborom je súbor .lpi.
2828
2929Napríklad:
3030
3131Delphi ukladá cesty k unitám do súboru .dpr. Napr.: unit1 in 'path/Unit1.pas'. Tieto 'in' cesty sú špecifické pre Delphi a Lazarus IDE ich ignoruje. Nepoužívajte ich - namiesto nich použite nastavenie kompilátora.
3232
3333Delphi ukladá nastavenie kompilátora do súbora .dpr., napr. {\$APPTYPE CONSOLE}. Tieto nastavenia sú tiež ignorované Lazarus IDE. Nepoužívajte ich - namiesto nich použite nastavenie kompilátora (Compiler Options).
3434
3535Jedno dôležité pravidlo: **Vždy existuje projekt!!!** Jediný spôsob ako zatvoriť projekt je skončiť Lazarus alebo otvoriť iný projekt. To je preto, že projekt Lazarus je tiež "session". To znamená, že aktuálne nastavenia editora sú uchovávané v súbore .lpi a sú obnovené, keď otvoríte projekt. Napríklad: ladíte aplikáciu, nastavíte veľa ladiacich bodov a záložiek. Môžete projekt uložiť a zatvoriť Lazarus alebo otvoriť iný, ale keď znova otvoríte pôvodný, dokonca i na inom počítači, všetky vaše ladiace body, záložky, otvorené súbory, pozície kurzora, histórie skokov, ... sú obnovené.
3636
3737### Editor zdrojového kódu
3838
3939(Source Editor) Takmer všetky klávesy a klávesové skratky môžu byť nastavené v Tools -\> Options -\> Editor -\> Key Mappings
4040
4141IDE Lazarus má veľa nástrojov pre zdrojový kód. Mnohé z nich sú veľmi podobné tým v Delphi. Ale je tu jeden veľký rozdiel: Lazarus nepoužíva prekladač na získanie informácií o kóde, ale analyzuje priamo zdrojový kód, čo má veľa výhod:
4242
4343
4444Editor zdrojového kódu pracuje s komentármi. V Delphi sú komentáre len medzerou v kóde, funkcie kódu tu nepracujú a pri automatickom vložení kódu, sú vaše komentáre posunuté. Pod Lazarus môžete hľadať deklarácie dokonca v kóde komentára. Aj keď toto nie je úplne spoľahlivé, často to pracuje. A keď vložíte nový kód, používa IDE nejakú heuristiku na uchovanie komentára a kódu spolu. Napríklad: nebude rozdelený riadok "c: char; // comment".
4545
4646Dokončovanie kódu Delphi (Ctrl+Space) je pod Lazarus nazvané **Identifier Completion**. Termín Lazarus **Code Completion** je funkcia, ktorá kombinuje **Automatic Class Completion** (rovnaká ako v Delphi), **Local Variable Completion** a **Event Assignment Completion**. Tieto všetky sú vyvolané pomocou Ctrl+Shift+C a IDE určuje podľa pozície kurzora, ktorá funkcia bude použitá.
4747
4848#### Dokončovanie lokálnych premenných
4949
5050(Local Variable Completion) Predstavte si, že ste práve vytvorili novú metódu a napísali príkaz "i:=3;"
5151
5252``` pascal
5353procedure
5454 TForm1.DoSomething;
5555 begin
5656 i := 3;
5757 end;
5858```
5959
6060Umiestnite kurzor nad identifikátor "i" a stlačte Ctrl+Shift+C, čím získate:
6161
6262``` pascal
6363procedure
6464 TForm1.DoSomething;
6565 var
6666 i: Integer;
6767 begin
6868 i:= 3;
6969 end;
7070```
7171
7272#### Dokončovanie priradenia udalostí
7373
7474(Event Assignment Completion) Príjemná funkcia Inšpektora objektov je automatické vytváranie metód. To isté môžete urobiť v editore zdrojového kódu. Napríklad:
7575
7676
7777Button1.OnClick:=
7878
7979Umiestnite kurzor za operátor priradenia ":=" a stlačte Ctrl+Shift+C.
8080
8181#### Príklad doplňovania volaných procedúr
8282
8383Predstavte si, že ste práve napísali príkaz 'DoSomething(Width);'
8484
8585``` pascal
8686procedure SomeProcedure;
8787var
8888 Width: integer;
8989begin
9090 Width:=3;
9191 DoSomething(Width);
9292end;
9393```
9494
9595Umiestnite kurzor na identifikátor DoSomething a stlačte Ctrl-Shift-C. Dostanete:
9696
9797``` pascal
9898procedure DoSomething(aWidth: LongInt);
9999begin
100100
101101end;
102102
103103procedure SomeProcedure;
104104var
105105 Width: integer;
106106begin
107107 Width:=3;
108108 DoSomething(Width);
109109end;
110110```
111111
112112#### Dokončovanie slov
113113
114114(Word Completion Ctrl+W) Táto funkcia je odstupná po stlačení Ctrl+W. Pracuje podobne ako "Identifier Completion", ale nepracuje len s identifikátormi Pascalu, ale so všetkými slovami. Dovolí vám vybrať zo všetkých slov zo všetkých otvorených súborov začínajúcich rovnakými písmenami.
115115
116116#### Include súborov
117117
118118Delphi túto podporu nemá a tak ste pravdepodobne veľa takýchto súborov nevytvorili. Ale include súbory majú veľkú výhodu: Dovoľujú písanie na platforme (ne)závislý kód bez komplikovanosti vášho kódu s direktívami IFDEF.
119119
120120Napríklad: Method jumping, Class Completion, Find declaration, .. všetky pracujú s include súbormi.
121121
122122Pre nastavenie dokončovania kódu je k dispozícii veľa nastavení.
123123
124124### Designer
125125
126126\- Guidelines
127127
128128#### Object Inspector
129129
130130Ako v IDE Delphi aj v IDE Lazarus je Inšpektor objektov použitý na úpravu vlastností komponentov, priradenie udalostí atď. Nasledujú niektoré malé rozdiely, na ktoré treba pri použití pamätať:
131131
1321321. Počnúc Delphi 5, je Object Treeview, ktorý môže byť použitý na navigáciu a výber objektov podľa ich hierarchie, ako doplnok tradičného rozbaľovacieho zoznamu v Inšpektore objektov. V Lazarus je toto súčasťou Inšpektora objektov a jeho použitím namiesto predvoleného rozbaľovacieho zoznamu môžete vybrať jeho ne/použitie pomocou kontextového menu "Show Component Tree"
1331332. V Delphi dvojité kliknutie na prázdnu udalosť ju automaticky vytvorí a otvorí Editor zdrojového kódu na jej pozícii, v Lazarus je tlačítko napravo od rozbaľovacieho zoznamu, ktoré vykoná to isté.
1341343. V Delphi musíte ručne zmazať meno udalosti v políčku, aby ste odstránili priradenie, v Lazarus zvoľte v zozname "(None)".
1351354. Podobne ako pri udalostiach, dvojitým kliknutím na regulárne vlastnosti (napr. Boolean) nezmení ich hodnotu, ale musíte ju zvoliť zo zoznamu a na otvorenie ich predvoleného editora, musíte kliknúť na tlačítko vpravo od rozbaľovacieho zoznamu.
136136
137137#### Balíčky
138138
139139V Lazarus nemôžete inštalovať balíčky Delphi, pretože potrebujú čary prekladača Delphi. Preto pre Lazarus potrebujete špeciálne vytvorené balíčky.
140140
141141Vytvorte nový balíček, uložte ho v zdrojovom adresári balíčkov (bežne rovnaký adresár súboru .dpk), pridajte LCL ako vyžadovaný balíček a nakoniec pridajte súbory .pas. Teraz ho môžete nainštalovať alebo použiť vo svojom projekte. Medzi balíčkami Lazarus a Delphi sú rozdiely, prečítajte si prosím docs/Packages.txt v zdrojovom kóde Lazarus. - viď docs/Packages.txt v zdrojovom kóde Lazarus.
142142
143143### VCL -\> LCL
144144
145145Hoci obe, VCL aj LCL, slúžia rovnakému cieľu - Objektovo orientovanej hierarchii komponentov hlavnému motoru pre rýchly vývoj aplikácií (RAD), nie sú identické. Napríklad, kým VCL poskytuje veľa nevizuálnych komponentov, LCL sa pokúša poskytovať len vizuálne, kým väčšina nevizuálnych komponentov (ako db access) sú poskytované pomocou FCL, zahrnutej vo FreePascal.
146146
147147Takže veľa prvkov VCL nemusí existovať v LCL, alebo naopak, alebo dokonca keď prvky existujú v oboch, nie sú to klony a musíte urobiť pri prenose zmeny v aplikácii, komponentoch a prvkoch.
148148
149149Nasledujúci text sa pokúša poskytnúť čo najúplnejší popis hlavných rozdielov a nekompatibility medzi nimi, pre užívateľov Delphi. Popisuje najmä rozdiely VCL v D4, ale i D5, D6 alebo D7; s aktuálnou LCL, ako je v CVS. Takže nemusí byť vždy presne k verzii, ktorú používate alebo úplne súhlasiť s aktuálnym LCL, ktorý máte. Ak uvidíte rozdiely medzi nasledujúcim textom a LCL ako je v CVS, alebo svojim Delphi kľudne sa pripojte a zmeňte to tak, aby ste prispeli k úplnosti pre všetkých ľudí.
150150
151151#### TControl.Font/TControl.ParentFont
152152
153153Vo VCL je pre prvky úplne bežné použiť presné meno fontu a vlastností fontu ako bold a italics a očakávanie tejto hodnoty bude vždy nasledovať. Ďalej je poskytnutá vlastnosť TControl.ParentFont, ktorá zaisťuje, že prvok sa bude vždy riadiť svojim rodičovským fontom. Opäť, implicitná domnienka je, že tieto hodnoty budú vždy nasledované, dokonca nedbajúc nastavenia Windows Apearance.
154154
155155Toto nie je vždy pravda v LCL, ani byť nemôže. LCL je cross-platform/cross-interface od začiatku preferuje vyvážené nastavenie a bude sa vždy pokúšať nastaviť Desktop/Toolkit Apearance alebo nastavenú Tému na všetkých nástrojoch. Napríklad, ak používate rozhranie GTK a téma GTK poskytuje konkrétny font pre tlačítka, potom sa tlačítka LCL budú vždy pokúšať použiť tento font.
156156
157157To znamená, že väčšina prvkov LCL nemá rovnakú úroveň návrhu prvku, ktorá je často predpokladaná vo VCL, skôr len tie vlastné prvky, ktoré sú kreslené Canvas miesto pridelené rozhraním môžu byť modifikované týmto spôsobom, nedbajúcim na použité rozhranie.
158158
159159Ak je napríklad potrebný Label s fontom bold/special color, musíte použiť TStaticText, keďže TLabel je špecifický prvok rozhrania a všetky rozhrania sú poskytnuté v pôvodnej verzii a mnoho z nich bude mať predvolené nastavenia, ktoré budú použité.
160160
161161#### Riadenie Dragging/Docking
162162
163163Vo VCL väčšina (Win) prvkov implementuje metódy a spätné funkcie pre obsluhovanie preťahovania a dokovania prvkov, napríklad preťahovanie prvku z jedného panela a jeho dokovanie do iného panely v dobe behu programu.
164164
165165Táto funkcia nie je teraz implementovaná/dokončená v LCL, hoci teraz je v počiatočnom štádiu plánovania a bude eventuálne podporovať nejakú úroveň kompatibility tohto typu správania, ak nie dokonca presne rovnaké.
166166
167167Toto aktuálne znamená, že prvky nemôžu dediť/používať nasledujúce funkcie, procedúry, vlastnosti a udalosti TControl:
168168
169169``` pascal
170170protected
171171 function GetDockEdge(MousePos: TPoint): TAlign;
172172 function GetDragImages: TDragImageList;
173173 function GetFloating: Boolean;
174174 function GetFloatingDockSiteClass: TWinControlClass;
175175 procedure DoEndDrag(Target:TObject); X, Y: Integer);
176176 procedure DockTrackNoTarget(Source: TDragDockObject; X, Y: Integer);
177177 procedure DoEndDock(Target: TObject; X, Y: Integer);
178178 procedure DoDock(NewDockSite: TWinControl; var ARect: TRect);
179179 procedure DoStartDock(var DragObject: TDragObject);
180180 procedure DragCanceled;
181181 procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
182182 var Accept: Boolean);
183183 procedure DoEndDrag(Target: TObject; X, Y: Integer);
184184 procedure DoStartDrag(var DragObject: TDragObject);
185185 procedure DrawDragDockImage(DragDockObject: TDragDockObject);
186186 procedure EraseDragDockImage(DragDockObject: TDragDockObject);
187187 procedure PositionDockRect(DragDockObject: TDragDockObject);
188188 procedure SetDragMode(Value: TDragMode);
189189 property DragKind: TDragKind;
190190 property DragCursor: TCursor;
191191 property DragMode: TDragMode;
192192 property OnDragDrop: TDragDropEvent;
193193 property OnDragOver: TDragOverEvent;
194194 property OnEndDock: TEndDragEvent;
195195 property OnEndDrag: TEndDragEvent;
196196 property OnStartDock: TStartDockEvent;
197197 property OnStartDrag: TStartDragEvent;
198198public
199199 function Dragging: Boolean;
200200 function ManualDock(NewDockSite: TWinControl; DropControl: TControl;
201201 ControlSide: TAlign): Boolean;
202202 function ManualFloat(ScreenPos: TRect): Boolean;
203203 function ReplaceDockedControl(Control: TControl; NewDockSite: TWinControl;
204204 DropControl: TControl; ControlSide: TAlign): Boolean;
205205 procedure BeginDrag(Immediate: Boolean; Threshold: Integer);
206206 procedure Dock(NewDockSite: TWinControl; ARect: TRect);
207207 procedure DragDrop(Source: TObject; X, Y: Integer);
208208 procedure EndDrag(Drop: Boolean);
209209 property DockOrientation: TDockOrientation;
210210 property Floating: Boolean;
211211 property FloatingDockSiteClass: TWinControlClass;
212212 property HostDockSite: TWinControl;
213213 property LRDockWidth: Integer;
214214 property TBDockHeight: Integer;
215215 property UndockHeight: Integer;
216216 property UndockWidth: Integer;
217217```
218218
219219a že nasledujúce triedy neexistujú alebo sú nepoužiteľné:
220220
221221``` pascal
222222TDragImageList = class (TCustomImageList)
223223TDockZone = class
224224TDockTree = class (TInterfacedObject, IDockManager)
225225TDragObject = class (TObject)
226226TBaseDragControlObject = class (TDragObject)
227227TDragControlObject = class (TBaseDragControlObject)
228228TDragDockObject = class (TBaseDragControlObject)
229229```
230230
231231a že nasledujúce funkcie sú tiež neexistujúce/nepoužiteľné:
232232
233233``` pascal
234234function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean) : TControl;
235235procedure CancelDrag;
236236function IsDragObject(sender: TObject): Boolean;
237237```
238238
239239#### TEdit/TCustomEdit
240240
241241Prvky Edit, kým základné funkcie sú v LCL rovnaké ako vo VCL, iné treba pri konverzii robiť opatrne:
242242
2432431. kvôli obmedzeniam rozhraní, TEdit.PasswordChar zatiaľ nepracuje vo všetkých rozhraniach (neskôr možno), namiesto toho použite TCustomEdit.EchoMode emPassword v udalosti na skrytie textu.
2442442. Udalosti OnDrag/Dock zatiaľ nie sú implementované. Viz Riadenie Dragging/Docking.
2452453. Vlastnosti Font sú, kvôli správaniu rozhrania, zvyčajne ignorované. Viz TControl.Font/TControl.ParentFont
246246
247247### TSplitter -\> TPairSplitter
248248
249249**Please Improve Me**
250250
251251V LCL existuje prvok TSplitter, tak ho netreba konvertovať, napriek tomu ho chcem trochu vysvetliť:
252252
253253Vo VCL, "Splitting" prvkov, čo je ošetrením, ktoré umožňuje preťahovanie medzi dvomi komponentmi na získanie viac/menej miesta pre jeden na úkor ostatných, je urobený pomocou TSplitter. Často to môžete vidieť, napríklad v IDE Delphi medzi dokovaným Code Explorer a Source Viewer.
254254
255255LCL poskytuje svoj vlastný prvok, nazvaný TPairSplitter, ktorý obsluhuje rovnakú úlohu, avšak nie je kompatibilný, tak "skúšanie" preruší VCL kód alebo bude potrebný Delphi DFM pri prenose kódu.
256256
257257V čom presne sú rozdiely?
258258
259259Najväčšie rozdiely sú, že VCL TSplitter nemá potomkov, namiesto toho ho umiestňujete medzi dva prvky, ktoré sú správne usporiadané a dovoľuje meniť ich veľkosť za behu programu, nedbajúc na vlastnú veľkosť. Prvky musia byť správne usporiadané, napríklad Panel a Splitter s Aligned Left a druhý Panel Aligned Client. Za behu programu môžete zmeniť rozloženie panelov pomocou preťahovania ošetreného pomocou prvku Splitter.
260260
261261V LCL je však TPairSplitter špeciálnym typom prvku s dvomi panelmi a môže byť užitočný len ak prvky na presúvanie sú na týchto paneloch, ale posúvanie bude jednako vykonané medzi týmito panelmi, i keď na nich nebude nič. Ako v predchádzajúcom príklade, potrebujete formulár s TPairSplitter Aligned Client a Panel Aligned Client na jeho ľavej strane a Panel Aligned Client na jeho pravej strane.
262262
263263Iným dôležitým rozdielom je, že vo VCL, keďže TSplitter je svoj vlastný TControl, tak jeho pozícia pri zmene veľkosti je uchovávaná relatívne k ostatným prvkom, tak napríklad klientský panel sa bude zväčšovať, kým ostatné panely nie, tým je pozícia rozdelenia relatívna k zarovnaniu rozdeľovaných prvkov.
264264
265265V LCL sú bočné panely samostatné, potom TPairSplitter má vlastnosť Position, ktorá je absolútne relatívna k vrcholu Top alebo Left. Tak pri zmene veľkosti aktuálna sa pozícia nemení podľa obsahu, tak musí byť nastavené spätné volanie na zaistenie uchovania pomeru, ak je to dôležité.
266266
267267Napríklad, ak pravá strana vertikálneho rozdelenia musí mať správanie ako alClient, potrebujete zmeniť spätným volaním veľkosť formulára, napríklad takto:
268268
269269`PairSplitter.Position := PairSplitter.Width - PairSplitter.Position; `
270270
271271Teda ako môžem konvertovať existujúci kód používajúci TSplitter na TPairSplitter?
272272
273273Ak sú splitter a prvky vytvorené vo vnútri aktuálnej funkcie (ako OnCreate formulára), konverzia nebude zložitá, najprv zreorganizujeme kód na vytvorenie prvkov v poradí novej hierarchie a nastavíme rodičov podriadených prvkov pre rozdelenie na ľavý/horný a pravý/dolný podiel prvku PairSplitter. Napríklad:
274274
275-<table>
276-<tbody>
277-<tr>
278-<td class="header"><p><strong>VCL</strong></p></td>
279-<td class="header"><p><strong>LCL</strong></p></td>
280-</tr>
281-<tr>
282-<td class="code"><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">var</span> </span>
283-<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> BottomPanel: TPanel;</span>
284-<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> VerticalSplitter: TSplitter;</span>
285-<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> LeftPanel: TPanel;</span>
286-<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> HorizontalSplitter: TSplitter;</span>
287-<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a> MainPanel: TPanel;</span>
288-<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a></span>
289-<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
290-<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a> BottomPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
291-<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (BottomPanel) <span class="kw">do</span></span>
292-<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
293-<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
294-<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> Height:= <span class="dv">75</span>;</span>
295-<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> Align:= alBottom;</span>
296-<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
297-<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a></span>
298-<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a> VerticalSplitter:= TSplitter.Create(<span class="kw">Self</span>);</span>
299-<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (VerticalSplitter) <span class="kw">do</span></span>
300-<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
301-<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
302-<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a> Align:= alBottom;</span>
303-<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
304-<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a></span>
305-<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a> HorizontalSplitter:= TSplitter.Create(<span class="kw">Self</span>);</span>
306-<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (HorizontalSplitter) <span class="kw">do</span></span>
307-<span id="cb1-26"><a href="#cb1-26" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
308-<span id="cb1-27"><a href="#cb1-27" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
309-<span id="cb1-28"><a href="#cb1-28" aria-hidden="true" tabindex="-1"></a> align:= alLeft;</span>
310-<span id="cb1-29"><a href="#cb1-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
311-<span id="cb1-30"><a href="#cb1-30" aria-hidden="true" tabindex="-1"></a></span>
312-<span id="cb1-31"><a href="#cb1-31" aria-hidden="true" tabindex="-1"></a> LeftPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
313-<span id="cb1-32"><a href="#cb1-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (LeftPanel) <span class="kw">do</span></span>
314-<span id="cb1-33"><a href="#cb1-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
315-<span id="cb1-34"><a href="#cb1-34" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
316-<span id="cb1-35"><a href="#cb1-35" aria-hidden="true" tabindex="-1"></a> Width:= <span class="dv">125</span>;</span>
317-<span id="cb1-36"><a href="#cb1-36" aria-hidden="true" tabindex="-1"></a> Align:= alLeft;</span>
318-<span id="cb1-37"><a href="#cb1-37" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
319-<span id="cb1-38"><a href="#cb1-38" aria-hidden="true" tabindex="-1"></a></span>
320-<span id="cb1-39"><a href="#cb1-39" aria-hidden="true" tabindex="-1"></a> MainPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
321-<span id="cb1-40"><a href="#cb1-40" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (MainPanel) <span class="kw">do</span></span>
322-<span id="cb1-41"><a href="#cb1-41" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
323-<span id="cb1-42"><a href="#cb1-42" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
324-<span id="cb1-43"><a href="#cb1-43" aria-hidden="true" tabindex="-1"></a> Align:= alClient;</span>
325-<span id="cb1-44"><a href="#cb1-44" aria-hidden="true" tabindex="-1"></a> Caption:= <span class="st">&#39;Hello&#39;</span>;</span>
326-<span id="cb1-45"><a href="#cb1-45" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
327-<span id="cb1-46"><a href="#cb1-46" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
328-<td class="code"><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">var</span></span>
329-<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> BottomPanel: TPanel;</span>
330-<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> VerticalSplitter: TPairSplitter;</span>
331-<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> LeftPanel: TPanel;</span>
332-<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> HorizontalSplitter: TPairSplitter;</span>
333-<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> MainPanel: TPanel;</span>
334-<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a></span>
335-<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a><span class="kw">begin</span></span>
336-<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> VerticalSplitter:= TPairSplitter.Create(<span class="kw">Self</span>);</span>
337-<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (VerticalSplitter) <span class="kw">do</span></span>
338-<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
339-<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> Parent:= <span class="kw">Self</span>;</span>
340-<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> Align:= alClient;</span>
341-<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> Width:= <span class="kw">Self</span>.Width;</span>
342-<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> Height:= <span class="kw">Self</span>.Height;</span>
343-<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> SplitterType:= pstVertical;</span>
344-<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a> Position:= Height - <span class="dv">75</span>;</span>
345-<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a> Sides[<span class="dv">0</span>].Width:= Width;</span>
346-<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> Sides[<span class="dv">0</span>].Height:= Position;</span>
347-<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
348-<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a></span>
349-<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> HorizontalSplitter:= TPairSplitter.Create(<span class="kw">Self</span>);</span>
350-<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (HorizontalSplitter) <span class="kw">do</span></span>
351-<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
352-<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a> Parent:= VerticalSplitter.Sides[<span class="dv">0</span>];</span>
353-<span id="cb2-26"><a href="#cb2-26" aria-hidden="true" tabindex="-1"></a> Width:= <span class="kw">Self</span>.Width;</span>
354-<span id="cb2-27"><a href="#cb2-27" aria-hidden="true" tabindex="-1"></a> Height:= VerticalSplitter.Position;</span>
355-<span id="cb2-28"><a href="#cb2-28" aria-hidden="true" tabindex="-1"></a> align:= alClient;</span>
356-<span id="cb2-29"><a href="#cb2-29" aria-hidden="true" tabindex="-1"></a> SplitterType:= pstHorizontal;</span>
357-<span id="cb2-30"><a href="#cb2-30" aria-hidden="true" tabindex="-1"></a> Position:= <span class="dv">125</span>;</span>
358-<span id="cb2-31"><a href="#cb2-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
359-<span id="cb2-32"><a href="#cb2-32" aria-hidden="true" tabindex="-1"></a></span>
360-<span id="cb2-33"><a href="#cb2-33" aria-hidden="true" tabindex="-1"></a> LeftPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
361-<span id="cb2-34"><a href="#cb2-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (LeftPanel) <span class="kw">do</span></span>
362-<span id="cb2-35"><a href="#cb2-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
363-<span id="cb2-36"><a href="#cb2-36" aria-hidden="true" tabindex="-1"></a> Parent:= HorizontalSplitter.Sides[<span class="dv">0</span>];</span>
364-<span id="cb2-37"><a href="#cb2-37" aria-hidden="true" tabindex="-1"></a> Align:= alClient;</span>
365-<span id="cb2-38"><a href="#cb2-38" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
366-<span id="cb2-39"><a href="#cb2-39" aria-hidden="true" tabindex="-1"></a></span>
367-<span id="cb2-40"><a href="#cb2-40" aria-hidden="true" tabindex="-1"></a> MainPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
368-<span id="cb2-41"><a href="#cb2-41" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (MainPanel) <span class="kw">do</span></span>
369-<span id="cb2-42"><a href="#cb2-42" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
370-<span id="cb2-43"><a href="#cb2-43" aria-hidden="true" tabindex="-1"></a> Parent:= HorizontalSplitter.Sides[<span class="dv">1</span>];</span>
371-<span id="cb2-44"><a href="#cb2-44" aria-hidden="true" tabindex="-1"></a> Align:= alClient;</span>
372-<span id="cb2-45"><a href="#cb2-45" aria-hidden="true" tabindex="-1"></a> Caption:= <span class="st">&#39;Hello&#39;</span>;</span>
373-<span id="cb2-46"><a href="#cb2-46" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
374-<span id="cb2-47"><a href="#cb2-47" aria-hidden="true" tabindex="-1"></a></span>
375-<span id="cb2-48"><a href="#cb2-48" aria-hidden="true" tabindex="-1"></a> BottomPanel:= TPanel.Create(<span class="kw">Self</span>);</span>
376-<span id="cb2-49"><a href="#cb2-49" aria-hidden="true" tabindex="-1"></a> <span class="kw">with</span> (BottomPanel) <span class="kw">do</span></span>
377-<span id="cb2-50"><a href="#cb2-50" aria-hidden="true" tabindex="-1"></a> <span class="kw">begin</span></span>
378-<span id="cb2-51"><a href="#cb2-51" aria-hidden="true" tabindex="-1"></a> Parent:= VerticalSplitter.Sides[<span class="dv">1</span>];</span>
379-<span id="cb2-52"><a href="#cb2-52" aria-hidden="true" tabindex="-1"></a> Align:= alClient;</span>
380-<span id="cb2-53"><a href="#cb2-53" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span>;</span>
381-<span id="cb2-54"><a href="#cb2-54" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span>;</span></code></pre></div></td>
382-</tr>
383-</tbody>
384-</table>
275+**VCL**
385276
277+**LCL**
278+
279+``` pascal
280+var
281+ BottomPanel: TPanel;
282+ VerticalSplitter: TSplitter;
283+ LeftPanel: TPanel;
284+ HorizontalSplitter: TSplitter;
285+ MainPanel: TPanel;
286+
287+begin
288+ BottomPanel:= TPanel.Create(Self);
289+ with (BottomPanel) do
290+ begin
291+ Parent:= Self;
292+ Height:= 75;
293+ Align:= alBottom;
294+ end;
295+
296+ VerticalSplitter:= TSplitter.Create(Self);
297+ with (VerticalSplitter) do
298+ begin
299+ Parent:= Self;
300+ Align:= alBottom;
301+ end;
302+
303+ HorizontalSplitter:= TSplitter.Create(Self);
304+ with (HorizontalSplitter) do
305+ begin
306+ Parent:= Self;
307+ align:= alLeft;
308+ end;
309+
310+ LeftPanel:= TPanel.Create(Self);
311+ with (LeftPanel) do
312+ begin
313+ Parent:= Self;
314+ Width:= 125;
315+ Align:= alLeft;
316+ end;
317+
318+ MainPanel:= TPanel.Create(Self);
319+ with (MainPanel) do
320+ begin
321+ Parent:= Self;
322+ Align:= alClient;
323+ Caption:= 'Hello';
324+ end;
325+end;
326+```
327+
328+``` pascal
329+var
330+ BottomPanel: TPanel;
331+ VerticalSplitter: TPairSplitter;
332+ LeftPanel: TPanel;
333+ HorizontalSplitter: TPairSplitter;
334+ MainPanel: TPanel;
335+
336+begin
337+ VerticalSplitter:= TPairSplitter.Create(Self);
338+ with (VerticalSplitter) do
339+ begin
340+ Parent:= Self;
341+ Align:= alClient;
342+ Width:= Self.Width;
343+ Height:= Self.Height;
344+ SplitterType:= pstVertical;
345+ Position:= Height - 75;
346+ Sides[0].Width:= Width;
347+ Sides[0].Height:= Position;
348+ end;
349+
350+ HorizontalSplitter:= TPairSplitter.Create(Self);
351+ with (HorizontalSplitter) do
352+ begin
353+ Parent:= VerticalSplitter.Sides[0];
354+ Width:= Self.Width;
355+ Height:= VerticalSplitter.Position;
356+ align:= alClient;
357+ SplitterType:= pstHorizontal;
358+ Position:= 125;
359+ end;
360+
361+ LeftPanel:= TPanel.Create(Self);
362+ with (LeftPanel) do
363+ begin
364+ Parent:= HorizontalSplitter.Sides[0];
365+ Align:= alClient;
366+ end;
367+
368+ MainPanel:= TPanel.Create(Self);
369+ with (MainPanel) do
370+ begin
371+ Parent:= HorizontalSplitter.Sides[1];
372+ Align:= alClient;
373+ Caption:= 'Hello';
374+ end;
375+
376+ BottomPanel:= TPanel.Create(Self);
377+ with (BottomPanel) do
378+ begin
379+ Parent:= VerticalSplitter.Sides[1];
380+ Align:= alClient;
381+ end;
382+end;
383+```
384+
386385Ako môžete vidieť, zmena pozostáva väčšinou z hierarchie. Ak vám lepšie vyhovuje práca s DFM, zmeny potrebné pre konverziu DFM-\>LFM sú podobné zmenám vyššie, ide o rovnaký typ zmien v Parent/Owner atď. Potom bude vyššie spomínaný príklad vyzerať takto nejako:
387386
388-<table>
389-<tbody>
390-<tr>
391-<td class="header"><p><strong>Delphi DFM</strong></p>
392-<div style="font-weight: normal">
393-<p><strong>(extraneous values removed)</strong></p></td>
394-<td class="header"><p><strong>Lazarus LFM</strong></p>
395-<div style="font-weight: normal">
396-<p><strong>(most width, height, etc. removed)</strong></p></td>
397-</tr>
398-<tr>
399-<td class="code"><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">object</span> VerticalSplitter: TSplitter</span>
400-<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> Height = <span class="dv">3</span></span>
401-<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> Cursor = crVSplit</span>
402-<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> Align = alBottom</span>
403-<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span>
404-<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">object</span> HorizontalSplitter: TSplitter</span>
405-<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a> Width = <span class="dv">3</span></span>
406-<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> Align = alLeft</span>
407-<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span>
408-<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="kw">object</span> BottomPanel: TPanel</span>
409-<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> Height = <span class="dv">75</span></span>
410-<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> Align = alBottom</span>
411-<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span>
412-<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a><span class="kw">object</span> LeftPanel: TPanel</span>
413-<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a> Width = <span class="dv">125</span></span>
414-<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a> Align = alLeft</span>
415-<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span>
416-<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a><span class="kw">object</span> MainPanel: TPanel</span>
417-<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
418-<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span> </span></code></pre></div></td>
419-<td class="code"><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">object</span> VerticalSplitter: TPairSplitter</span>
420-<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
421-<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> SplitterType = pstVertical</span>
422-<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> Position = <span class="dv">225</span></span>
423-<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> Height = <span class="dv">300</span></span>
424-<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> Width = <span class="dv">400</span></span>
425-<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> Pairsplitterside1: TPairSplitterIde</span>
426-<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> HorizontalSplitter: TPairSplitter</span>
427-<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
428-<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> Position = <span class="dv">125</span></span>
429-<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> Pairsplitterside3: TPairSplitterIde</span>
430-<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> Width = <span class="dv">125</span></span>
431-<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> LeftPanel: TPanel</span>
432-<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
433-<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> Width = <span class="dv">125</span></span>
434-<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
435-<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
436-<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> Pairsplitterside4: TPairSplitterIde</span>
437-<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> MainPanel: TPanel</span>
438-<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
439-<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
440-<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
441-<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
442-<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
443-<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> Pairsplitterside2: TPairSplitterIde</span>
444-<span id="cb2-26"><a href="#cb2-26" aria-hidden="true" tabindex="-1"></a> <span class="kw">object</span> BottomPanel: TPanel</span>
445-<span id="cb2-27"><a href="#cb2-27" aria-hidden="true" tabindex="-1"></a> Align = alClient</span>
446-<span id="cb2-28"><a href="#cb2-28" aria-hidden="true" tabindex="-1"></a> Height = <span class="dv">75</span></span>
447-<span id="cb2-29"><a href="#cb2-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
448-<span id="cb2-30"><a href="#cb2-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
449-<span id="cb2-31"><a href="#cb2-31" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span></code></pre></div></td>
450-</tr>
451-</tbody>
452-</table>
387+**Delphi DFM**
388+
389+**(extraneous values removed)**
390+
391+**Lazarus LFM**
392+
393+**(most width, height, etc. removed)**
394+
395+``` pascal
396+object VerticalSplitter: TSplitter
397+ Height = 3
398+ Cursor = crVSplit
399+ Align = alBottom
400+end
401+object HorizontalSplitter: TSplitter
402+ Width = 3
403+ Align = alLeft
404+end
405+object BottomPanel: TPanel
406+ Height = 75
407+ Align = alBottom
408+end
409+object LeftPanel: TPanel
410+ Width = 125
411+ Align = alLeft
412+end
413+object MainPanel: TPanel
414+ Align = alClient
415+end
416+```
417+
418+``` pascal
419+object VerticalSplitter: TPairSplitter
420+ Align = alClient
421+ SplitterType = pstVertical
422+ Position = 225
423+ Height = 300
424+ Width = 400
425+ object Pairsplitterside1: TPairSplitterIde
426+ object HorizontalSplitter: TPairSplitter
427+ Align = alClient
428+ Position = 125
429+ object Pairsplitterside3: TPairSplitterIde
430+ Width = 125
431+ object LeftPanel: TPanel
432+ Align = alClient
433+ Width = 125
434+ end
435+ end
436+ object Pairsplitterside4: TPairSplitterIde
437+ object MainPanel: TPanel
438+ Align = alClient
439+ end
440+ end
441+ end
442+ end
443+ object Pairsplitterside2: TPairSplitterIde
444+ object BottomPanel: TPanel
445+ Align = alClient
446+ Height = 75
447+ end
448+ end
449+end
450+```
453451
454452### TCustomTreeView/TTreeView
455453
456454Oboje, VCL aj LCL, poskytujú komponent TCustomTreeView/TTreeView, používaný pre výpisy stromovej štruktúry dát s viacnásobnými uzlami, rozšíreným výberom a ImageList, a hoci skutočná funkčnosť je porovnateľná, nie všetky vlastnosti sú úplne kompatibilné. Hlavné rozdiely sú: **Incomplete list, also update to include TCustomTreeView Mark functions and protected methods**
457455
4584561. LCL poskytuje TCustomTreeView.Options, množinu volieb, ktoré môžu byť nastavené na zmenu správania a vzhľadu prvku:
459457 - tvoAllowMultiselect- nastavuje mód viacnásobného výberu uzlov, ekvivalent k TCustomTreeView.MultiSelect vo VCL VCL
460458 - tvoAutoExpand- automatické rozbalenie uzlov, ekvivalent k TCustomTreeView.AutoExpand
461459 - tvoAutoInsertMark- aktualizácia prípravy Drag pri prechode myšou.
462460 - tvoAutoItemHeight- automatické prispôsobenie výšky prvku.
463461 - tvoHideSelection- neoznačovať vybranú položku.
464462 - tvoHotTrack- použitie HotTracking, ekvivalent k TCustomTreeview.HotTrack
465463 - tvoKeepCollapsedNodes- pri zbalení uzla, uchováva podriadené uzly
466464 - tvoReadOnly- ekvivalent k TCustomTreeview.ReadOnly
467465 - tvoRightClickSelect- dovoľuje použiť pravé tlačítko myši na výber uzla, ekvivalent k TCustomTreeView.RightClickSelect
468466 - tvoRowSelect- dovoľuje výber riadkov, ekvivalent k TCustomTreeView.RowSelect
469467 - tvoShowButtons- zobrazuje tlačítka, ekvivalent k TCustomTreeView.ShowButtons
470468 - tvoShowLines- zobrazuje čiary uzlov, ekvivalent k TCustomTreeView.ShowLines
471469 - tvoShowRoot- zobrazuje root, ekvivalent k TCustomTreeView.ShowRoot
472470 - tvoShowSeparators- zobrazuje oddeľovače
473471 - tvoToolTips- zobrazuje samostatné tooltips pre uzly
4744722. LCL poskytuje dodatočné vlastnosti:
475473 - udalosť TCustomTreeView.OnSelectionChange
476474 - TCustomTreeView.DefaultItems, pre predvolené číslo položiek
477475 - TCustomTreeView.ExpandSignType na určenie znamienka použitého na rozbaliteľných/zbaliteľných uzloch
4784763. Síce väčšina udalostí OnDrag/OnDock je k dispozícii v LCL, nefungujú však! Pre viac informácii si prosím prečítajte predchádzajúcu sekciu.
479477
480478### Správy / Udalosti
481479
482480(Messages / Events) Poradie a množstvo správ a udalostí (OnShow, OnActivate, OnEnter, ...) sa líši od VCL a závisí od použitého widgeset. LCL síce poskytuje podmnožinu správ podobných WinAPI (aby bolo portovanie komponentov z Delphi jednoduchšie), avšak takmer všetky LCL správy sa od WinAPI mierne líšia. Niektoré časti Delphi kódy používajú WinAPI správy preto, že vo VCL chýbajú alebo kvôli rýchlosti. Niektoré veci občas samé fungujú, ale je nutné ich skontrolovať ručne. To je dôvod, prečo sa LCL správy nazývajú napr. LM_SIZE namiesto WM_SIZE (unit lmessages).
483481
484482**Poznámka ku spracovávaniu vlastných správ!** Od verzie 0.9.26 (December 2008) sa zmenil spôsob spracovávania vlastných WinAPI správ (ako napr. WM_HOTKEY, WM_SYSCOMMAND); a líši sa od spôsobu používanom v Delphi. V tomto momente nie je možné odchytávať správy prostredníctvom direktívy *message* alebo pomocou prekrytia metódy *WndProc* formulára. Jediný spôsob, ako odchytávať metódy vo formulári je nahradiť metódy *windowproc*. Viac tu: [[Win32/64 Interface|Processing non-user messages in your window]]
485483
486484## Original Contributors and changes
487485
488486This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusForDelphiUsers).
489487
490488- Initial import and formatting - VlxAdmin 9/26/2003
491489- Begin VCL -\> LCL with a section on TSplitter -\> TPairSplitter - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 9/30/2003
492490- Add TControl.Font/TControl.ParentFont to VCL -\> LCL - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 9/30/2003
493491- Update TEdit/TCustomEdit section in VCL -\> LCL - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/1/2003
494492- Add Control Dragging/Docking to VCL -\> LCL - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/1/2003
495493- Added "Object Inspector" to Delphi IDE -\> Lazarus IDE - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/1/2003
496494- Added initial "TCustomTreeView/TTreeView" to VCL -\> LCL - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/1/2003
497495- Added introduction to VCL -\> LCL - [Andrew Johnson](http://lazarus-ccr.sourceforge.net/index.php?wiki=AndrewJohnson) 10/1/2003
498496- Fixed some typos - Vincent 10/2/2003
499497- Fixed Typo User:Kirkpatc 20 May 2004
500498- Prvotný preklad z origánalu - Slavko 01:18, 2 Apr 2005 (PST)
501499- Aktualizácia prekladu --Adamm 14:45, 29 December 2008 (CET)
502500
503501---
504502*From the Free Pascal wiki, page "Lazarus For Delphi Users/sk", as it stood on 2020-02-18 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