Difference between revisions of "Lazarus IDE Tools/sk"

From Free Pascal wiki
Jump to navigationJump to search
Line 206: Line 206:
 
Umiestnite kurzor za medzeru za kľúčovým slovom '''read''' a stlačte Ctrl+Space pre dokončovanie identifikátorov. To vám ponúkne premennú '''FPropName''' a procedúru '''SetPropName'''.
 
Umiestnite kurzor za medzeru za kľúčovým slovom '''read''' a stlačte Ctrl+Space pre dokončovanie identifikátorov. To vám ponúkne premennú '''FPropName''' a procedúru '''SetPropName'''.
  
===Forward Procedure Completion===
+
===Dokončovanie forward procedúr===
"Forward Procedure Completion" is part of the Code Completion and adds missing procedure bodies. It is invoked, when the cursor is on a forward defined procedure.
+
(Forward Procedure Completion)
  
For example:
+
Dokončovanie forward procedúr je časťou dokončovania kódu a pridáva telá chýbajúcich procedúr, ktoré sú definované. Je vyvolané, ak je kurzor na pripravenej definícii procedúry.
Add a new procedure to the interface section:
+
 
 +
Napríklad:
 +
Pridajte novú procedúru do časti '''interface''':
 
  procedure DoSomething;
 
  procedure DoSomething;
Place the cursor on it and press Ctrl+Shift+C for code completion. It will create in the implementation section:
+
Umiestnite kurzor na ňu a stlačte Ctrl+Shift+C pre dokončovaniekódu. V časti '''implementation''' bude doplnené:
 
  procedure DoSomething;
 
  procedure DoSomething;
 
  begin
 
  begin
 
   |
 
   |
 
  end;
 
  end;
Hint: You can jump between a procedure definition and its body with Ctrl+Shift+Up.
+
Tip: Pomocou  Ctrl+Shift+Up môžete prepínať medzi definíciou a telom procedúry.
  
The new procedure body will be added in front of the class methods. If there are already some procedures in the interface the IDE tries to keep the ordering. For example:
+
Telo novej procedúry bude pridané pred metódy tried. Ak už sú v časti interface nejaké definície procedúr, IDE sa pokúsi zachovať ich poradie, napríklad:
 
   procedure Proc1;
 
   procedure Proc1;
   procedure Proc2; // new proc
+
   procedure Proc2; // nová procedúra
 
   procedure Proc3;
 
   procedure Proc3;
If the bodies of Proc1 and Proc3 already exists, then the Proc2 body will be inserted between the bodies of Proc1 and Proc3. This behaviour can be setup in Environment > Codetools Options -> Code Creation.
+
Ak telá Proc1 a Proc3 už existujú, potom bude telo Proc2 vložené medzi telá procedúr Proc1 a Proc3. Toto správanie môže byť zmené pomocou Environment > Codetools Options -> Code Creation.
  
Multiple procedures:
+
Viacero procedúr:
  procedure Proc1_Old; // body exists
+
  procedure Proc1_Old; // telo existuje
  procedure Proc2_New; // body does not exists
+
  procedure Proc2_New; // telo neexistuje
 
  procedure Proc3_New; //  "
 
  procedure Proc3_New; //  "
 
  procedure Proc4_New; //  "
 
  procedure Proc4_New; //  "
  procedure Proc5_Old; // body exists
+
  procedure Proc5_Old; // telo existuje
Code Completion will add all 3 procedure bodies (Proc2_New, Proc3_New, Proc4_New).
+
Dokončovanie kódu pridá 3 telá procedúr (Proc2_New, Proc3_New, Proc4_New).
 +
 
 +
Prečo sa to volá Dokončovanie forward procedúr"?
  
Why calling it "Forward Procedure Completion"?
+
Pretože tento nástroj nepracuje len s procedúrami definovanými v časti interface, ale aj s procedúrami, ktoré sú definované pomocou kľúčového slova '''forward'''.
  
Because it does not only work for procedures defined in the interface, but for procedures with the "forward" modifier as well.
+
===Dokončovanie priradenia udalostí===
 +
(Event Assignment Completion)
  
===Event Assignment Completion===
+
Dokončovanie priradenia udalostí je čsťou Dokončovania kódu a dokončuje jeden príkaz Event:=|. Nastáva, keď je kurzor umiestnený za príkazom priradenia udalosti.
"Event Assignment Completion" is part of the Code Completion and completes a single Event:=| statement. It is invoked, when the cursor is behind an assignment to an event.
 
  
For example:
+
Napríklad:
In a method, say the FormCreate event, add a line 'OnPaint:=':
+
V metóde, povedzme udalosti FormCreate event, pridajte riadok: 'OnPaint:=':
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  begin
 
  begin
 
   OnPaint:=|
 
   OnPaint:=|
 
  end;
 
  end;
The '|' is the cursor and should not be typed.
+
Značka '|' je umiestnenie kurzora a netreba ju zadávať.
Then press Ctrl+Shift+C for code completion. The statement will be completed to
+
 
 +
Potom stlačte Ctrl+Shift+C pre dokončovanie kódu. Príkaz priradenia udalosti bude doplnený takto:
 
  OnPaint:=@Form1Paint;
 
  OnPaint:=@Form1Paint;
A new method Form1Paint will be added to the TForm1 class. Then class completion is started and you get:
+
Do triedy TForm1 bude pridaná nová metóda Form1Paint. Potom je spustené dokončovanie tried a dostanete:
 
  procedure TForm1.Form1Paint(Sender: TObject);
 
  procedure TForm1.Form1Paint(Sender: TObject);
 
  begin
 
  begin
 
   |
 
   |
 
  end;
 
  end;
This works just like adding methods in the object inspector.
+
Pracuje presne ako pridávaniem etód v Object inspectore.
  
Note:<br>
+
Poznámka: Kurzor musíte umiestniť za operátor priradenia ':='. Ak ho umiestnite na identifikátor (tj. OnPaint), dokončovanie kódu spustí Dokončovanie lokálnych premenných, ktoré zlyhá, pretože OnPaint je už definovaná.
You must place the cursor behind the ':=' assignment operator. If you place the cursor on the identifier (e.g. OnPaint) code completion will invoke "Local Variable Completion", which fails, because OnPaint is already defined.
 
  
Hint:<br>
+
Tip:
You can define the new method name by yourself. For example:
+
Môžete definovať meno novej metódi aj sami, a to jej zadaním do priradenia, napríklad:
 
   OnPaint:=@ThePaintMethod;
 
   OnPaint:=@ThePaintMethod;
  
===Local Variable Completion===
+
===Dokončovanie lokálnych premenných===
"Local Variable Completion" is part of the Code Completion and adds a local variable definition for a Identifier:=Term; statement. It is invoked, when the cursor is on the identifier of the assignment.
+
(Local Variable Completion)
 +
 
 +
Dokončovanie lokálnych premenných je časťou Dokončovania kódu a pridáva definíciu lokálnej premennej pre príkaz Identifier:=Term;. Je spustené, keď je kurzor umiestnený na identifikátore v priradení.
  
For example:
+
Napríklad:
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  begin
 
  begin
 
   i:=3;
 
   i:=3;
 
  end;
 
  end;
Place the cursor on the 'i' or just behind it. Then press Ctrl+Shift+C for code completion and you will get:
+
Umiestnite kurzor na 'i' alebo tesne za neho, potom stlačte Ctrl+Shift+C pre dokončovanie kódu a dostanete:
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  var
 
  var
Line 278: Line 284:
 
   i:=3;
 
   i:=3;
 
  end;
 
  end;
The codetools first checks, if the identifier 'i' is already defined and if not it will add the declaration 'var i: integer;'. The type of the identifier is guessed from the term right to the assignment ':=' operator. Numbers like the 3 defaults to Integer.
+
Nástroj dokončovania kódu najprv skontroluje, či identifikátor 'i' už nie je definovaný a ak nie, pridá deklaráciu 'var i: integer;'. Typ identifikátora je odhadovaný podľa pravej strany príkazu priradenia. Čísla ako 3 sú identifikované ako Integer.
  
Another example:
+
Iný príklad:
 
type
 
type
 
   TWhere = (Behind, Middle, InFront);
 
   TWhere = (Behind, Middle, InFront);
Line 290: Line 296:
 
     for Where:=Low(a) to High(a) do writeln(a[Where]);
 
     for Where:=Low(a) to High(a) do writeln(a[Where]);
 
   end;
 
   end;
Place the cursor on 'Where' and press Ctrl+Shift+C for code completion. You get:
+
Umiestnite kurzor na 'Where' a stlačte Ctrl+Shift+C pre dokončenie kódu. Dostanete:
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  procedure TForm1.Form1Create(Sender: TObject);
 
  var
 
  var
Line 299: Line 305:
 
  end;
 
  end;
  
===Comments and Code Completion===
+
===Komentáre a dokončovanie kódu===
Code completion tries to keep comments where they belong.  
+
(Comments and Code Completion)
For example:
+
 
   FList: TList; // list of TComponent
+
Dokončovanie kódu sa pokúša uchovávať komentáre tam, kde sú.  
 +
Príklad:
 +
   FList: TList; // zoznam prvkov TComponent
 
   FInt: integer;
 
   FInt: integer;
When inserting a new variable between FList and FInt, the comment is kept in the FList line. Same is true for
+
Pri vkladaní novej premennej medzi FList a FInt, je komentár ponechaný na riadku spolu s FList. To platí i pre:
   FList: TList; { list of TComponent
+
   FList: TList; { zoznam prvkov TComponent
     This is a comment over several lines, starting
+
     Toto je komentár na niekoľkých riadkoch, začínajúci
     in the FList line, so codetools assumes it belongs
+
     na riadku s FList, tak nástroj dokončenia kódu predpokladá že patrí
     to the FLIst line and will not break this
+
     k riadku s FList a nepreruší tento vzťah.
     relationship. Code is inserted behind the comment. }
+
     Kód bude vložený za komentár. }
 
   FInt: integer;
 
   FInt: integer;
If the comment starts in the next line:
+
Ak komentár začína na ďalšom riadku:
   FList: TList; // list of TComponent
+
   FList: TList; // zoznam prvkov TComponent
     { This comment belongs to the statement below.  
+
     { Tento komentár patrí k nasledujúcemu riadku.  
       New code is inserted above this comment and
+
       Nový kód je vložený pred tentokomentár a
       behind the comment of the FList line. }
+
       za komentár na riadku s FList. }
 
   FInt: integer;
 
   FInt: integer;
  
Line 321: Line 329:
 
==Refactoring==
 
==Refactoring==
  
===Invert Assignments===
+
===Otočenie priradenie===
 +
(Invert Assignments)
  
;Abstract: : "Invert Assignments" takes some selected pascal statements and inverts all assignments from this code. This tool is usefull for transforming a "save" code to a "load" one and inverse operation.
+
;Zhrnutie: : Otočenie priradenia pracuje s vybratými príkazmi Pascalu a obracia všetky priradenia z tohoto výberu. Tento nástroj je užitočný pre transformáciu "save" kódu na "load" a naopak.
  
Example:<br>
+
Príklad:
 
  procedure DoSomething;
 
  procedure DoSomething;
 
  begin
 
  begin
Line 332: Line 341:
 
   AValueHouse:=BValueHouse;
 
   AValueHouse:=BValueHouse;
 
  end;
 
  end;
Select the lines with assignments (between begin and end) and do Invert Assignments. All assignments will be inverted and identation will be add automatically. For example:
+
Vyberte riadky s priradeniami (medzi begin a end) a urobte Spätné priradenie. Všetky priradenia budú otočené a automaticky odsadené. Výsledok:
 
 
Result:
 
 
  procedure DoSomething;
 
  procedure DoSomething;
 
  begin
 
  begin
Line 343: Line 350:
  
 
===Extract Procedure===
 
===Extract Procedure===
;Abstract: : "Export Procedure" takes some selected pascal statements and creates a new procedure/method from this code. This tool is useful to split big procedures or to easily create a new procedure from some code.
+
;Zhrnutie: : "Export Procedure" pracuje s vybratými príkazmi Pascalu a vytvára z tohoto výberu novú procedúru/metódu. Tento nástroj je užitočný na rozdelenie veľkých provedúr alebo na jednoduché vytvorenie novej procedúry z nejakého kódu.
  
Basic example:<br>
+
Základný príklad:
 
  procedure DoSomething;
 
  procedure DoSomething;
 
  begin
 
  begin
 
   CallSomething;
 
   CallSomething;
 
  end;
 
  end;
Select the line "CallSomething;" and do Extract Proc. A dialog pop ups and
+
Vyberte riadok "CallSomething;" a vykonajte Extract Proc. Vyskočí dialóg a môžete zvoliť typ a meno procedúry, ktorá má byť vytvorená. Napríklad: procedure, "NewProc". Výsledok:
you can select the type and name of the procedure to create. For example:
 
procedure, "NewProc". Result:
 
 
  procedure NewProc;
 
  procedure NewProc;
 
  begin
 
  begin
Line 362: Line 367:
 
   NewProc;
 
   NewProc;
 
  end;
 
  end;
You can see, that the new procedure "NewProc" was created with the selection
+
Všimnite si, že nová procedúra "NewProc" bola vytvorená z vybratého textu, teda vybratý text bol pridaný do jej tela a a starý kód bol nahradený jej volaním.
as body and the old code was replaced by a call.
 
  
Local Variables and Parameters:<br>
+
Lokálne premenné a parametre:
"Extract Proc" scans for used variables and automatically creates the
+
"Extract Proc" kontroluje použité premenné a automaticky vytvára zoznam parametrov a locálnych premenných. Napríklad:
parameter list and local variables. Example:
 
 
  procedure TForm1.DoSomething(var Erni, Bert: integer);
 
  procedure TForm1.DoSomething(var Erni, Bert: integer);
 
  var
 
  var
Line 377: Line 380:
 
   end;
 
   end;
 
  end;
 
  end;
Select the for loop and create a new Procedure "NewProc". The local variable i is only used in the selection, so it will be moved to the new procedure. Erni is also used in the remaining code, so it will become a parameter.
+
Vyberte cyklus '''for''' a vytvorte novú procedúru "NewProc". Lokálna premenná "i" je použitá len vo výbere, tak bude presunutá do novej procedúry. "Erni" je použité aj vo zvyšku kódu, tak sa z neho stane parameter:
  
Result:<br>
 
 
  procedure NewProc(const Erni: integer);
 
  procedure NewProc(const Erni: integer);
 
  var
 
  var
Line 395: Line 397:
 
  end;
 
  end;
  
You can see "i" was moved to the new procedure (Note: including its comment) and Erni.
+
Všimnite si, že "i" bolo presunuté do novej procedúry vrátane komentára.
 +
 
 +
Obmedzenia:
 +
Pascal je veľmi výkonný jazyk, tak neočakávajte, že tento nástroj bude pracovať s celým kódom. Aktuálne obmedzenia:
 +
* preverte, či hranice výberu sú na hraniciach príkazov
 +
* heuristika pre parametre 'var'. Všetky parametre sú pridávané ako "const". Ak potrebujete "var", musíte to dokončiť manuálne.
 +
* príkazy "with"
  
Limitations:<br>
+
==Hľadanie deklarácie==
Pascal is a very powerful language, so don't expect it will work with every code. Current limits/ToDos:
+
(Find Declaration)
* check if selection bounds on statement bounds
 
* heuristic for parameter specifiers 'var'. At the moment all parameters are "const". If you need "var", you have to edit it manually.
 
* "with" statements
 
  
==Find Declaration==
+
Umiestnite kurzor na identifikátor a urobte Hľadanie deklarácie, tým bude nájdená deklarácia tohoto identifikátora, prípadne otvorený príslušný súbor a kurzor bude premiestnený na miesto deklarácie.
Position the cursor on an identifier and do 'Find Declaration'. Then it will search the declaration of this identifier, open the file and jump to it.
 
  
Every find declaration sets a Jump Point. That means you jump with find declaration to the declaration and easily jump back with Search -> Jump back.
+
Každé hľadanie deklarácie nastavuje bod skoku. Tzn. po skoku na nájdenú deklaráciu môžete jednoduchos skočiť naspäť pomocou Search -> Jump back.
  
There are some differences to Delphi:
+
Oproti Delphi má nástroj isté rozdiely:
The codetools work on sources following the normal pascal rules, instead of using the compiler output. The compiler returns the final type. The codetools see the sources and all steps in between. For example:
+
Nástroj pracuje so zdrojovým kódom na základe pravidiel Pascalu, a nie s výsledkom prekladača. The compiler returns the final type. Nástroj prezerá zdrojové kódy a všetky kroky medzi. Napríklad:
  
The 'Visible' property is first defined in TControl (controls.pp), then redefined in TCustomForm and finally redefined in TForm.
+
: Vlastnosť 'Visible' je najprv definovaná v TControl (controls.pp), potom je predefinovaná v TCustomForm a nakoniec úredefinovaná aj v TForm. Spustenie hľadania deklarácie vlastnosti Visible vás najprv presunie na Visible v TForm. Potom môžete spustiť hľadanie deklarácie znova a skočíte na Visible v TCustomForm a znova pre skočenie na Visible v TControl.
Invoking find declaration on Visible will you first bring to Visible in TForm. Then you can invoke Find Declaration again to jump to Visible in TCustomForm and again to jump to Visible in TControl.
 
  
Same is true for types like TColor.
+
Obdobne je to s TColor.
For the compiler it is simply a 'longint'. But in the sources it is defined as
+
Pre prekladač je to jednoducho 'longint', ale v zdrojovom kóde je to definované ako:
 
  TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;
 
  TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;
 
  TColor = TGraphicsColor;
 
  TColor = TGraphicsColor;
  
And the same for forward defined classes:
+
Obdobné je to aj s forward definovanými triedami:
For instance in TControl, there is a private variable
+
Napríklad v TControl je priávtna premenná
 
  FHostDockSite: TWinControl;
 
  FHostDockSite: TWinControl;
Find declaration on TWinControl jumps to the forward definition
+
Hľadanie deklarácie pre TWinControl skočí na forward definíciu:
 
  TWinControl = class;
 
  TWinControl = class;
And invoking it again jumps to the real implementation
+
A opätovné spustenie hľadania deklarácie skočí na skutočnú implementáciu:
 
  TWinControl = class(TControl)
 
  TWinControl = class(TControl)
This way you can track down every identifier and find every overload.
+
Týmto spôsobom môžete stopovať každý identifikátor a nájsť každé predefinovanie, či preťaženie.
 +
 
 +
==Prejdi do direktívy include==
 +
(Goto Include Directive)
  
==Goto Include Directive==
+
Tento príkaz v menu Searchskočí do príkazu (direktívy) {$I filename}, v ktorej je použitý aktuálny súbor.
"Goto Include Directive" in the search menu of the IDE jumps to {$I filename} statement where the current include file is used.
 
  
==Publish Project==
+
==Publikuj Projekt==
Creates a copy of the whole project. If you want to send someone just the sources and compiler settings of your code, this function is your friend.
+
Vytvára kópiu celého projektu. Ak chcete niekomu poslať len zdrojové kódy a nastavenia prekladača pre svoj kód, budete kamarátis  touto funkciou.
  
A normal project directory contains a lot of information. Most of it is not needed to be published:
+
Bežný adresár projektu obsahuje množstvo informácií. Väčšinu z nich publikovať netreba. Súbor .lpi obsahuje informácie o relácii (ako pozíciu caret a záložiek zatvorených jednotiek) a adresár projektu obsahuje mnoho súborov .ppu a .o, a tiež .exe. A práve príkaz Publikuj projekt vytvorí súbor .lpi len so základnými informáciami a všetky zdrojové kódy, so všetkých podadresárov.
The .lpi file contains session information (like caret position and bookmarks of closed units) and the project directory contains a lot of .ppu, .o files and the executable.
 
To create a lpi file with only the base information and only the sources, along with all sub directories use "Publish Project".
 
  
In the dialog you can setup the exclude and include filter, and with the command after you can compress the output into one archive.
+
V ponúknutom dialógu môžete nastaviť filter pre zahrnutie/vynechanie, či pre kompresiu výstupu do jediného archívu.
  
==Original contributors==
+
==Spolupracovníci==
 
This page has been converted from the epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusIdeTools version].
 
This page has been converted from the epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusIdeTools version].
 
* Created page and initial template - 4/6/2004 [[User:Tom Lisjac| VlxAdmin]]
 
* Created page and initial template - 4/6/2004 [[User:Tom Lisjac| VlxAdmin]]
Line 446: Line 449:
 
* Small wiki and formatting fixes - 4/11/2004 [[User:Tom Lisjac| VlxAdmin]]
 
* Small wiki and formatting fixes - 4/11/2004 [[User:Tom Lisjac| VlxAdmin]]
 
* Added a summary table for IdeTools shortcuts - 12 July 2004 [[User:Kirkpatc]]
 
* Added a summary table for IdeTools shortcuts - 12 July 2004 [[User:Kirkpatc]]
 +
* Preložené z originálu [[Lazarus Ide Tools]] - [[User:Slavko|Slavko]] 13:51, 25 Mar 2005 (PST)

Revision as of 23:51, 25 March 2005

Nástroje IDE Lazarus

Úvod

IDE používa knižnicu analýzy zdrojového kódu Pascal a editačných nástrojov, zvanú "codetools". Tieto nástrojeposkytujú funkcie ako hľadanie deklarácie (find declaration), dokončovanie kódu (code completion), odstraňovanie, presúvanie, vkladanie a formátovanie zdrojového kódu Pascal. Tieto funkcie šetria mnoho času a dupľovanej roboty. Sú nastaviteľné a každá funkcia je dostupná pomocou klávesovej skratky (viz Editor Options).

Pretože ich práca záleží na zdrojovom kóde a pochopení FreePascal, Delphi a Kylix kódu, nevyžadujú preložené jednotky ani nainštalovaný prekladač Borland. Môžete naraz upravovať kód Delphi aj FreePascal. Môžete dokonca pracovať s rôznymi verziami Delphi a FreePascal naraz. Tým sa stáva prenos kódu Delphi ešte jednoduchší.

Zhrnutie klávesových skratiek IDE

Prepínanie metód (Method Jumping) Ctrl+Shift+Up
Šablóny kódu (Code Templates) Ctrl+J
Dokončovanie kódu (Code/Class Completion) Ctrl+Shift+C
Dokončovanie identifikátorov (Identifier Completion) Ctrl+Space

Prepínanie metód

(Method Jumping)

Na prepínanie medzi telom procedúry (begin..end) a jej definíciou (procedure Name;) použite Ctrl+Shift+Up.

Príklad:

interface

procedure DoSomething; // procedure definition
 
implementation
 
procedure DoSomething; // procedure body 
begin
end;

Ak je kurzor v tele provedúry a stlačíte Ctrl+Shift+Up, kurzor skočí na definíciu. Ak znova stlačíte Ctrl+Shift+Up preskočí do tela procedúry, za 'begin'. Funkcia pracuje aj s metódami (procedúrami v triedach).

Tipy: 'Method Jumping' presúva kurzor na rovnakú procedúru s rovnakým menom i zoznamom parametrov. Ak presná procedúra neexistuje, skočí na najpodobnejšiu a umiestni kurzor na prvý rozdiel. V Delphi táto funkcia neexistuje.

Príklad procedúry s rôznymi typmi parametrov:

interface

procedure DoSomething(p: char); // procedure definition

implementation
  
procedure DoSomething(p: string); // procedure body
begin
end;

Preskočenie z definície do tela umiestni kurzor na kľúčové slovo 'string'. Túto vlastnosť môžete využiť na premenovanie metódy a/alebo zmenu jej parametrov.

Príklad: Premenovali ste 'DoSomething' na 'MakeIt':

interface

procedure MakeIt; // procedure definition

implementation

procedure DoSomething; // procedure body
begin
end;

Potom urobte skok z definície MakeIt do tela. IDE hľadá vhodné telo, nenájde žiadne, preto začne hľadať kandidátov. Keďže stepremenovali len jednu procedúru, tak je len jedno telo bez definície (DoSomething) a tak skočí do DoSomething a umiestni kurzor vpravo od 'DoSomething'. Potomm ju môžete jednoducho premenovať tiež. Toto rovnako pracuje s parametrami.

Include súbory

(Include Files)

Include súbory sú súbory vložené do zdrojového kódu pomocou direktív prekladača {$I filename} alebo {$INCLUDE filename}. Lazarus a FreePascal používajú veľa takýchto vecí na redukciu nadbytočnosti a vyhnutie sa nečitateľnosti konštrukcií {$IFDEF} pri podpore rôznych platforiem.

Narozdiel od Delphi, IDE Lazarus plne podporuje include súbory. Napríklad môžete skočiť z metódy v súbore .pas do tela metódy v include súbore. Všetky nástroje kódu, ako dokončovanie kódu, považuje include súbory za špeciálne hranice.

Napríklad: keď dokončovanie kódu pridáva telo novej metódy za telom inej metódy, ponechá ich obe v rovnakom súbore. Týmto spôsobom môžete vložiť celú implementáciu triedy do include súborov, ako to robí LCL pre skoro všetky prvky.

Ale je tu začiatočnícka chyba: Ak najprv otvoríte include súbor a skúsite prepínanie metód alebo hľadanie deklarácie, dostanete chybu. IDE nevie do ktorej jednotky include súbor patrí. Najprv musíte otvoriť jednotku.

Hneď ako IDE zanalyzuje jednotku, zachytí v nej include direktívy a IDE si bude pamätať tento vzťah. Tieto informácie IDE ukladá pri skončení a pri uložení projektu do ~/.lazarus/includelinks.xml. Keď nabudúce otvoríte súbor include a urobíte skok do neho alebo hľadanie deklarácie, IDE interne otvorí jednotku a skoky budú fungovať.

Tento mechanizmus má samozrejme obmedzenia, niektoré include súbory sú zahrnuté dva i viackrát. Napríklad: lcl/include/winapih.inc. Skákanie z definície procedúry/metódy v tomto include súbore do tela závisí na poslednej akcii. Ak ste pracovali v lcl/lclintf.pp, IDE skočí do winapi.inc. Ak ste pracovali v lcl/interfacebase.pp, potom skočíte do lcl/include/interfacebase.inc (alebo do jedného z ďalších include súborov). Ak pracujete s obomi, potom môže nastať zmätok. ;)

Šablóny kódu

(Code Templates)

Šablóny kódu konvertujú identifikátor v texte alebo fragmente kódu. Šablóny kódu majú prednastavenú klávesovú skratku Ctrl+J. Môžete napísať identifikátor, stlačiť Ctrl+J a identifikátor je nahradený textom definovaným pre identifikátor. Šablóny kódu môžete definovať v Environment -> Editor Options -> CodeTools.

Príklad: Napíšte identifikátor 'classf', ponechajte kurzor vpravo za 'f' a stlačte Ctrl+J. Identifikátor 'classf' bude nahradený týmto:

T = class(T)
private

public
  constructor Create;
  destructor Destroy; override;
end;

a kurzor bude za 'T'. Zoznam šablón získate tak, že kurzor ponecháte na medzere (nie ne identifikátore) a stlačíte Ctrl+J. Pomocou kurzorových klávesov alebon apísania niekoľkých znakov vyberte jeden. Enter vytvorí zvolenú šablónu a Esc zatvorí zoznam.

Dokončovanie kódu

(Code Completion)

Dokončovanie kódu nájdete v menu IDE Edit -> Complete Code a má štandartnú klávespvú skratku Ctrl+Shift+C. V Delphi je dokončovaním kódu volaná funkcia zobrazujúca zoznam identifikátorov na aktuálnej pozícii v zdrojovom kóde (Ctrl+Space). V Lazarus je toto nazývané dokončovanie identifikátorov (Identifier completion). Dokončovanie kódu v sebe združuje niekoľko užitočných funkcií:

  • Dokončovanie tried (Class Completion): dokončuje vlastnosti, pridáva telá metód, pridáva súkromné premenné a súkromné metódy;
  • Dokončovanie forward procedúr (Forward Procedure Completion): pridáva telá forward procedúr;
  • Dokončovanie priradenia udalostí (Event Assignment Completion): * dokončuje pridelenie udalostí a pridávanie tiel a definícií metód;
  • Dokončovanie lokálnych premenných (Local Variable Completion): pridáva definície lokálnych premenných.

Ktorá funkcia je použitá, závisí na pozícii kurzora v editore zdrojového kódu.

Dokončovanie tried

(Class Completion)

Veľmi výkonnou funkciou dokončovania kódu je "Dokončovanie tried". Vy píšete triedu, pridáte metódy a vlastnosti, a dokončovanie kódu pridá telá metód, metódy prístupu k vlastnostiam a súkromným premenným.

Príklad: Vytvorte triedu (viz Lazarus IDE Tools/sk#Šablóny_kódu Šablóny kódu, aby ste ušetrili rovnakú prácu):

TExample = class(TObject)
public
  constructor Create;
  destructor Destroy; override;
end;

Umiestnite kurzor niekde v definícii triedy a stlačte Ctrl+Shift+C. Tým budú vytvorené chýbajúce telá metód a kurzor bude presunutý na prvé vytvorené telo, takže môžete rovno začať písať kód triedy:

{ TExample }

constructor TExample.Create;
begin
  |
end;

destructor TExample.Destroy;
begin
  inherited Destroy;
end;

Poznámka: Značka '|' nie je pridaná, len ukazuje umiestnenie kurzora.

Tip: Prepínať medzi telom a definíciou metódy môžete pomocou Ctrl+Shift+Up.

Všimnite si, že IDE tiež pridáva volanie deštruktora základnej triedy (inherited Destroy). Toto je urobené, ak v definícii treidy použijete kľúčové slovo 'override'.

Teraz pridajtemetódu DoSomething:

TExample = class(TObject)
public
  constructor Create;
  procedure DoSomething(i: integer);
  destructor Destroy; override;
end;

Potom stlačte Ctrl+Shift+C a IDE pridá:

procedure TExample.DoSomething(i: integer);
begin
  |
end;

Ako môžete vidieť, nové telo metódy je vložené medzi Create a Destroy, presne ako je to v definícii. Týmto sú telá metód uchovávané v rovnakom logickom poradí, ako v definícii. Spôsob vkladania môžete definovať pomocou Environment > Codetools Options -> Code Creation.

Dokončovanie vlastností Pridajte vlastnosť AnInteger:

TExample = class(TObject)
public
  constructor Create;
  procedure DoSomething(i: integer);
  destructor Destroy; override;
  property AnInteger;
end;

Stlačte Ctrl+Shift+C a dostanete:

procedure TExample.SetAnInteger(const AValue: integer);
begin
  |if FAnInteger=AValue then exit;
  FAnInteger:=AValue;
end;

Dokončovanie kódu pridalo metódu pre prístup k zápisu do vlastnosti a nejaký základný kód.

Preskočte do triedy pomocou Ctrl+Shift+Up a uvidíte, že v triede pribudlo:

TExample = class(TObject)
private
  FAnInteger: integer;
  procedure SetAnInteger(const AValue: integer);
public
  constructor Create;
  procedure DoSomething(i: integer);
  destructor Destroy; override;
  property AnInteger: integer read FAnInteger write SetAnInteger;
end;

Vlastnosť bola rozšírená pridaním kľúčových slov Read a Write. V triede je nová sekcia private s premennou FAnInteger a metódou SetAnInteger. Pridanie F na začiatok privátnej premennej je bežnou notáciou Delphi, rovnako ako označenie prístupovej metódy pomocou Set. Ak to nechcete, môžete to zmeniť ponmocou Environment > Codetools Options -> Code Creation.

Vytvorenie read only vlastnosti:

property PropName: PropType read;

Bude rozšírené na:

property PropName: PropType read FPropName;

Vytvorenie write only vlstnosti:

 property PropName: PropType write;

Bude rozšírené na:

property PropName: PropType write SetPropName;

Vytvorenie read only vlastnosti s metódou Read:

property PropName: PropType read GetPropName;

Ostane nezmenené a bude pridaná funkcia GetPropName:

function GetpropName: PropType;

Vytvorenie vlastnosti s direktívou stored:

property PropName: PropType stored;

Bude rozšírené na:

property PropName: PropType read FPropName write SetPropName stored PropNameIsStored;

Pretože direktíva stored je používaná pre streamovanie čítania a zápisu, sú kľúčové slová read a write pridané tiež.

Tip: Dokončovanie identifikátorov tiež rozpoznáva nekompletné vlastnosti a navrhne predvolené mená. Napríklad:

property PropName: PropType read |;

Umiestnite kurzor za medzeru za kľúčovým slovom read a stlačte Ctrl+Space pre dokončovanie identifikátorov. To vám ponúkne premennú FPropName a procedúru SetPropName.

Dokončovanie forward procedúr

(Forward Procedure Completion)

Dokončovanie forward procedúr je časťou dokončovania kódu a pridáva telá chýbajúcich procedúr, ktoré sú definované. Je vyvolané, ak je kurzor na pripravenej definícii procedúry.

Napríklad: Pridajte novú procedúru do časti interface:

procedure DoSomething;

Umiestnite kurzor na ňu a stlačte Ctrl+Shift+C pre dokončovaniekódu. V časti implementation bude doplnené:

procedure DoSomething;
begin
  |
end;

Tip: Pomocou Ctrl+Shift+Up môžete prepínať medzi definíciou a telom procedúry.

Telo novej procedúry bude pridané pred metódy tried. Ak už sú v časti interface nejaké definície procedúr, IDE sa pokúsi zachovať ich poradie, napríklad:

 procedure Proc1;
 procedure Proc2; // nová procedúra
 procedure Proc3;

Ak telá Proc1 a Proc3 už existujú, potom bude telo Proc2 vložené medzi telá procedúr Proc1 a Proc3. Toto správanie môže byť zmené pomocou Environment > Codetools Options -> Code Creation.

Viacero procedúr:

procedure Proc1_Old; // telo existuje
procedure Proc2_New; // telo neexistuje
procedure Proc3_New; //  "
procedure Proc4_New; //  "
procedure Proc5_Old; // telo existuje

Dokončovanie kódu pridá 3 telá procedúr (Proc2_New, Proc3_New, Proc4_New).

Prečo sa to volá Dokončovanie forward procedúr"?

Pretože tento nástroj nepracuje len s procedúrami definovanými v časti interface, ale aj s procedúrami, ktoré sú definované pomocou kľúčového slova forward.

Dokončovanie priradenia udalostí

(Event Assignment Completion)

Dokončovanie priradenia udalostí je čsťou Dokončovania kódu a dokončuje jeden príkaz Event:=|. Nastáva, keď je kurzor umiestnený za príkazom priradenia udalosti.

Napríklad: V metóde, povedzme udalosti FormCreate event, pridajte riadok: 'OnPaint:=':

procedure TForm1.Form1Create(Sender: TObject);
begin
  OnPaint:=|
end;

Značka '|' je umiestnenie kurzora a netreba ju zadávať.

Potom stlačte Ctrl+Shift+C pre dokončovanie kódu. Príkaz priradenia udalosti bude doplnený takto:

OnPaint:=@Form1Paint;

Do triedy TForm1 bude pridaná nová metóda Form1Paint. Potom je spustené dokončovanie tried a dostanete:

procedure TForm1.Form1Paint(Sender: TObject);
begin
  |
end;

Pracuje presne ako pridávaniem etód v Object inspectore.

Poznámka: Kurzor musíte umiestniť za operátor priradenia ':='. Ak ho umiestnite na identifikátor (tj. OnPaint), dokončovanie kódu spustí Dokončovanie lokálnych premenných, ktoré zlyhá, pretože OnPaint je už definovaná.

Tip: Môžete definovať meno novej metódi aj sami, a to jej zadaním do priradenia, napríklad:

 OnPaint:=@ThePaintMethod;

Dokončovanie lokálnych premenných

(Local Variable Completion)

Dokončovanie lokálnych premenných je časťou Dokončovania kódu a pridáva definíciu lokálnej premennej pre príkaz Identifier:=Term;. Je spustené, keď je kurzor umiestnený na identifikátore v priradení.

Napríklad:

procedure TForm1.Form1Create(Sender: TObject);
begin
  i:=3;
end;

Umiestnite kurzor na 'i' alebo tesne za neho, potom stlačte Ctrl+Shift+C pre dokončovanie kódu a dostanete:

procedure TForm1.Form1Create(Sender: TObject);
var
  i: Integer;
begin
  i:=3;
end;

Nástroj dokončovania kódu najprv skontroluje, či identifikátor 'i' už nie je definovaný a ak nie, pridá deklaráciu 'var i: integer;'. Typ identifikátora je odhadovaný podľa pravej strany príkazu priradenia. Čísla ako 3 sú identifikované ako Integer.

Iný príklad: type

 TWhere = (Behind, Middle, InFront);

 procedure TForm1.Form1Create(Sender: TObject);
 var
   a: array[TWhere] of char;
 begin
   for Where:=Low(a) to High(a) do writeln(a[Where]);
 end;

Umiestnite kurzor na 'Where' a stlačte Ctrl+Shift+C pre dokončenie kódu. Dostanete:

procedure TForm1.Form1Create(Sender: TObject);
var
  a: array[TWhere] of char;
  Where: TWhere;
begin
  for Where:=Low(a) to High(a) do writeln(a[Where]);
end;

Komentáre a dokončovanie kódu

(Comments and Code Completion)

Dokončovanie kódu sa pokúša uchovávať komentáre tam, kde sú. Príklad:

 FList: TList; // zoznam prvkov TComponent
 FInt: integer;

Pri vkladaní novej premennej medzi FList a FInt, je komentár ponechaný na riadku spolu s FList. To platí i pre:

 FList: TList; { zoznam prvkov TComponent
   Toto je komentár na niekoľkých riadkoch, začínajúci
   na riadku s FList, tak nástroj dokončenia kódu predpokladá že patrí 
   k riadku s FList a nepreruší tento vzťah.
   Kód bude vložený za komentár. }
 FInt: integer;

Ak komentár začína na ďalšom riadku:

 FList: TList; // zoznam prvkov TComponent
   { Tento komentár patrí k nasledujúcemu riadku. 
     Nový kód je vložený pred tentokomentár a 
     za komentár na riadku s FList. }
 FInt: integer;


Refactoring

Otočenie priradenie

(Invert Assignments)

Zhrnutie
: Otočenie priradenia pracuje s vybratými príkazmi Pascalu a obracia všetky priradenia z tohoto výberu. Tento nástroj je užitočný pre transformáciu "save" kódu na "load" a naopak.

Príklad:

procedure DoSomething;
begin
  AValueStudio:= BValueStudio;
  AValueAppartment :=BValueAppartment;
  AValueHouse:=BValueHouse;
end;

Vyberte riadky s priradeniami (medzi begin a end) a urobte Spätné priradenie. Všetky priradenia budú otočené a automaticky odsadené. Výsledok:

procedure DoSomething;
begin
  BValueStudio     := AValueStudio;
  BValueAppartment := AValueAppartment;
  BValueHouse      := AValueHouse;
end;

Extract Procedure

Zhrnutie
: "Export Procedure" pracuje s vybratými príkazmi Pascalu a vytvára z tohoto výberu novú procedúru/metódu. Tento nástroj je užitočný na rozdelenie veľkých provedúr alebo na jednoduché vytvorenie novej procedúry z nejakého kódu.

Základný príklad:

procedure DoSomething;
begin
  CallSomething;
end;

Vyberte riadok "CallSomething;" a vykonajte Extract Proc. Vyskočí dialóg a môžete zvoliť typ a meno procedúry, ktorá má byť vytvorená. Napríklad: procedure, "NewProc". Výsledok:

procedure NewProc;
begin
  CallSomething;
end;

procedure DoSomething;
begin
  NewProc;
end;

Všimnite si, že nová procedúra "NewProc" bola vytvorená z vybratého textu, teda vybratý text bol pridaný do jej tela a a starý kód bol nahradený jej volaním.

Lokálne premenné a parametre: "Extract Proc" kontroluje použité premenné a automaticky vytvára zoznam parametrov a locálnych premenných. Napríklad:

procedure TForm1.DoSomething(var Erni, Bert: integer);
var
  i: Integer; // Comment
begin
  Erni:=Erni+Bert;
  for i:=Erni to 5 do begin
  |
  end;
end;

Vyberte cyklus for a vytvorte novú procedúru "NewProc". Lokálna premenná "i" je použitá len vo výbere, tak bude presunutá do novej procedúry. "Erni" je použité aj vo zvyšku kódu, tak sa z neho stane parameter:

procedure NewProc(const Erni: integer);
var
  i: Integer; // Comment
begin
  for i:=Erni to 5 do begin
  |
  end;
end;

procedure TForm1.DoSomething(var Erni, Bert: integer);
begin
  Erni:=Erni+Bert;
  NewProc(Erni);
end;

Všimnite si, že "i" bolo presunuté do novej procedúry vrátane komentára.

Obmedzenia: Pascal je veľmi výkonný jazyk, tak neočakávajte, že tento nástroj bude pracovať s celým kódom. Aktuálne obmedzenia:

  • preverte, či hranice výberu sú na hraniciach príkazov
  • heuristika pre parametre 'var'. Všetky parametre sú pridávané ako "const". Ak potrebujete "var", musíte to dokončiť manuálne.
  • príkazy "with"

Hľadanie deklarácie

(Find Declaration)

Umiestnite kurzor na identifikátor a urobte Hľadanie deklarácie, tým bude nájdená deklarácia tohoto identifikátora, prípadne otvorený príslušný súbor a kurzor bude premiestnený na miesto deklarácie.

Každé hľadanie deklarácie nastavuje bod skoku. Tzn. po skoku na nájdenú deklaráciu môžete jednoduchos skočiť naspäť pomocou Search -> Jump back.

Oproti Delphi má nástroj isté rozdiely: Nástroj pracuje so zdrojovým kódom na základe pravidiel Pascalu, a nie s výsledkom prekladača. The compiler returns the final type. Nástroj prezerá zdrojové kódy a všetky kroky medzi. Napríklad:

Vlastnosť 'Visible' je najprv definovaná v TControl (controls.pp), potom je predefinovaná v TCustomForm a nakoniec úredefinovaná aj v TForm. Spustenie hľadania deklarácie vlastnosti Visible vás najprv presunie na Visible v TForm. Potom môžete spustiť hľadanie deklarácie znova a skočíte na Visible v TCustomForm a znova pre skočenie na Visible v TControl.

Obdobne je to s TColor. Pre prekladač je to jednoducho 'longint', ale v zdrojovom kóde je to definované ako:

TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;
TColor = TGraphicsColor;

Obdobné je to aj s forward definovanými triedami: Napríklad v TControl je priávtna premenná

FHostDockSite: TWinControl;

Hľadanie deklarácie pre TWinControl skočí na forward definíciu:

TWinControl = class;

A opätovné spustenie hľadania deklarácie skočí na skutočnú implementáciu:

TWinControl = class(TControl)

Týmto spôsobom môžete stopovať každý identifikátor a nájsť každé predefinovanie, či preťaženie.

Prejdi do direktívy include

(Goto Include Directive)

Tento príkaz v menu Searchskočí do príkazu (direktívy) {$I filename}, v ktorej je použitý aktuálny súbor.

Publikuj Projekt

Vytvára kópiu celého projektu. Ak chcete niekomu poslať len zdrojové kódy a nastavenia prekladača pre svoj kód, budete kamarátis touto funkciou.

Bežný adresár projektu obsahuje množstvo informácií. Väčšinu z nich publikovať netreba. Súbor .lpi obsahuje informácie o relácii (ako pozíciu caret a záložiek zatvorených jednotiek) a adresár projektu obsahuje mnoho súborov .ppu a .o, a tiež .exe. A práve príkaz Publikuj projekt vytvorí súbor .lpi len so základnými informáciami a všetky zdrojové kódy, so všetkých podadresárov.

V ponúknutom dialógu môžete nastaviť filter pre zahrnutie/vynechanie, či pre kompresiu výstupu do jediného archívu.

Spolupracovníci

This page has been converted from the epikwiki version.

  • Created page and initial template - 4/6/2004 VlxAdmin
  • Initial content posted - 4/10/2004 MattiasG
  • Small wiki and formatting fixes - 4/11/2004 VlxAdmin
  • Added a summary table for IdeTools shortcuts - 12 July 2004 User:Kirkpatc
  • Preložené z originálu Lazarus Ide Tools - Slavko 13:51, 25 Mar 2005 (PST)