Sign in Join
Wiki copytemporary

Lazarus IDE Tools/fr: what changed

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

OldNewLine
11## Vue d'ensemble
22
33L'EDI Lazarus utilise des outils d'analyse et d'édition, appelés les "outils de code". Ces outils permettent de retrouver une déclaration, de compléter du code, d'extraire, de déplacer, d'insérer, et de mettre en valeur des sources pascal. Ces fonctions font gagner du temps et permettent de doubler le rendement. Elles sont paramétrables et chacune d'entre elles est accessible par l'intermédiaire de raccourcis (cf. les options de l'éditeur).
44
55Parce qu'ils travaillent uniquement sur des sources et du code FPC (FPC : Free Pascal Compiler), Delphi, et Kylix compréhensible, ils n'ont pas besoin d'unités compilées ni d'un compilateur Borland installé. Vous pouvez éditer le code Delphi et celui du FPC en même temps. Vous pouvez même travailler avec plusieurs versions de Delphi et FPC en même temps. Ce qui rend le portage du code source Delphi beaucoup plus aisé.
66
77## Tableau synoptique des raccourcis de l'EDI
88
99| | |
1010|----|----|
1111| [[Lazarus IDE Tools/fr|Saut de Déclaration]] | Ctrl+Clic (saut à la déclaration du type ou de la variable) |
1212| [[Lazarus IDE Tools/fr|Saut de Méthode]] | Ctrl+Maj+Haut (basculer entre la définition et le corps) |
1313| [[Lazarus IDE Tools/fr|Code Templates]] | Ctrl+J |
1414| [[Lazarus IDE Tools/fr|Complétion de code]] (Complétion de classe)   | Ctrl+Maj+C |
1515| [[Lazarus IDE Tools/fr|Complétion d'identificateur]] | Ctrl+Espace |
1616| [[Lazarus IDE Tools/fr|Complétion de Mot]] | Ctrl+W |
1717| [[Lazarus IDE Tools/fr|Conseils de paramètre]] | Ctrl+Shift+Space |
1818
1919## Saut de Méthode
2020
2121Pour sauter du corps d'une procédure (begin..end) à sa définition (procédure NomProcedure;) utilisez Ctrl+Maj+Haut.
2222
2323Par exemple :
2424
2525`interface`\
26-\
26+
2727`procedure DoSomething; // déclaration de la procédure`\
2828` `\
2929`implementation`\
3030` `\
3131`procedure DoSomething; // corps de la procédure `\
3232`begin`\
3333`end;`
3434
3535Si le curseur est dans le corps de la procédure appuyez sur Ctrl+Maj+Haut, le curseur sautera à la définition. Une nouvelle pression sur les touches Ctrl+Maj+Haut sautera de la déclaration au corps, après 'begin'.
3636
3737Ceci fonctionne également avec les méthodes (procédures dans les classes).
3838
3939Conseils : 'Saut de Méthode' saute jusqu'à la même procédure du même nom et de même(s) paramètre(s). Si aucune procédure ne correspond, le saut se fait sur la plus ressemblante et place le curseur sur la première différence. (Note aux Delphinautes : Delphi ne sait pas le faire).
4040
4141Par exemple une procédure avec différents types de paramètre :
4242
4343`interface`\
44-\
44+
4545`procedure DoSomething(p: char); // déclaration de la procédure`\
46-\
46+
4747`implementation`\
4848`  `\
4949`procedure DoSomething(p: string); // corps de la procédure`\
5050`begin`\
5151`end;`
5252
5353Sauter de la définition au corps placera le curseur sur le mot-clé 'string'. Ceci peut être employé pour renommer des méthodes et/ou changer les paramètres.
5454
5555Par exemple :\
5656Vous avez renommé 'DoSomething' en 'MakeIt' :
5757
5858`interface`\
59-\
59+
6060`procedure MakeIt; // déclaration de la procédure`\
61-\
61+
6262`implementation`\
63-\
63+
6464`procedure DoSomething; // corps de la procédure`\
6565`begin`\
6666`end;`
6767
6868Lorsque vous sautez de MakeIt au corps. L'EDI recherche le corps correspondant, ne le trouve pas, et par conséquent recherche le meilleur 'candidat'. Puisque vous n'avez renommé qu'une procédure il n'y a qu'un corps de procédure sans définition (DoSomething) et ainsi le saut se fera sur DoSomething et le curseur se placera sur 'DoSomething'. Maintenant, il suffit simplement de la renommer ici aussi. Ceci fonctionne de la même manière sur des paramètres.
6969
7070## Fichiers d'inclusion
7171
7272Les fichiers d'inclusion sont des fichiers insérés dans les sources à l'aide de la directive de compilation {\$I nom de fichier} ou {\$INCLUDE nom de fichier}. Lazarus et FPC l'utilisent beaucoup pour éviter la redondance de l'illisible {\$IFDEF} conçue pour supporter différentes plateformes.
7373
7474Contrairement à Delphi, l'EDI Lazarus intègre le support complet des fichiers d'inclusion. Vous pouvez par exemple sauter de la méthode du fichier .pas au corps de la méthode dans le fichier d'inclusion. Tous les outils de code comme la complétion de code, considèrent les fichiers d'inclusion en tant que marqueurs spéciaux.
7575
7676Par exemple : quand la complétion de code ajoute un nouveau corps de méthode derrière un autre corps de méthode, il les maintient tous les deux dans le même fichier. De cette façon, vous pouvez mettre l'implémentation de la classe, entièrement dans le fichier d'inclusion, comme le LCL le fait pour presque tous les composants.
7777
7878Mais il y a un piège pour le novice : si vous ouvrez un fichier d'inclusion pour la première fois, et que vous essayez de sauter à la méthode, ou de trouver sa déclaration, vous obtiendrez un message d'erreur. L'EDI ne sait pas à quelle unité le fichier d'inclusion fait référence. Vous devez ouvrir l'unité d'abord.
7979
8080Dès que l'EDI analysera l'unité, il analysera les directives d'inclusion et se rappellera cette relation. Il sauvegardera cette information sur la sortie et sur le projet sauvegardé sous ~/.lazarus/includelinks.xml. La prochaine fois que vous ouvrirez le fichier d'inclusion et ferez un saut ou une recherche de déclaration, l'EDI retrouvera l'unité et le saut fonctionnera.
8181
8282Ce mécanisme a naturellement des limites. Certains fichiers d'inclusion sont inclus deux fois ou plus. Par exemple : lcl/include/winapih.inc.
8383
8484Sauter des définitions de procedure/method dans le fichier d'inclusion aux corps dépend de vos dernières actions. Si vous travailliez sur lcl/lclintf.pp l'EDI sautera sur winapi.inc. Si vous travailliez à lcl/interfacebase.pp, alors il sautera à lcl/include/interfacebase.inc (ou à l'un des autres fichiers d'inclusion). Si vous travaillez sur les deux, alors vous pouvez vous emmêler les pinceaux. ;)
8585
8686## Code Templates
8787
8888Les Code Templates convertissent un identificateur en texte ou en fragment de code.
8989
9090Le raccourci par défaut des Code Templates est Ctrl+J. Vous pouvez saisir un identificateur, presser Ctrl+J et l'identificateur est remplacé par le texte défini pour cet identificateur. Des Code Templates peuvent être définis dans l'environnement - \> Configuration - \> Code Templates.
9191
9292Exemple : écrivez 'classf ', laissez le curseur juste derrière le 'f ' et appuyez Ctrl+J. Le 'classf 'sera remplacé par
9393
9494`T = class(T)`\
9595`private`\
96-\
96+
9797`public`\
9898`  constructor Create;`\
9999`  destructor Destroy; override;`\
100100`end;`
101101
102102et le curseur sera derrière le 'T'. Vous pouvez obtenir la liste des identificateurs en plaçant le curseur sur un espace (pas sur un identificateur) et en appuyant sur Ctrl+J. La liste des code templates apparaîtra. Utilisez la souris, les touches de direction du clavier ou saisissez quelques caractères pour en choisir un. La touche entrée crée le modèle sélectionné et quitte la fenêtre pop up.
103103
104104Les plus grands économiseurs de temps sont les templates 'b'+Ctrl+J pour begin..end.
105105
106106## Conseils de paramètre
107107
108108Les conseils de paramètre montrent une boîte de conseil avec les déclarations de paramètres pour la liste courante de paramètres .
109109
110110Par exemple
111111
112112`Canvas.FillRect(|);`
113113
114114Placer le curseur dans les parenthèses et presser sur Ctrl+Shift+Space. Une boîte de conseil apparaîtra montrant les paramètres de FillRect.
115115
116116## Complétion de code
117117
118118Pour les Delphinautes : Delphi appelle la "Complétion de code" la fonction montrant la liste des identificateurs à la position courante du code source (Ctrl+Espace). Sous Lazarus cela s'appelle le "Complétion d'identificateur".
119119
120120La complétion de code combine de puissantes fonctions. Exemples :
121121
122122- [[Lazarus IDE Tools/fr|Complétion de classe]] : complète des propriétés, ajoute des corps de méthode, ajoute des variables et des méthodes privées ;
123123- [[Lazarus IDE Tools/fr|Complétion de procédure vers l'avant]] : ajoute des corps de procédure ;
124124- [[Lazarus IDE Tools/fr|Complétion d'assignation d'événement]] : complète les assignations d'événement et ajoute la définition et le corps de la méthode ;
125125- [[Lazarus IDE Tools/fr|Complétion de déclaration de variable]] : ajoute des définitions de variables locales.
126126
127127La fonction utilisée dépend de la position du curseur dans l'éditeur.
128128
129129Le Complétion de code peut être trouvée dans le menu de l'EDI Editer - \> Compléter le code en utilisant le raccourci standard Ctrl+Maj+C.
130130
131131### Complétion de classe
132132
133133Le dispositif de complétion de code le plus puissant est "complétion de classe". Vous écrivez une classe, ajoutez les méthodes et les propriétés et la complétion de code ajoutera les corps de méthode, l'accès méthodes/variables des propriétés et les variables privées.
134134
135135Par exemple : créez une classe (voir les code templates pour savoir quel type) :
136136
137137`TExample = class(TObject)`\
138138`public`\
139139`  constructor Create;`\
140140`  destructor Destroy; override;`\
141141`end;`
142142
143143Placez le curseur quelque part dans la classe et appuyez Ctrl+Maj+C. Ceci créera les corps de méthode manquants et déplacera le curseur au premier corps de méthode créé, ainsi vous pouvez juste commencer à écrire la classe :
144144
145145`{ TExample }`\
146-\
146+
147147`constructor TExample.Create;`\
148148`begin`\
149149`  |`\
150150`end;`\
151-\
151+
152152`destructor TExample.Destroy;`\
153153`begin`\
154154`  inherited Destroy;`\
155155`end;`
156156
157157Note : '\|' est le curseur et n'est pas à ajouter.
158158
159159Conseil : vous pouvez sauter entre une méthode et son corps avec Ctrl+Maj+Haut.
160160
161161Vous pouvez voir que l'EDI a ajouté 'inherited Destroy'. Ceci est fait s'il y a le mot clé 'override' dans la définition de classe.
162162
163163Ajoutez maintenant une méthode DoSomething :
164164
165165`TExample = class(TObject)`\
166166`public`\
167167`  constructor Create;`\
168168`  procedure DoSomething(i: integer);`\
169169`  destructor Destroy; override;`\
170170`end;`
171171
172172Ensuite pressez Ctrl+Maj+C et l'EDI ajoutera
173173
174174`procedure TExample.DoSomething(i: integer);`\
175175`begin`\
176176`  |`\
177177`end;`
178178
179179Vous constaterez, que le nouveau corps de méthode a été inséré entre Create et Destroy, exactement comme dans la définition de classe. De cette façon, le corps du programme garde la même logique que celle que vous avez définie dans la classe. Vous pouvez définir la politique d'insertion dans l'environnement -\> Configuration -\> Modèles de code.
180180
181181**Compléter les Propriétés**\
182182Ajoutez une propriété AnInteger :
183183
184184`TExample = class(TObject)`\
185185`public`\
186186`  constructor Create;`\
187187`  procedure DoSomething(i: integer);`\
188188`  destructor Destroy; override;`\
189189`  property AnInteger: Integer;`\
190190`end;`
191191
192192Appuyez Ctrl+Maj+C et vous obtiendrez :
193193
194194`procedure TExample.SetAnInteger(const AValue: integer);`\
195195`begin`\
196196`  |if FAnInteger=AValue then exit;`\
197197`  FAnInteger:=AValue;`\
198198`end;`
199199
200200La complétion de code a ajouté un spécificateur d'accès en écriture ainsi que du code courant. Sautez à la classe avec Ctrl+Maj+Haut pour voir les changements :
201201
202202`TExample = class(TObject)`\
203203`private`\
204204`  FAnInteger: integer;`\
205205`  procedure SetAnInteger(const AValue: integer);`\
206206`public`\
207207`  constructor Create;`\
208208`  procedure DoSomething(i: integer);`\
209209`  destructor Destroy; override;`\
210210`  property AnInteger: integer read FAnInteger write SetAnInteger;`\
211211`end;`
212212
213213La propriété a été étendue avec des spécificateurs d'accès en lecture et en écriture. La classe a intégré une nouvelle section 'privée' avec une variable 'FAnInteger' et la méthode 'SetAnInteger '. C'est une convention de Delphi que d'ajouter des variables privées avec un 'F 'et la méthode d'inscription avec un 'Set'. Si vous n'aimez pas, vous pouvez la modifier dans l'environnement -\> Configuration -\> Options... -\> Outils de code -\> Class completion.
214214
215215Une propriété créée pour la lecture seule :
216216
217217`property PropName: PropType read;`
218218
219219sera étendue en
220220
221221`property PropName: PropType read FPropName;`
222222
223223Une propriété créée en écriture seule
224224
225225` property PropName: PropType write;`
226226
227227sera étendue en
228228
229229`property PropName: PropType write SetPropName;`
230230
231231Une propriété créée en lecture seule avec une méthode read
232232
233233`property PropName: PropType read GetPropName;`
234234
235235sera conservée et la fonction GetPropName sera ajoutée
236236
237237`function GetpropName: PropType;`
238238
239239Créer une propriété avec un spécificateur de stockage
240240
241241`property PropName: PropType stored;`
242242
243243sera étendue en
244244
245245`property PropName: PropType read FPropName write SetPropName stored PropNameIsStored;`
246246
247247Puisque le stockage est utilisé pour les spécificateurs de flux de lecture/écriture le code est complété en fonction.
248248
249249Conseil : la complétion d'identificateur reconnaît aussi des propriétés incomplètes et suggérera les noms implicites. Par exemple :
250250
251251`property PropName: PropType read |;`
252252
253253Placez l'espace du curseur derrière le mot-clé 'read' et appuyez sur Ctrl+Espace pour la complétion d'identificateur. Il vous présentera la variable 'FPropName' et la procédure 'SetPropName '.
254254
255255### Complétion de procédure vers l'avant
256256
257257La "Complétion de procédure vers l'avant" fait partie de la complétion de code et ajoute les corps des procédures absentes. Elle est appelée quand le curseur est sur une procédure déjà définie.
258258
259259Par exemple : Ajoutez une nouvelle procédure dans la section interface :
260260
261261`procedure DoSomething;`
262262
263263Placez le curseur dessus et appuyez Ctrl+Maj+C pour compléter le code. Elle sera crée dans la section implémentation :
264264
265265`procedure DoSomething;`\
266266`begin`\
267267`  |`\
268268`end;`
269269
270270Conseil : vous pouvez sauter entre une définition de procédure et son corps avec Ctrl+Maj+Haut.
271271
272272Le nouveau corps de procédure sera ajouté devant les méthodes de classe. S'il y a déjà quelques procédures dans l'interface, l'EDI essaye de garder l'ordre. Par exemple :
273273
274274` procedure Proc1;`\
275275` procedure Proc2; // nouvelle procédure`\
276276` procedure Proc3;`
277277
278278Si les corps de Proc1 et de Proc3 existent déjà, alors le corps Proc2 sera inséré entre les corps de Proc1 et Proc3. Ce comportement peut être paramétré dans l'environnement -\> Configuration -\> Options... -\> Outils de code -\> Création de code -\> Préserver l'ordre des procédures.
279279
280280Procédures multiples :
281281
282282`procedure Proc1_Old; // le corps existe`\
283283`procedure Proc2_New; // le corps n'existe pas`\
284284`procedure Proc3_New; //  "`\
285285`procedure Proc4_New; //  "`\
286286`procedure Proc5_Old; // le corps existe`
287287
288288La complétion de code ajoutera chacun des 3 corps de procédure (Proc2_New, Proc3_New, Proc4_New).
289289
290290Pourquoi l'appeler "Complétion de procédure vers l'avant" ?
291291
292292Parce qu'elle fonctionne non seulement pour les procédures définies dans l'interface, mais aussi pour les procédures avec le spécificateur "Forward".
293293
294294### Complétion d'assignation d'événement
295295
296296"La complétion d'assignation d'événement" fait partie de la complétion de code Event : = NomMethode. Elle est appelée quand le curseur est derrière l'assignation d'un événement.
297297
298298Par exemple : dans une méthode, par exemple l'événement FormCreate, ajoutez une ligne 'OnPaint : = ':
299299
300300`procedure TForm1.Form1Create(Sender: TObject);`\
301301`begin`\
302302`  OnPaint:=|`\
303303`end;`
304304
305305Le '\|' est le curseur et ne doit pas être ajouté. Appuyez sur Ctrl+Maj+C pour compléter le code. Le rapport sera rempli par
306306
307307`OnPaint:=@Form1Paint;`
308308
309309Une nouvelle méthode Form1Paint sera ajoutée à la classe TForm1. Alors la complétion de classe est lancée et vous obtiendrez :
310310
311311`procedure TForm1.Form1Paint(Sender: TObject);`\
312312`begin`\
313313`  |`\
314314`end;`
315315
316316Ceci fonctionne seulement pour ajouter des méthodes dans l'inspecteur d'objet.
317317
318318Note:\
319319vous devez placer le curseur derrière l'opérateur ': = '. Si vous placez le curseur sur l'identificateur (par exemple OnPaint), la complétion de code appellera "la complétion de variable locale", qui échouera, car onPaint est déjà définie.
320320
321321Conseil :\
322322vous pouvez définir le nouveau nom de méthode par vous-même. Par exemple :
323323
324324` OnPaint:=@ThePaintMethod;`
325325
326326### Complétion de déclaration de variable
327327
328328La "complétion de déclaration de variable" fait partie de la complétion de code et ajoute une définition de variable locale pour un Identificateur:=ValeureAAffecter. Elle est appelée quand le curseur est sur l'identificateur d'une tâche ou d'un paramètre.
329329
330330Par exemple :
331331
332332`procedure TForm1.Form1Create(Sender: TObject);`\
333333`begin`\
334334`  i:=3;`\
335335`end;`
336336
337337Placez le curseur sur le 'i' ou juste derrière lui. Appuyez alors sur Ctrl+Maj+C pour la complétion de code et vous obtiendrez :
338338
339339`procedure TForm1.Form1Create(Sender: TObject);`\
340340`var`\
341341`  i: Integer;`\
342342`begin`\
343343`  i:=3;`\
344344`end;`
345345
346346Les outils de code font les premières vérifications, si la variable 'i' n'est pas encore déclarée, la déclaration est intégrée au code. Le type de la variable est automatiquement détecté en fonction du type de la valeur affectée à la variable à droite de l'opérateur ': = '.
347347
348348Un autre exemple :
349349
350350`type`\
351351` TWhere = (Behind, Middle, InFront);`\
352-\
352+
353353` procedure TForm1.Form1Create(Sender: TObject);`\
354354` var`\
355355`   a: array[TWhere] of char;`\
356356` begin`\
357357`   for Where:=Low(a) to High(a) do writeln(a[Where]);`\
358358` end;`
359359
360360Placez le curseur sur 'Where' et appuyez sur Ctrl+Maj+C pour la complétion de code. Vous obtenez :
361361
362362` procedure TForm1.Form1Create(Sender: TObject);`\
363363` var`\
364364`   a: array[TWhere] of char;`\
365365`   Where: TWhere;`\
366366` begin`\
367367`   for Where:=Low(a) to High(a) do writeln(a[Where]);`\
368368` end;`
369369
370370Depuis la version 0.9.11 Lazarus complète également des paramètres. Par exemple
371371
372372` procedure TForm1.FormPaint(Sender: TObject);`\
373373` begin`\
374374`   with Canvas do begin`\
375375`     Line(x1,y1,x2,y2);`\
376376`   end;`\
377377` end;`
378378
379379Placez le curseur sur 'x1 'et appuyez sur Ctrl+Maj+C pour la complétion de code. Vous obtenez :
380380
381381` procedure TForm1.FormPaint(Sender: TObject);`\
382382` var`\
383383`   x1: integer;`\
384384` begin`\
385385`   with Canvas do begin`\
386386`     Line(x1,y1,x2,y2);`\
387387`   end;`\
388388` end;`
389389
390390### Complétion inverse de classe
391391
392392La "Complétion inverse de classe" est un aspect la complétion de code. Elle ajoute une déclaration de méthode privée correspondant au corps de méthode courant. Elle est appelée quand le curseur se trouve dans le corps d'une méthode qui n'est pas encore définie dans la classe. Cette fonctionnalité est disponible depuis la version 0.9.21 de Lazarus.
393393
394394Par exemple :
395395
396396` procedure TForm1.DoSomething(Sender: TObject);`\
397397` begin`\
398398` end;`
399399
400400La méthode DoSomething n'est pas encore déclarée dans TForm1. Pressez Ctrl+Shift+C et l'IDE ajoutera "procedure DoSomething(Sender: TObject);" aux méthodes privées de TForm1.
401401
402402Pour les delphinautes : la complétion de code sous Lazarus fonctionne toujours dans un seul sens : de l'interface de la classe à son implémentation, ou à l'envers de l'implémentation de la classe à son interface. Delphi fonctionne toujours dans les deux sens, ce qui a pour inconvénient qu'une coquille engendrera facilement - sans avertissement - une nouvelle amorce de méthode.
403403
404404### Commentaires et Complétion de code
405405
406406La complétion de code essaie de conserver les commentaires là où ils sont. Par exemple :
407407
408408` FList: TList; // liste de TComponent`\
409409` FInt: integer;`
410410
411411En insérant une nouvelle variable entre FList et FInt, le commentaire est maintenu dans la ligne de FList. C'est également vrai pour
412412
413413` FList: TList; { list of TComponent`\
414414`   This is a comment over several lines, starting`\
415415`   in the FList line, so codetools assumes it belongs `\
416416`   to the FLIst line and will not break this `\
417417`   relationship. Code is inserted behind the comment. }`\
418418` FInt: integer;`
419419
420420Si le commentaire commence à la ligne suivante :
421421
422422` FList: TList; // liste de TComponent`\
423423`   { This comment belongs to the statement below. `\
424424`     New code is inserted above this comment and `\
425425`     behind the comment of the FList line. }`\
426426` FInt: integer;`
427427
428428## Réusinage de code (Refactoring)
429429
430430### Inverser les assignations
431431
432432Résumé
433433"L'inversion d'assignation" inverse toutes les affectation du code sélectionné de l'éditeur. Cet outil est très pratique pour transformer un code de "sauvegarde" en code de "chargement", l'une étant l'opération inverse de l'autre.
434434
435435Exemple :\
436436procedure DoSomething;
437437
438438`begin`\
439439`  AValueStudio:= BValueStudio;`\
440440`  AValueAppartment :=BValueAppartment;`\
441441`  AValueHouse:=BValueHouse;`\
442442`end;`
443443
444444Choisissez les lignes avec affectation (entre begin et end) et inversez les affectations. Toutes les affectations seront inversées et l'indentation sera ajoutée automatiquement. Par exemple :
445445
446446Résultat :
447447
448448`procedure DoSomething;`\
449449`begin`\
450450`  BValueStudio     := AValueStudio;`\
451451`  BValueAppartment := AValueAppartment;`\
452452`  BValueHouse      := AValueHouse;`\
453453`end;`
454454
455455### Procédure d'extraction
456456
457457Résumé
458458L'"extraction de procédure" récupère le code pascal sélectionné est crée une procédure/méthode avec ce code. Cet outil est utile pour dédoubler de grandes procédures ou pour créer facilement une nouvelle procédure à partir d'un certain code.
459459
460460Exemple basique :\
461461procedure DoSomething;
462462
463463`begin`\
464464`  CallSomething;`\
465465`end;`
466466
467467Choisissez la ligne "CallSomething;" et extrayez Proc. Une boîte de dialogue apparaît et vous pouvez choisir le type et le nom de la procédure à créer. Par exemple : procédure, "NewProc". Résultat :
468468
469469`procedure NewProc;`\
470470`begin`\
471471`  CallSomething;`\
472472`end;`\
473-\
473+
474474`procedure DoSomething;`\
475475`begin`\
476476`  NewProc;`\
477477`end;`
478478
479479Vous constaterez que la nouvelle procédure "NewProc" a été créée avec la sélection tandis que le vieux code a été remplacé par un appel à "NewProc".
480480
481481Variables locales et paramètres :\
482482l'"Extraction de procédure" récupère les variables utilisées et crée automatiquement la liste des paramètres et les variables locales. Exemple :
483483
484484`procedure TForm1.DoSomething(var Erni, Bert: integer);`\
485485`var`\
486486`  i: Integer; // Commentaire`\
487487`begin`\
488488`  Erni:=Erni+Bert;`\
489489`  for i:=Erni to 5 do begin`\
490490`  |`\
491491`  end;`\
492492`end;`
493493
494494Sélectionnez la boucle for et créez une nouvelle procédure "NewProc". La variable locale i n'est utilisée que dans la sélection, ainsi elle sera déplacée dans la nouvelle procédure. Erni est également employée dans le code restant, dans lequel elle deviendra un paramètre.
495495
496496Résultat :\
497497procedure NewProc(const Erni: integer);
498498
499499`var`\
500500`  i: Integer; // Commentaire`\
501501`begin`\
502502`  for i:=Erni to 5 do begin`\
503503`  |`\
504504`  end;`\
505505`end;`\
506-\
506+
507507`procedure TForm1.DoSomething(var Erni, Bert: integer);`\
508508`begin`\
509509`  Erni:=Erni+Bert;`\
510510`  NewProc(Erni);`\
511511`end;`
512512
513513Vous pouvez voir que "i" a été déplacée dans la nouvelle procédure (avec son commentaire), de même que Erni.
514514
515515Limitations :\
516516le Pascal est un langage très puissant, ainsi cela fonctionnera sur chaque code. Les limites actuelles sont :
517517
518518- qu'il vous faut vérifier que les limites de la sélection soient compatibles avec la portée des variables ;
519519- la déclaration "with".
520520
521521## Trouver la référence de l'identificateur
522522
523523Placez le curseur sur un identificateur et "trouver la référence de l'identificateur". Alors elle recherchera la déclaration de cet identificateur, ouvrira le fichier et se positionnera dessus. Chaque déclaration a un point de saut. Cela signifie que le saut peut se faire dans un sens ou dans l'autre avec Chercher -\> En arrière.
524524
525525Il y a quelques différences avec Delphi : les outils de code travaillent sur des sources selon les règles normales du Pascal, au lieu d'employer le compilateur. Le compilateur renvoie le type final. Les outils de code voient les sources et toutes les étapes intermédiaires. Par exemple :
526526
527527la propriété "Visible" est d'abord définie dans TControl (controls.pp), ensuite, elle est redéfinie dans TCustomForm et finalement redéfinie dans TForm. Vous pouvez appeler "trouver la référence de l'identificateur" sur "Visible" pour le retrouver dans TForm. Par conséquent, vous pouvez appeler de nouveau "trouver la référence de l'identificateur" pour sauter à "Visible" dans TCustomForm, et une fois encore pour sauter à "Visible" dans TControl.
528528
529529C'est également vrai pour des types comme Tcolor. Pour le compilateur c'est simplement un "longint". Mais dans les sources, il est défini comme
530530
531531`TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;`\
532532`TColor = TGraphicsColor;`
533533
534534Il en va de même pour les classes précédentes : Par exemple dans TControl, il y a une variable privée
535535
536536`FHostDockSite: TWinControl;`
537537
538538Trouver la déclaration de TWinControl saute à la définition précédente
539539
540540`TWinControl = class;`
541541
542542En l'appelant encore on atteint l'implémentation réelle
543543
544544`TWinControl = class(TControl)`
545545
546546De cette façon, vous pouvez dépister chaque identificateur et trouver chaque surcharge.
547547
548548## complétion d'identificateur
549549
550550La "complétion d'identificateur" est appelée par Ctrl+Space. Elle montre tous les identificateurs à portée. Par exemple :
551551
552552` procedure TForm1.FormCreate(Sender: TObject);`\
553553` begin`\
554554`   |`\
555555` end;`
556556
557557Placer le curseur entre *begin* et *end* et appuyez sur Ctrl+Space. L'IDE/Outil de code va maintenant analyser tout code accessible et vous présenter une liste de tous les identificateurs trouvés. L'outil de code met en cache les résultats, ainsi l'appeler une deuxième fois sera beaucoup plus rapide .
558558
559559**Note au utilisateurs de Delphi :** Delphi l'appelle *complétion de Code*.
560560
561561Quelques identificateurs comme 'Write', 'ReadLn', 'Low', 'SetLength', 'Self', 'Result', 'Copy' sont construits dans le compilateur et ne sont pas définis n'importe où dans la source. La complétion d'identificateur a aussi beaucoup de ces choses incorporées. Si vous en trouvez une qui manque, créer juste une demande de fonctionnalité dans le traqueur de bogue .
562562
563563La complétion d'identificateur ne complète pas **les mots clef**. Ainsi vous ne pouvez pas l'employer pour compléter 'proc' en 'procedure'. Pour ces choses utilisez Ctrl+W complétion de mot au lieu de Ctrl+J Code Templates.
564564
565565La complétion d'identificateur montre même ces identificateurs, qui ne sont pas compatibles.
566566
567567### Préfixe
568568
569569Vous pouvez commencer la complétion d'identificateur en un mot. Alors les lettres vers la gauche seront prises comme préfixe. Par exemple :
570570
571571` procedure TForm1.FormCreate(Sender: TObject);`\
572572` begin`\
573573`   Ca|ption`\
574574` end;`
575575
576576La boîte vous montrera seulement les identificateurs commençant par 'Ca'.
577577
578578### Touches
579579
580580- Lettre ou nombre : ajouter le caractère à l'éditeur de source et le préfixe courant. Ceci mettra à jour la liste ;
581581- Backspace: enlève le dernier caractère de l'éditeur de source et le préfixe. Met à jour la liste ;
582582- Entrée: remplace le mot entier au curseur avec l'identificateur choisi et ferme la fenêtre popup ;
583583- Shift+Entrée: comme *Entrée*, mais remplace seulement le préfixe (partie gauche) du mot au curseur ;
584584- Haut/Bas: déplace la sélection ;
585585- Echap: Ferme le popup sans changement ;
586586- Tab: complète le préfixe au choix suivant. Par exemple, le préfixe courant est 'But' et la complétion d'identificateur montre seulement 'Button1' et 'Button1Click'. Alors appuyer sur *Tab* complétera le préfixe avec 'Button1' ;
587587- Else: comme *Entrée* et ajoute le caractère à l'éditeur de source ;
588588
589589## Complétion de mot
590590
591591La "complétion de mot" est appelée par Ctrl+W. Elle montre tous les mots de tous les éditeurs actuellement ouverts.
592592
593593Sinon, elle travaille de la même manière que la complétion d'identificateur.
594594
595595## Aller à la directive include
596596
597597"Aller à la directive 'Include'" dans le menu "Chercher" de l'EDI saute à {\$I nom de fichier} où le fichier d'inclusion en cours est utilisé.
598598
599599## Publier le Projet
600600
601601Crée une copie complète du projet. Si vous voulez envoyer à quelqu'un juste les sources de votre programme et les paramètres du compilateur, cette fonction est faite pour vous.
602602
603603Le dossier (répertoire) d'un projet normal contient beaucoup d'information. La majeure partie n'est pas nécessaire à l'édition : le fichier .lpi contient les informations de session (comme la position du curseur, les favoris (bookmarks) et les unités fermées) et le fichier du projet contient beaucoup de fichiers .ppu, .o et l'exécutable. Créer un fichier .lpi avec seulement l'information de base et seulement les sources, avec tout ses sous-dossiers en utilisant "Publier le projet".
604604
605605**Note**: depuis la version 0.9.13, il y a une nouvelle "option de projet" qui permet de stocker l'information de session dans un dossier séparé du fichier .lpi. Ce nouveau fichier a l'extension .lps et contient seulement les informations de session, ce qui laisse le fichier .lpi beaucoup plus propre.
606606
607607Dans la boîte de dialogue vous pouvez mettre en place un filtre d'inclusion et d'exclusion, et avec la commande suivante vous pouvez compresser le résultat dans une archive.
608608
609609## Contributeurs originaux
610610
611611Cette page a été convertie de la version d'epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusIdeTools).
612612
613613- Page créée et modèle initial – 06/04/2004 VlxAdmin
614614- Contenu initial posté – 10/04/2004 MattiasG
615615- Petit wiki et correction du formatage – 11/04/2004 VlxAdmin
616616- Ajout d'un tableau synoptique pour des raccourcis des outils de l'EDI 12 juillet 2004 User:Kirkpatc
617617
618618---
619619*From the Free Pascal wiki, page "Lazarus IDE Tools/fr", as it stood on 2014-09-28 after a change by Paulatreides, 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