Sign in Join
Wiki copytemporary

Lazarus IDE Tools/es: what changed

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

OldNewLine
11## Descripción general
22
33   El IDE de Lazarus utiliza una librería llamada ***codetools*** para analizar y editar el código fuente pascal. Estas herramientas ofrece funciones para completar código, extraer, mover, insertar y embellecer el código pascal. Utilizarlas permite ahorrar mucho tiempo y evitar duplicar esfuerzos. Son configurables y cada una de las funciones es accesible mediante un atajo (ver Editor Options).
44
55   Al trabajar únicamente con código fuente pascal (de FPC, Delphi y Kylix) no necesita unidades compiladas ni instalar el compilador Borland. Se puede editar código Delphi y FPC a la vez. Incluso se puede trabajar con varias versiones de Delphi y FPC al tiempo. Todo lo anterior hace la conversión de código Delphi mucho más fácil.
66
77## Tabla resumen de los atajos
88
99| | |
1010|----|----|
11-| Buscar Declaración | <span class="kbd">Ctrl</span>+Click o <span class="kbd">Alt</span>+<span class="kbd">Up</span> (Salta a la declaración de la variable) |
12-| Salto a Procedimiento | <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span> (Salta entre la definición y el cuerpo de procedimientos y funciones) |
13-| Plantillas de Código | <span class="kbd">Ctrl</span>+<span class="kbd">J</span> |
14-| Edición sincronizada | <span class="kbd">Ctrl</span>+<span class="kbd">J</span> (cuándo hay texto seleccionado) |
15-| Completar Código | <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> (Completar Clase) |
16-| Completar Identificador | <span class="kbd">Ctrl</span>+<span class="kbd">space</span> |
17-| Completar Palabra | <span class="kbd">Ctrl</span>+<span class="kbd">W</span> |
18-| Sugerencia de Parámetros | <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">space</span> |
19-| [[Incremental Search|Búsqueda incremental]] | <span class="kbd">Ctrl</span>+<span class="kbd">E</span> |
11+| Buscar Declaración | `Ctrl`+Click o `Alt`+`Up` (Salta a la declaración de la variable) |
12+| Salto a Procedimiento | `Ctrl`+`Shift`+`Up` (Salta entre la definición y el cuerpo de procedimientos y funciones) |
13+| Plantillas de Código | `Ctrl`+`J` |
14+| Edición sincronizada | `Ctrl`+`J` (cuándo hay texto seleccionado) |
15+| Completar Código | `Ctrl`+`Shift`+`C` (Completar Clase) |
16+| Completar Identificador | `Ctrl`+`space` |
17+| Completar Palabra | `Ctrl`+`W` |
18+| Sugerencia de Parámetros | `Ctrl`+`Shift`+`space` |
19+| [[Incremental Search|Búsqueda incremental]] | `Ctrl`+`E` |
2020
2121## Salto a Procedimiento
2222
23-   Para ir desde el cuerpo de un procedimiento (o función) al lugar donde está su declaración (procedure Nombre;), o viceversa se utiliza la combinación de teclas <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span>.
23+   Para ir desde el cuerpo de un procedimiento (o función) al lugar donde está su declaración (procedure Nombre;), o viceversa se utiliza la combinación de teclas `Ctrl`+`Shift`+`Up`.
2424
2525   Por ejemplo:
2626
2727``` pascal
2828 interface
2929 procedure HacerAlgo; // declaración del procedimiento
3030 //...
3131 implementation
3232 //...
3333 procedure HacerAlgo; // Cuerpo del procedimiento
3434 begin
3535 //...
3636 end;
3737```
3838
39-   Si el cursor está en cualquier parte del cuerpo del procedimiento y se pulsan las teclas Ctrl+Shift+Up, el cursor salta a la declaración. Volviendo a pulsar <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span> se regresa al cuerpo, y el cursor se sitúa al principio de la primera línea trás el *begin*.
39+   Si el cursor está en cualquier parte del cuerpo del procedimiento y se pulsan las teclas Ctrl+Shift+Up, el cursor salta a la declaración. Volviendo a pulsar `Ctrl`+`Shift`+`Up` se regresa al cuerpo, y el cursor se sitúa al principio de la primera línea trás el *begin*.
4040
4141   Esto funciona con procedimientos y funciones, sean o no miembros de una clase.
4242
4343   **Nota**: 'Salto a Procedimiento' busca el procedimiento (o función) con el mismo nombre y lista de parámetros. Si no existe coincidencia exacta, salta al mejor candidato y situa el cursor en la primera diferencia que encuentra. (Delphi solo busca la coincidencia exacta, en D7 al menos).
4444
4545   Por ejemplo una función con diferente lista de parámetros:
4646
4747``` pascal
4848 interface
4949
5050 function HacerAlgo(p: char); // declaración de la función
5151
5252 implementation
5353
5454 function HacerAlgo(p: string); // cuerpo de la función
5555 begin
5656 end;
5757```
5858
5959   El salto desde la definición al cuerpo posicionará el cursor delante de la palabra clave *string*. Esto puede sernos útil para renombrar métodos y/o cambiar sus parámetros.
6060
6161   Por ejemplo:\
6262   Remombramos 'HacerAlgo' a 'Hazlo':
6363
6464``` pascal
6565 interface
6666
6767 procedure Hazlo; // declaración del procedimiento
6868
6969 implementation
7070
7171 procedure HacerAlgo; // Cuerpo del procedimiento
7272 begin
7373 end;
7474```
7575
7676   Ahora saltamos desde el redefinido *Hazlo* al cuerpo. El IDE buscará un cuerpo que se corresponda, al no encontrarlo buscará un candidato plausible. Trás cambiar el nombre existe un único procedimiento sin su declaración (HacerAlgo), por lo que saltará a él, situando el cursor justo delante de "HacerAlgo". Ahora solo resta escribir el nuevo nombre. También funciona si hemos cambiado algo en la lista de parámetros.
7777
7878## Archivos de inclusión
7979
8080   El contenido de los archivos de inclusión es insertado en el código fuente con las directivas de compilación {\$I NombreArchivo} o {\$INCLUDE NombreArchivo}. Lazarus y FPC utiliza una gran cantidad de ellos para reducir la redundancia y eliminar estructuras ilegibles con {\$IFDEF} que dan soporte a múltiples plataformas.
8181
8282  El IDE de Lazarus da soporte completo a los archivos de inclusión, al contrario que Delphi. Se puede saltar desde la declaración de un método en un .pas a su cuerpo en un archivo de inclusión. Todas las funciones de *codetools* consideran los archivos de inclusión un ámbito especial, tal cómo hace *Completar Código*.
8383
8484  Por ejemplo: Cuándo *Completar Código* añade el cuerpo de un nuevo método tras el cuerpo de otro, mantiene ambos en el mismo archivo. Así podemos poner la implementación completa de la clase en el archivo de inclusión, tal cómo se hace en la LCL para todos sus componentes.
8585
8686   Pero aquí hay una trampa para novatos: Si se abre un archivo de inclusión por primera vez y se usa *Procedure Jump* o *Buscar Declaración* se obtiene un eror. El IDE no sabe la unidad a la que pertenece el archivo de inclusión; hay que abrir la unidad previamente pra que la cosa funcione.
8787
8888   Tan pronto como el IDE analiza la unidad, se evalúan las directivas de inclusión y el IDE toma nota de las relaciones entre los archivos.Al cerrar o guardar el proyecto esta información se guarda en el archivo \$(LazarusDir)/includelinks.xml. La próxima vez que abramos el archivo de inclusión y realicemos un *Procedure Jump* o *Buscar Declaración* el IDE hará uso de esta información y las funciones trabajarán correctamente.
8989
9090   Este mecanismo tiene límites, por supuesto. Algunos archivos están incluidos dos o más veces, por ejemplo, \$(LazarusDir)/lcl/include/winapih.inc.
9191
9292   Los saltos a los cuerpos desde las definiciones de procedimientos o métodos desde este fichero dependerán del contexto actual. Si se está trabajando con lcl/lclintf.pp el IDE saltará a winapi.inc. Si se está trabajando con lcl/interfacebase.pp, el salto se realizará a lcl/include/interfacebase.inc (u otro archivo de inclusión). Si se está trabajando con los dos, habrá una situación ambigua. ;)
9393
9494## Plantillas de código
9595
9696   Las *Plantillas de código* permiten convertir un identificador en un texto o en un fragmento de código.
9797
98-   El atajo, por defecto, para las *Plantillas de código* es <span class="kbd">Ctrl</span>+<span class="kbd">J</span>. Se escribe un identificador, se pulsan las teclas <span class="kbd">Ctrl</span>+<span class="kbd">J</span> y el identificador es sustituido por el texto definido para el identificador. Las *Plantillas de código* se definen en *Entorno -\> Plantillas de Código...*.
98+   El atajo, por defecto, para las *Plantillas de código* es `Ctrl`+`J`. Se escribe un identificador, se pulsan las teclas `Ctrl`+`J` y el identificador es sustituido por el texto definido para el identificador. Las *Plantillas de código* se definen en *Entorno -\> Plantillas de Código...*.
9999
100-  Ejemplo:   Escribimos el identificador 'classf', con el cursor justo a la derecha de la 'f' pulsamos las teclas <span class="kbd">Ctrl</span>+<span class="kbd">J</span> y 'classf' será reemplazado por
100+  Ejemplo:   Escribimos el identificador 'classf', con el cursor justo a la derecha de la 'f' pulsamos las teclas `Ctrl`+`J` y 'classf' será reemplazado por
101101
102102``` pascal
103103 TClass = class(TBase)
104104 private
105105
106106 public
107107 constructor Create;
108108 destructor Destroy; override;
109109 end;
110110```
111111
112112además el cursor de posicionará en 'TClass'.
113113
114114   Podemos desplegar la lista de plantillas disponibles, situando el cursor en un espacio (no en un identificador) y pulsando las teclas Ctrl+J. Aparecerá la lista de plantillas. HAciendo uso de las teclas de dirección o escribiendo algo seleccionaremos una de ellas. Con *intro* usaremos la plantilla elegida y con *escape* cerraremos la lista sin hacer nada.
115115
116-  La plantilla que más tiempo nos ahorrará es 'b'+<span class="kbd">Ctrl</span>+<span class="kbd">J</span> para begin..end.
116+  La plantilla que más tiempo nos ahorrará es 'b'+`Ctrl`+`J` para begin..end.
117117
118118## Sugerencia de Parámetros
119119
120120   *Sugerencia de Parámetros* muestra una caja con la lista de posibles declaraciones con sus parámetros para el procedimiento o función actual.
121121
122122   Por ejemplo:
123123
124124``` pascal
125125 Canvas.FillRect(|);
126126```
127127
128-   Situamos el cursor dentro de los paréntesis y pulsamos <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">space</span>. La lista de sugerencias aparecerá con los posibles parámetros, según las distintas declaraciones de *FillRect*.
128+   Situamos el cursor dentro de los paréntesis y pulsamos `Ctrl`+`Shift`+`space`. La lista de sugerencias aparecerá con los posibles parámetros, según las distintas declaraciones de *FillRect*.
129129
130-<figure>
131-<img src="Parameterhints1.png" title="Parameterhints1.png" />
132-<figcaption>Parameterhints1.png</figcaption>
133-</figure>
130+![](/wiki-images/c/c8/Parameterhints1.png)
134131
135132   Desde la versión 0.9.31 hay un botón a la derecha de cada declaración para insertar el parámetro. Esto copiará los nombres de los parámetros de la declaración elegida en la posición del cursor.
136133
137-<figure>
138-<img src="Parameterhints2.png" title="Parameterhints2.png" />
139-<figcaption>Parameterhints2.png</figcaption>
140-</figure>
134+![](/wiki-images/4/48/Parameterhints2.png)
141135
142136   Consejo: Utiliza Completar Declaración de Variable para declarar las variables.
143137
144138   Nota: El nombre del atajo es "Show code context" (Mostrar Contexto del Código).
145139
146140## Búsqueda incremental
147141
148-   Búsqueda incremental cambia la barra de estado del editor. Escribe algunos caracteres y el editor buscará y resaltará de inmediato todas las ocurrencias en el texto. El atajo es <span class="kbd">Ctrl</span>+<span class="kbd">e</span>.
142+   Búsqueda incremental cambia la barra de estado del editor. Escribe algunos caracteres y el editor buscará y resaltará de inmediato todas las ocurrencias en el texto. El atajo es `Ctrl`+`e`.
149143
150-- Por ejemplo pulsa <span class="kbd">e</span> buscará y resaltará todas las apariciones de 'e'.
151-- Pulsa <span class="kbd">t</span> buscará y resaltará todas las apariciones de 'et' y así sucesivamente.
152-- Puede saltar a la siguiente con <span class="kbd">F3</span> (o <span class="kbd">Ctrl</span>+<span class="kbd">e</span> mientras se busca) y a la previa con <span class="kbd">Shift</span>+<span class="kbd">F3</span>.
153-- <span class="kbd">Backspace</span> elimina el último carácte
154-- <span class="kbd">Enter</span> detiene la búsqueda sin añadir una nueva línea en el editor.
155-- Puedes volver a la última búsqueda pulsando <span class="kbd">Ctrl</span>+<span class="kbd">e</span> una segunda vez, inmediatamente después de que empezó con la búsqueda con <span class="kbd">Ctrl</span>+<span class="kbd">e</span> es decir, mientras que el término de búsqueda está vacío.
156-- Pegar: <span class="kbd">Ctrl</span>+<span class="kbd">V</span> adjuntará el texto del portapapeles al texto de búsqueda actuales (desde lazarus 0.9.27 r19824).
144+- Por ejemplo pulsa `e` buscará y resaltará todas las apariciones de 'e'.
145+- Pulsa `t` buscará y resaltará todas las apariciones de 'et' y así sucesivamente.
146+- Puede saltar a la siguiente con `F3` (o `Ctrl`+`e` mientras se busca) y a la previa con `Shift`+`F3`.
147+- `Backspace` elimina el último carácte
148+- `Enter` detiene la búsqueda sin añadir una nueva línea en el editor.
149+- Puedes volver a la última búsqueda pulsando `Ctrl`+`e` una segunda vez, inmediatamente después de que empezó con la búsqueda con `Ctrl`+`e` es decir, mientras que el término de búsqueda está vacío.
150+- Pegar: `Ctrl`+`V` adjuntará el texto del portapapeles al texto de búsqueda actuales (desde lazarus 0.9.27 r19824).
157151
158152### Sugerencia: Búsqueda rápida de un identificador con búsqueda incremental
159153
160154- Mueve el cursor del texto sobre el identificador (no selecciones nada)
161-- Pulsa <span class="kbd">Ctrl</span>+<span class="kbd">C</span>. En el editor de código fuente se selecciona el identificador y se copia en el portapapeles
162-- Pulsa <span class="kbd">Ctrl</span>+<span class="kbd">E</span> para iniciar la búsqueda incremental
163-- Pulsa <span class="kbd">Ctrl</span>+<span class="kbd">V</span> para buscar el identificador (desde 0.9.27)
164-- Usa <span class="kbd">F3</span> y <span class="kbd">Shift</span>+<span class="kbd">F3</span> para ir rápidamente a siguiente / anterior.
155+- Pulsa `Ctrl`+`C`. En el editor de código fuente se selecciona el identificador y se copia en el portapapeles
156+- Pulsa `Ctrl`+`E` para iniciar la búsqueda incremental
157+- Pulsa `Ctrl`+`V` para buscar el identificador (desde 0.9.27)
158+- Usa `F3` y `Shift`+`F3` para ir rápidamente a siguiente / anterior.
165159- Usa cualquier tecla (por ejemplo, el cursor hacia la izquierda o la derecha) para finalizar la búsqueda.
166160
167161## Edición sincronizada
168162
169163Edición sincronizada permite editar todas las apariciones de una palabra, al mismo tiempo (sincronizado). Simplemente se edita la palabra en un solo lugar, y mientras escribes, todas las otras apariciones de la palabra también se actualizan.
170164
171165Edición sincronizada funciona en todas las palabras en un área seleccionada:
172166
173167- Selecciona un bloque de texto
174-- pulsa <span class="kbd">Ctrl</span>+<span class="kbd">J</span> o haz clic en el icono en el margen. (Esto funciono solamente si hay alguna palabra que se repite más de una vez en la selección.
175-- usa la tecla <span class="kbd">tab</span> para seleccionar la palabra que deseas editar (en caso de que varias palabras diferentes se repitan más de una vez)
168+- pulsa `Ctrl`+`J` o haz clic en el icono en el margen. (Esto funciono solamente si hay alguna palabra que se repite más de una vez en la selección.
169+- usa la tecla `tab` para seleccionar la palabra que deseas editar (en caso de que varias palabras diferentes se repitan más de una vez)
176170- Edita la palabra
177-- pulsa <span class="kbd">Esc</span> para terminar
171+- pulsa `Esc` para terminar
178172
179173Ver un ejemplo animado [[New IDE features since|aquí]]
180174
181-- Nota: <span class="kbd">Ctrl</span>+<span class="kbd">J</span> también se utiliza para editar plantillas. Cambia su significado si hay seleccionado algo de texto.
175+- Nota: `Ctrl`+`J` también se utiliza para editar plantillas. Cambia su significado si hay seleccionado algo de texto.
182176
183177## Completar Código
184178
185-   Completar código se encuentra en el menú Editar del IDE y su atajo por defecto es <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span>. También Aparece en el menú contextual Refactoring -\> Completar código.
179+   Completar código se encuentra en el menú Editar del IDE y su atajo por defecto es `Ctrl`+`Shift`+`C`. También Aparece en el menú contextual Refactoring -\> Completar código.
186180
187-   Para usuarios de Delphi:   En Delphi "code completion" muestra la lista de identificadores en la posición actual del código (<span class="kbd">Ctrl</span>+<span class="kbd">Space</span>). En Lazarus esta función se llama "Completar identificador".
181+   Para usuarios de Delphi:   En Delphi "code completion" muestra la lista de identificadores en la posición actual del código (`Ctrl`+`Space`). En Lazarus esta función se llama "Completar identificador".
188182
189183   Completar código combina varias potentes funciones. Ejemplos:
190184
191185- Completar Clase (*Class Completion*): completa propiedades, añade cuerpos de métodos, añade variables y métodos privados.
192186- Completar procedimiento (*Forward Procedure Completion*): añade cuerpos de procedimientos.
193187- Completar asignación de eventos (*Event Assignment Completion*): completa la asignación de eventos y añade la definición del método y su cuerpo.
194188- Completar declaración de variables (*Variable Declaration Completion*): añade la declaración de variables locales.
195189- Completar llamada a procedimiento (*Procedure Call Completion*): añade un nuevo procedimiento.
196190- Completar procedimiento inverso (*Reversed procedure completion*): añade la definición de cuerpos para procedimientos y funciones.
197191- Completar clase inversa (*Reversed class completion*): añade declaraciones para cuerpos de métodos.
198192
199193   La función que se activa depende de la posición del cursor en el editor de código.
200194
201195### Completar Clase
202196
203197   La función más potente de completar código es *Completar clase*. Escribe la definición de la clase, añade los métodos y las propiedades y Completar clase añadirá los cuerpos de los métodos, los métodos de acceso a las propiedades y variables y las variables privadas.
204198
205199   Por ejemplo: crea una clase (utiliza [[IDE Window: Code Templates/es|Platillas de código]] para ahorrarte trabajo de escritura):
206200
207201``` pascal
208202 TEjemplo = class(TObject)
209203 public
210204 constructor Create;
211205 destructor Destroy; override;
212206 end;
213207```
214208
215209   Pon el cursor en la clase y pulsa Ctrl+Shift+C. Con esto se crean los cuerpos que faltan de los métodos y el cursor se situará dentro del primer cuerpo de método creado, y ya puedes empezar a escribir el código de la clase:
216210
217211``` pascal
218212 { TEjemplo }
219213
220214 constructor TEjemplo.Create;
221215 begin
222216 |
223217 end;
224218
225219 destructor TEjemplo.Destroy;
226220 begin
227221 inherited Destroy;
228222 end;
229223```
230224
231225   Nota: El carácter '\|' representa el cursor.
232226
233-   Sugerencia: puedes saltar entre la definición y el cuerpo de un método con <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span>.
227+   Sugerencia: puedes saltar entre la definición y el cuerpo de un método con `Ctrl`+`Shift`+`Up`.
234228
235229   Cómo se puede ver, el IDE añade la llamada 'inherited Destroy' siempre que el método esté definido con *override*.
236230
237231   Ahora añade un método HacerAlgo:
238232
239233``` pascal
240234 TEjemplo = class(TObject)
241235 public
242236 constructor Create;
243237 procedure HacerAlgo(i: integer);
244238 destructor Destroy; override;
245239 end;
246240```
247241
248-   Ahora se pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> y el IDE añadirá
242+   Ahora se pulsa `Ctrl`+`Shift`+`C` y el IDE añadirá
249243
250244``` pascal
251245 procedure TEjemplo.HacerAlgo(i: integer);
252246 begin
253247 |
254248 end;
255249```
256250
257251   El método se inserta entre Create y Destroy, igual que en la definición de la clase. De esta forma los cuerpos mantienen el mismo orden lógico que se ha definido. Se puede definir la política de inserción en Entorno -\> Opciones de CodeTools -\> Creación de código.
258252
259253#### Completar Propiedades
260254
261255   Añade la propiedad UnEntero:
262256
263257``` pascal
264258 TEjemplo = class(TObject)
265259 public
266260 constructor Create;
267261 procedure HacerAlgo(i: integer);
268262 destructor Destroy; override;
269263 property UnEntero: Integer;
270264 end;
271265```
272266
273267   Pulsa Ctrl+Shift+C y obtendrás esto:
274268
275269``` pascal
276270 procedure TEjemplo.SetUnEntero(const AValue: integer);
277271 begin
278272 |if FUnEntero=AValue then exit;
279273 FUnEntero:=AValue;
280274 end;
281275```
282276
283-   Completar código ha añadido el procedimiento de acceso de escritura a la propiedad (*Write*) y añadido al mismo el código más común. Ve a la definción de la clase con <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span> para ver los cambio realizados en la clase:
277+   Completar código ha añadido el procedimiento de acceso de escritura a la propiedad (*Write*) y añadido al mismo el código más común. Ve a la definción de la clase con `Ctrl`+`Shift`+`Up` para ver los cambio realizados en la clase:
284278
285279``` pascal
286280 TEjemplo = class(TObject)
287281 private
288282 FUnEntero: integer;
289283 procedure SetUnEntero(const AValue: integer);
290284 public
291285 constructor Create;
292286 procedure HacerAlgo(i: integer);
293287 destructor Destroy; override;
294288 property UnEntero: integer read FUnEntero write SetUnEntero;
295289 end;
296290```
297291
298292    La propiedad se ha extendido con los modificadores de acceso Read y Write. La clase tiene una nueva sección *private* con una variable 'FUnEntero' y el procedimiento 'SetUnEntero'.    Es habitual en el estilo Delphi añadir 'F' delante del nombre de las variables privadas y 'Set' a los procedimientos. Si no quieres que esto ocurra, cambialo en Entorno -\> Opciones de CodeTools -\> Creación de Código.
299293
300294   Crear una propiedad de sólo lectura:
301295
302296``` pascal
303297 property NombrePropiedad: TipoPropiedad read;
304298```
305299
306300   Se expandirá a
307301
308302``` pascal
309303 property NombrePropiedad: TipoPropiedad read FNombrePropiedad;
310304```
311305
312306   Crear una propiedad de sólo escritura:
313307
314308``` pascal
315309 property NombrePropiedad: TipoPropiedad write;
316310```
317311
318312   Se expandirá a
319313
320314``` pascal
321315 property NombrePropiedad: TipoPropiedad write SetNombrePropiedad;
322316```
323317
324318   Crear una propiedad de sólo lectura con una función de lectura:
325319
326320``` pascal
327321 property NombrePropiedad: TipoPropiedad read GetNombrePropiedad;
328322```
329323
330324   La función GetNombrePropiedad será añadida:
331325
332326``` pascal
333327 function GetNombrePropiedad: TipoPropiedad;
334328```
335329
336330   Crear una propiedad con un modificador 'stored':
337331
338332``` pascal
339333 property NombrePropiedad: TipoPropiedad stored;
340334```
341335
342336   Se expandirá a
343337
344338``` pascal
345339 property NombrePropiedad: TipoPropiedad read FNombrePropiedad write SetNombrePropiedad stored NombrePropiedadIsStored;
346340```
347341
348342   Cómo *stored* se utiliza para el *streaming* los modificadores *read* y *write* se añaden automáticamente.
349343
350344   Sugerencia: Completar identificador también reconoce propiedades incompletas, sugiriendo los nombres por defecto. Por ejemplo:
351345
352346``` pascal
353347 property NombrePropiedad: TipoPropiedad read |;
354348```
355349
356350   Sitúa el cursor un espacio después del 'read' y pulsa Ctrl+Space para invocar Completar identificador. En la lista desplegable se aparecerán la variable 'FNombrePropiedad' y el procedimineto 'GetNombrePropiedad'.
357351
358352### Completar Procedimiento declarado
359353
360354   Completar Procedimiento declarado *Forward Procedure Completion* es parte del *Completar código* y añade los cuerpos que faltan a los procedimientos declarados. Si se llama cuándo el cursor se encuentra en la declaración de un prodedimiento.
361355
362356   Por ejeamplo:    Añade un nuevo procedimiento en la sección *interface*:
363357
364358``` pascal
365359 procedure HacerAlgo;
366360```
367361
368-   Sitúa el cursor sobre ella y pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> para completar el código. Se creará lo siguiente en la sección de implementación:
362+   Sitúa el cursor sobre ella y pulsa `Ctrl`+`Shift`+`C` para completar el código. Se creará lo siguiente en la sección de implementación:
369363
370364``` pascal
371365 procedure HacerAlgo;
372366 begin
373367 |
374368 end;
375369```
376370
377-   Nota: puedes saltar alternativamente entre el cuerpo del procedimiento y su definición pulsando <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">Up</span>.
371+   Nota: puedes saltar alternativamente entre el cuerpo del procedimiento y su definición pulsando `Ctrl`+`Shift`+`Up`.
378372
379373   El cuerpo del procedimiento se añade antes de los métodos de clase. Si hay más procedimientos declarados en *interface* el IDE procura mantener el orden de los mismos al crear los cuerpos. Por ejemplo:
380374
381375``` pascal
382376 procedure Proc1;
383377 procedure Proc2; // nuevo procedimiento
384378 procedure Proc3;
385379```
386380
387381   Si los cuerpos de Proc1 y Proc3 existen, el cuerpo de Proc2 se insertará entre ellos. Este comportamiento se puede configurar en Entorno -\> Opciones de Codetools -\> Creación de código.
388382
389383   Varios procedimientos:
390384
391385``` pascal
392386 procedure Proc1_Viejo; // el cuerpo existe
393387 procedure Proc2_Nuevo; // el cuerpo No existe
394388 procedure Proc3_Nuevo; // "
395389 procedure Proc4_Nuevo; // "
396390 procedure Proc5_Existente; // el cuerpo existe
397391```
398392
399393   Completar código añadirá los cuerpos de los tres procedimientos(Proc2_Nuevo, Proc3_Nuevo, Proc4_Nuevo).
400394
401395   ¿Porqué se llama *Forward Procedure Completion*?
402396
403397   Por que no sólo funciona con procedimientos declarados en la *interface* , sino que también lo hace para procedimientos con el modificador *forward*. Las *codetools* tratan los procedimientos en la *interface* cómo si tuvieran un modificador *forward* implícito.
404398
405399### Completar asignación de eventos
406400
407401   Completar asignación de eventos (*Event Assignment Completion*) completa una única asignación de evento (Evento:=\| sentencia). Se invoca cuándo el cursor está situado justo tras la asignación del evento.
408402
409403   Por ejemplo:    En un método, el evento FormCreate mismamente, añade la línea 'OnPaint:=':
410404
411405``` pascal
412406 procedure TForm1.Form1Create(Sender: TObject);
413407 begin
414408 OnPaint:=|
415409 end;
416410```
417411
418412   El caracter '\|' representa el cursor y no hay que escribirlo. Pulsa Ctrl+Shift+C para completar el código. La sentencia se completará con
419413
420414``` pascal
421415 OnPaint:=@Form1Paint;
422416```
423417
424418   Un nuevo método Form1Paint se añadirá a la clase TForm1. Y el cursor se situará en el cuerpo de las misma, tras crear su esqueleto:
425419
426420``` pascal
427421 procedure TForm1.Form1Paint(Sender: TObject);
428422 begin
429423 |
430424 end;
431425```
432426
433427   El comportamiento es el mismo que cuándo en el inspector de objetos añadimos código para un evento de un objeto.
434428
435429   Nota:Hay que situar el cursor justo tras el operador de asignación ':='. si se sitúa en el identificador (v.gr. OnPaint) se llamará a *Completar variable local* lo que provoacará un error ya que este ya está definido.
436430
437431   Sugerencia: nosotros podemos definir el nombre del método, por ejemplo:
438432
439433``` pascal
440434 OnPaint:=@ElMetodoParaPintar;
441435```
442436
443-   Para ello hay que situar el cursor sobre el nombre del método antes de llamar a completar código con <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span>.
437+   Para ello hay que situar el cursor sobre el nombre del método antes de llamar a completar código con `Ctrl`+`Shift`+`C`.
444438
445439### Completar Declaración de Variable
446440
447441   Completar Declaración de Variable (*Variable Declaration Completion*) es parte de *Completar Código* y añade la definición de una variable local para una sentencia identificador:=valor;. Se llama cuándo el cursor está sobre el identificador de la asignación o sobre un parámetro.
448442
449443   Por ejemplo:
450444
451445``` pascal
452446 procedure TForm1.Form1Create(Sender: TObject);
453447 begin
454448 i:=3;
455449 end;
456450```
457451
458-    Sitúa el cursor en la 'i' o justo detrás. Púlsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> para completar el código y se obtiene:
452+    Sitúa el cursor en la 'i' o justo detrás. Púlsa `Ctrl`+`Shift`+`C` para completar el código y se obtiene:
459453
460454``` pascal
461455 procedure TForm1.Form1Create(Sender: TObject);
462456 var
463457 i: Integer;
464458 begin
465459 i:=3;
466460 end;
467461```
468462
469463   El proceso comprueba primero si el identificador está definido y al no encontrarlo añade la declaración *var i: integer;*. El tipo de la variable es tomada del valor del término derecho de la expresión de asignación. Los números, cómo el 3, se crea por defecto por Integer.
470464
471465   Otro ejemplo:
472466
473467``` pascal
474468 type
475469 TDonde = (Final, Mitad, Principio);
476470
477471 procedure TForm1.Form1Create(Sender: TObject);
478472 var
479473 a: array[TDonde] of char;
480474 begin
481475 for Donde:=Low(a) to High(a) do writeln(a[Donde]);
482476 end;
483477```
484478
485-   Sitúa el cursor en 'Donde' y pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span>, obtendrás:
479+   Sitúa el cursor en 'Donde' y pulsa `Ctrl`+`Shift`+`C`, obtendrás:
486480
487481``` pascal
488482 procedure TForm1.Form1Create(Sender: TObject);
489483 var
490484 a: array[TDonde] of char;
491485 Donde: TDonde;
492486 begin
493487 for Donde:=Low(a) to High(a) do writeln(a[Donde]);
494488 end;
495489```
496490
497491   Desde la versión 0.9.11 Lazarus también completa parámetros. Por ejemplo
498492
499493``` pascal
500494 procedure TForm1.FormPaint(Sender: TObject);
501495 begin
502496 with Canvas do begin
503497 Line(x1,y1,x2,y2);
504498 end;
505499 end;
506500```
507501
508-   Sitúa el cursor en 'x1' y pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span>, obtendrás:
502+   Sitúa el cursor en 'x1' y pulsa `Ctrl`+`Shift`+`C`, obtendrás:
509503
510504``` pascal
511505 procedure TForm1.FormPaint(Sender: TObject);
512506 var
513507 x1: integer;
514508 begin
515509 with Canvas do begin
516510 Line(x1,y1,x2,y2);
517511 end;
518512 end;
519513```
520514
521515### Completar Llamada a procedimiento
522516
523517   **Nota de traductor:** lo que sigue no funciona, si lo intentamos no hace nada.
524518
525519   Completar código creará un nuevo procedimiento desde la orden de invocación.
526520
527521   Supongamos que acabas de escribir la orden *HacerAlgo(Ancho);*
528522
529523``` pascal
530524 procedure UnProcedimiento;
531525 var
532526 Ancho: integer;
533527 begin
534528 Ancho:=3;
535529 HacerAlgo(Ancho);
536530 end;
537531```
538532
539-   Coloca el cursor sobre el identificador "HacerAlgo" y pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> para obtener:
533+   Coloca el cursor sobre el identificador "HacerAlgo" y pulsa `Ctrl`+`Shift`+`C` para obtener:
540534
541535``` pascal
542536 procedure HacerAlgo(aWidth: LongInt);
543537 begin
544538
545539 end;
546540
547541 procedure UnProcedimiento;
548542 var
549543 Width: integer;
550544 begin
551545 Width:=3;
552546 HacerAlgo(Width);
553547 end;
554548```
555549
556550### Completar Clase inversa
557551
558552   "Completar Clase inversa" es otra función de **Completar ya Código** que añade la declaración de un método para el cuerpo de funcion o procedimiento en que esté situado el cursor cuando se invoca; si la declaración existie dará un mensaje de error: *Ya fue definido el identificador ...*.
559553
560554   Esta función está disponible desde la versión 0.9.21 de Lazarus.
561555
562556   Por ejemplo:
563557
564558``` pascal
565559 procedure TForm1.HacerAlgo(Emisor: TObject);
566560 begin
567561 end;
568562```
569563
570-   El método HacerAlgo no está declarado en TForm1. Pulsar <span class="kbd">Ctrl</span>+<span class="kbd">Shift</span>+<span class="kbd">C</span> y el IDE añadirá "procedure HacerAlgo(Emisor: TObject);" en la definición de la clase TForm1.
564+   El método HacerAlgo no está declarado en TForm1. Pulsar `Ctrl`+`Shift`+`C` y el IDE añadirá "procedure HacerAlgo(Emisor: TObject);" en la definición de la clase TForm1.
571565
572566   Para usuarios de Delphi: *Completar clase* funciona en Lazarus siempre en un único sentido: de *interface* a *implementation* o viceversa. Delphi invoca siempre los dos sentidos. La forma de Delphi tiene la desventaja de que por un error tipográfico podemos crear inadvertidamente un procedimineto nuevo.
573567
574568### Comentarios y *Completar código*
575569
576570   *Completar código* procura mantener los comentarios donde corresponde.
577571
578572   Por ejemplo:
579573
580574``` pascal
581575 FLista: TList; // lista de TComponent
582576 FEntero: integer;
583577```
584578
585579   Cuándo se inserta una nueva variable entre FLista y FEntero, el comentario permanece en la línea de FLista. Esto también es verdad para
586580
587581``` pascal
588582 FLista: TList; { lista de TComponent
589583 Este es un comentario de varias líneas, comienza
590584 en la línea FLista, a la que la utilidad considera
591585 que pertenece y no romperá esta ligazón.
592586 El código se inserta después del comentario.}
593587 FEntero: integer;
594588```
595589
596590   Si el comentario comienza en la línea siguiente, será tratado como perteneciente al código que le sigue. Por ejemplo:
597591
598592``` pascal
599593 FLista: TList; // lista de TComponent
600594 { Este comentario está ligado a la sentencia precedente.
601595 El nuevo código será insertado delante del comentario
602596 a continuación del comentario de la línea de FLista. }
603597 FEntero: integer;
604598```
605599
606600## Refactorización (*Refactoring*)
607601
608602### Invertir Asignaciones
609603
610604   *Invertir Asignaciones* toma las instrucciones de asignación señaladas e invierte las mismas para ese código. Con esta utilidad es fácil transformar código de guardar en código de cargar, o a la inversa.
611605
612606   Ejemplo:\
613607
614608``` pascal
615609 procedure HacerAlgo;
616610 begin
617611 AValueUnoStudio := BValorUno;
618612 AValorDos := BValorDos;
619613 AValorTres := BValorTres;
620614 end;
621615```
622616
623617   Selecciona las líneas con las asignaciones (entre begin y end ) e invoca *Invert Assignments*. Todas las ordenes de asignación se invertirán y el código se formateará automáticamente; el resultado será este:
624618
625619``` pascal
626620 procedure HacerAlgo;
627621 begin
628622 BValorUno := AValueUnoStudio;
629623 BValorDos := AValorDos;
630624 BValorTres := AValorTres;
631625 end;
632626```
633627
634628### Encerrar Selección
635629
636630   Selecciona un blouqe de texto e invócala, con el menú contextual (Refactoring -\> Encerrar Selección), por ejemplo. En el [[:File:Lazarus IDE Encerrar Seleccion.png|diálogo que aparece]] puedes seleccionar en que estructura se encerrará el código seleccionado, **try..finally** o cualquier otro tipo de bloque de los posibles.
637631
638632### Renombrar Identificador
639633
640634   Sitúa el cursor sobre un identificador y llámalo. Aparece un [[:File:Lazarus IDE Buscar Referencias Identificador.png|diálogo]] en el que podemos configurar el ámbito de la búsqueda y el nuevo nombre.
641635
642636- Se renombra´na todas las ocurrencias que utilicen esta declaración. No lo hará con otras declaraciones con el mismo nombre.
643637- Primero comprueba los posibles conflictos de nombre.
644638- Límites: Únicamente funciona con código pascal, no cambia el nombre a archivos y no modifica archivos *lfm/lrs* ni archivos *lazdoc*.
645639
646640### Buscar referencias a identificador
647641
648642Sitúa el cursor sobre un identificador y llámalo (menú Buscar -\> Buscar referencias a identificador...), aparece un [[:File:Lazarus IDE Buscar Referencias Identificador.png|diálogo]], donde se puede configurar el ámbito de búsqueda. El IDE busca todas las ocurrencias y sólo aquellas que utilizan esta declaración. Esto quiere decir que no muestra otras declaraciones distintas con el mismo nombre.
649643
650644### Mostrar métodos abstractos
651645
652646   Esta utilidad lista y crea el esquema de métodos virtuales y abstractos que necesitan ser implementados.
653647
654648   Sitúa el cursor en la declaración de la clase y llámalo. Si hay métodos abstractos que implemetar un diálogo aparece con su lista. Selecciona el método para implementar y el IDE creará el esqueleto del mismo.
655649
656650### Extraer Procedimientos
657651
658652   Ver [[IDE Window: Extract Procedure/es|Extraer Procedimientos]]
659653
660654## Buscar Declaración
661655
662656   Coloca el cursor en un identificador y utiliza *Buscar declaración* del menú contextual, se buscará la definición del mismo y se abrirá el archivo que la contiene, situándose el cursor sobre ella. Si el cursor ya se encuentra ya en una declaración se saltará a la declaración anterior del mismo identificador. Esto permite encontrar sobrescrituras y redefiniciones
663657
664-   Cada búsqueda crea un punto de salto (*Jump Point*). Esto permite saltar entre la definición hallada y el punto donde estábamos antes, menú principal: Buscar -\> Saltar atrás o <span class="kbd">Ctrl</span>+<span class="kbd">H</span>.
658+   Cada búsqueda crea un punto de salto (*Jump Point*). Esto permite saltar entre la definición hallada y el punto donde estábamos antes, menú principal: Buscar -\> Saltar atrás o `Ctrl`+`H`.
665659
666660   Existen algunas diferencias con Delphi: Las utilidades de completar código siguen las convenciones de pascal en vez de utilizar la salida del compilador. El compilador devuelve el tipo final. Las utilidades de completar código miran las fuentes y siguen todos los pasos intermedios. Por ejemplo:
667661
668662   La propiedad *Visible* está definida en primer lugar en *TControl* (controls.pp), está redefinida en *TCustomForm* y por último en *TForm*.
669663
670664   Llamando a buscar declaración para *Visible* se saltará primero a la definición de *Visible* en *TForm*. Si se llama de nuevo se saltará a *Visible* en *TCustomForm* y si lo hacemos otra vez saltará a *Visible* en *TControl*.
671665
672666   Esto también ocurre para tipos cómo *TColor*. Para el compilador es un simple *longint*. Pero en los fuentes está definido cómo
673667
674668``` pascal
675669 TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;
676670 TColor = TGraphicsColor;
677671```
678672
679673   Y ocurre lo mismo con las clases definidas con antelación (*forward defined classes*): Por ejemplo en *TControl*, está esta variable privada
680674
681675``` pascal
682676 FHostDockSite: TWinControl;
683677```
684678
685679   Buscar declaración sobre *TWinControl* saltará a la definición previa (*forward defined classe*)
686680
687681``` pascal
688682 TWinControl = class;
689683```
690684
691685   Y haciéndolo de nuevo saltará a la implementación real
692686
693687``` pascal
694688 TWinControl = class(TControl)
695689```
696690
697691   De esta forma se puede seguir hasta el final la declaración de cada identificador y ver cada sobrecarga o redefinición del mismo.
698692
699-   **Sugerencia:** Puedes regresar al punto anterior al salto con <span class="kbd">Ctrl</span>+<span class="kbd">H</span>.
693+   **Sugerencia:** Puedes regresar al punto anterior al salto con `Ctrl`+`H`.
700694
701695## Completar Identificador
702696
703-Completar Identificador se llama con <span class="kbd">Ctrl</span>+<span class="kbd">Space</span>. Se mostrarán todos los identifiacdores en el ámbito. Por ejemplo:
697+Completar Identificador se llama con `Ctrl`+`Space`. Se mostrarán todos los identifiacdores en el ámbito. Por ejemplo:
704698
705699``` pascal
706700 procedure TForm1.FormCreate(Sender: TObject);
707701 begin
708702 |
709703 end;
710704```
711705
712-Sitúa el cursor entre *begin* y *end* y pulsa <span class="kbd">Ctrl</span>+<span class="kbd">Space</span>. La utilidad e código del IDE analizará todo el código del ámbito y presentará una lista con todos los identificadores encontrados. El IDE guarda los resultados, así que una llamada posterior será mucho más rápida.
706+Sitúa el cursor entre *begin* y *end* y pulsa `Ctrl`+`Space`. La utilidad e código del IDE analizará todo el código del ámbito y presentará una lista con todos los identificadores encontrados. El IDE guarda los resultados, así que una llamada posterior será mucho más rápida.
713707
714708**Nota para usuarios Delphi:** En Delphi esto se denomina *Completar Código*.
715709
716710Muchos identificadores cómo 'Write', 'ReadLn', 'Low', 'SetLength', 'Self', 'Result', 'Copy' están creados dentro del compilador y no están definidos en código alguno. Completar identificador hace lo propio. Si notas la falta de alguno informa de ello en el seguimiento de errores (*bug tracker*)
717711
718-Completar identificador no completa palabras del lenguaje. No puede ser utilizado para completar proc a procedura. Para hacer esto utiliza <span class="kbd">Ctrl</span>+<span class="kbd">W</span> Completar palabra y no <span class="kbd">Ctrl</span>+<span class="kbd">J</span> Plantillas de código.
712+Completar identificador no completa palabras del lenguaje. No puede ser utilizado para completar proc a procedura. Para hacer esto utiliza `Ctrl`+`W` Completar palabra y no `Ctrl`+`J` Plantillas de código.
719713
720714Completar identificador muestra incluso los identificadores que no son compatibles.
721715
722716### Prefijos
723717
724718   Cuándo activamos *Completar identificador* en una palabra, las letras a la derecha del cursor son consideradas un prefijo y la lista de sugerencias sólo mostrará los identificadores que comienzan por ellas. Por ejemplo:
725719
726720``` pascal
727721 procedure TForm1.FormCreate(Sender: TObject);
728722 begin
729723 Ca|ption
730724 end;
731725```
732726
733727   Sólo se mostrarán los identificadores que comienzan por 'Ca'.
734728
735729### Teclas
736730
737731- Letra o numero: añade el carácter al código del editor y al prefijo. La lista se actualiza.
738-- Borrar hacia atrás (<span class="kbd">Backspace</span>): elimina el carácter código del editor y al prefijo. La lista se actualiza.
739-- <span class="kbd">Intro</span> / <span class="kbd">Enter</span>: reemplaza la palabra completa bajo el cursor con el identificador seleccionado y cierra la lista.
740-- <span class="kbd">Shift</span>+<span class="kbd">Enter</span>: cómo <span class="kbd">Enter</span>, pero reemplaza únicamente el prefijo (la parte izquierda) de la palabra bajo el cursor.
741-- <span class="kbd">Up</span> / <span class="kbd">Down</span>: mueve la selección de identificador en la lista.
742-- <span class="kbd">Escape</span>: cierra la lista sin realizar cambios.
743-- <span class="kbd">Tab</span>: completa el prefijo a la siguiente selección. Por ejrmplo: El prefijo actual es 'But' y la lista sólo muestra 'Button1' y 'Button1Click'. Púlsando <span class="kbd">Tab</span> el prefijo se completa a 'Button1'.
732+- Borrar hacia atrás (`Backspace`): elimina el carácter código del editor y al prefijo. La lista se actualiza.
733+- `Intro` / `Enter`: reemplaza la palabra completa bajo el cursor con el identificador seleccionado y cierra la lista.
734+- `Shift`+`Enter`: cómo `Enter`, pero reemplaza únicamente el prefijo (la parte izquierda) de la palabra bajo el cursor.
735+- `Up` / `Down`: mueve la selección de identificador en la lista.
736+- `Escape`: cierra la lista sin realizar cambios.
737+- `Tab`: completa el prefijo a la siguiente selección. Por ejrmplo: El prefijo actual es 'But' y la lista sólo muestra 'Button1' y 'Button1Click'. Púlsando `Tab` el prefijo se completa a 'Button1'.
744738- Otras teclas: realizan su cometido normal y cierran la lista si es necesario.
745739
746740### Métodos
747741
748742   Cuándo el cursor se encuentra en una definición de clase y se utiliza *Completar identificador* aparecerán en la lista los métodos de la clase padre con sus parámetros, e incluirá el *override*. Por ejemplo:
749743
750744``` pascal
751745 TMainForm = class(TForm)
752746 protected
753747 mous|
754748 end;
755749```
756750
757751   Completando con **MouseDown** obtendremos esto:
758752
759753``` pascal
760754 TMainForm = class(TForm)
761755 protected
762756 procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,
763757 Y: Integer); override;
764758 end;
765759```
766760
767761### Propiedades
768762
769763``` pascal
770764 property MiEntero: integer read |;
771765```
772766
773767   Completar identificador mostrará en la lista ***FMiEntero**'' y***GetMiEntero**''.
774768
775769``` pascal
776770 property MiEntero: integer write |;
777771```
778772
779773   Completar identificador mostrará en la lista ***FMiEntero**'' y***SetMiEntero**''.
780774
781775### Sección *Uses* / nombres de unidad
782776
783777   En la sección *Uses* la función *Completar identificador* muestra los nombres de todos los archivos de todas las unidades en la ruta de búsqueda. Se mostraán en minúsculas (v.gr. **avl_tree**), ya que la mayoría tienen de unidades tienen el nombre en minúsculas. Al completar pondrá el nombre verdadero de la unidad (v.gr. **AVL_Tree**).
784778
785779### Sentencias
786780
787781``` pascal
788782 procedure TMainForm.Button1Click(Sender: TObject);
789783 begin
790784 ModalRe|;
791785 end;
792786```
793787
794788   se convierte en:
795789
796790``` pascal
797791 procedure TMainForm.Button1Click(Sender: TObject);
798792 begin
799793 ModalResult:=|;
800794 end;
801795```
802796
803797## Completar palabra
804798
805-   *Completar palabra* se invoca con <span class="kbd">Ctlr</span>+<span class="kbd">W</span>. Muestra una lista con todas las palabras y todos los archivos abiertos en ese momento en el editor. Por lo demás se comporta igual que *Completar identificador*.
799+   *Completar palabra* se invoca con `Ctlr`+`W`. Muestra una lista con todas las palabras y todos los archivos abiertos en ese momento en el editor. Por lo demás se comporta igual que *Completar identificador*.
806800
807801## Ir a directiva de inclusión
808802
809803   *Ir a directiva de inclusión* en el menú Buscar del IDE salta a la sentencia {\$I filename} en que el fichero actual de inclusión es invocado.
810804
811805## Publicar Proyecto
812806
813807   En el menú *Proyecto -\> Publicar proyecto...*. Crea una copia del proyecto completo. Si quieres enviar tú código y sus opciones de compilación a alguien esto te ayudará.
814808
815809   Un directorio normal de proyecto contiene mucha información, pero no es necesario hacerla pública toda:
816810
817811    El archivo .lpi contiene información de la sesión (cómo la posición del cursor y los marcadores de unidades cerradas) y el directorio contine archivos *.ppu*, *.o* y el ejecutable.
818812
819813Elige un directorio vacío donde publicar el proyecto, ya que si existen archivos en el directorio elegido, se eliminarán al publicar el proyecto. (Un diálogo advierte sobre esto).
820814
821815   Para crear un archivo .lpi únicamente con la información básica y con los fuentes, junto con los directorios necesarios utiliza *Publicar Proyecto*.
822816
823817   **Nota**: Desde la versión 0.9.13 existe una nueva *Opciones de proyecto [[:File:Lazarus IDE Opciones Proyecto Sesion.png|Sesión]]* que permite guardar la información de sesión en un archivo distinto del .lpi normal. Este nuevo archivo tiene extensión *.lps* y contiene únicamente la información de la sesión, para dejar el *.lpi* más legible.
824818
825819   En el [[:File:Lazarus IDE Publicar Proyecto.png|diálogo]] puedes configurar el filtro de archivos a incluir y excluir y con *Command after* puedes procesar la salida para comprimir esta en un archivo.
826820
827821## Sugerencias desde comentarios
828822
829823   En varios lugares el IDE muestra sugerencias de un identificador. Por ejemplo cuando mueves el ratón sobre un identificador en el editor de código fuente y esperas unos segundos.
830824
831825   Cuando el IDE muestra algunas pistas para un identificador busca la declaración y la de todos sus ancestros y busca comentarios y archivos fpdoc. Hay muchos estilos de codificación y muchos estilos de comentario. A fin de apoyar muchos de los estilos de comentario común el IDE utiliza la heurística siguiente
832826
833827### Comentarios mostrados en la sugerencia
834828
835829   Comentarios precediendo a una declaración, sin línea vacía y que no empiezan con el signo **\<**:
836830
837831``` pascal
838832 var
839833 {comentario}
840834 Identifier: integer;
841835```
842836
843837   Comentarios con el signo **\<** pertenecen al identificador precedente.
844838
845839   Comentarios detrás de un identificador en la misma línea:
846840
847841``` pascal
848842 var
849843 identifier, // comentario
850844 other,
851845```
852846
853847   Comentarios tras la definición en la misma línea:
854848
855849``` pascal
856850 var
857851 identifier:
858852 char; // comentario
859853```
860854
861855   Un ejemplo para el signo **\<**:
862856
863857``` pascal
864858 const
865859 a = 1;
866860 //< comentario para a
867861 b = 2;
868862 // comentario para c
869863 c = 3;
870864```
871865
872866   Los tres tipos de comentarios son compatibles:
873867
874868``` pascal
875869 {Comentario}(*Comentario*)//Comentario
876870 c = 1;
877871```
878872
879873   Los comentarios que empiezan con **\$** y **%** son ignorados.
880874
881875### Comentarios que no se muestra en la sugerencia
882876
883877   Comentarios precedentes separados por una línea en blanco se tratan como no específicas del identificador siguiente. Por ejemplo el comentario de la cabecera de clase siguiente no se muestra en la sugerencia:
884878
885879``` pascal
886880 type
887881 { TMyClass }
888882
889883 TMyClass = class
890884```
891885
892886   Los comentarios de cabecera de la clase se crean en la finalización de clases. Puede desactivar esta opción en *Entorno / Opciones / Codetools / Terminado de Clases / Comentario de cabecera para la clase*. Si desea mostrar el comentario de cabecera en la sugerencia, basta con eliminar la línea vacía.
893887
894888   El siguiente comentario será mostrado para GL_TRUE, pero no para GL_FALSE:
895889
896890``` pascal
897891 // Boolean
898892 GL_TRUE = 1;
899893 GL_FALSE = 0;
900894```
901895
902896## Contribuciones y cambios
903897
904898   Esta página ha sido convertida desde la [versión de epikwiki](http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusIdeTools).
905899
906900- Creación de la página y plantilla original - 4/6/2004 VlxAdmin
907901- Nuevo contenido inicial - 4/10/2004 MattiasG
908902- Pequeños retoque sobre formato - 4/11/2004 VlxAdmin
909903- Adición de la Tabla resumen de los atajos de las *IdeTools* - 12 July 2004 User:Kirkpatc
910904- Versión en castellano (español) iskraelectrica (jldc) / junio-julio de 2008.
911905
912906---
913907*From the Free Pascal wiki, page "Lazarus IDE Tools/es", as it stood on 2022-01-20 after a change by Kai Burghardt, 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).*
914908Category: Castellano
915909Category: Español

Back to history