Sign in Join
Wiki copytemporary

BGRABitmap tutorial 3/es: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-[[BGRABitmap tutorial/es|**Home**]] | [[BGRABitmap tutorial 1/es|**Tutorial 1**]] | [[BGRABitmap tutorial 2/es|**Tutorial 2**]] | **Tutorial 3** | [[BGRABitmap tutorial 4/es|**Tutorial 4**]] | [[BGRABitmap tutorial 5/es|**Tutorial 5**]] | [[BGRABitmap tutorial 6/es|**Tutorial 6**]] | [[BGRABitmap tutorial 7/es|**Tutorial 7**]] | [[BGRABitmap tutorial 8/es|**Tutorial 8**]] | [[BGRABitmap tutorial 9/es|**Tutorial 9**]] | [[BGRABitmap tutorial 10/es|**Tutorial 10**]] | [[BGRABitmap tutorial 11/es|**Tutorial 11**]] | [[BGRABitmap tutorial 12/es|**Tutorial 12**]] | [Edit](<http://wiki.lazarus.freepascal.org/index.php?title=Template:BGRABitmap_tutorial_index/es&action=edit>)
2-
3-Esta tutoría muestra como dibujar en un bitmap con el mouse.
4-
5-## Contents
6-
7- * 1 Crear un nuevo proyecto
8- * 2 Crea una nueva imágen
9- * 3 Dibuja el bitmap
10- * 4 Manejar el mouse
11- * 5 Código
12- * 6 Ejecuta el programa
13- * 7 Dibujo contínuo
14- * 8 Código
15- * 9 Ejecuta el programa
1+Esta tutoría muestra como dibujar en un bitmap con el mouse.
162
173### Crear un nuevo proyecto
184
19-Crea un nuevo proyecto y añade referencia a [[BGRABitmap]], de la misma forma que en [[BGRABitmap tutorial/es|la primer tutoría]].
5+Crea un nuevo proyecto y añade referencia a [[BGRABitmap]], de la misma forma que en [[BGRABitmap tutorial/es|la primer tutoría]].
206
217### Crea una nueva imágen
228
23-Añade una variable privada a la forma principal para almacenar la imágen :
24-```
25-TForm1 = class(TForm)
26- private
27- { private declarations }
28- image: TBGRABitmap;
29- public
30- { public declarations }
31- end;
32-```
9+Añade una variable privada a la forma principal para almacenar la imágen :
3310
34-Crea la imágen cuando la forma es creada. Para hacer esto, haz doble clic en la forma, un procedimiento debe aparecer en el editor de código. Añade la instrucción de creación :
11+``` pascal
12+ TForm1 = class(TForm)
13+ private
14+ { private declarations }
15+ image: TBGRABitmap;
16+ public
17+ { public declarations }
18+ end;
3519```
20+
21+Crea la imágen cuando la forma es creada. Para hacer esto, haz doble clic en la forma, un procedimiento debe aparecer en el editor de código. Añade la instrucción de creación :
22+
23+``` pascal
3624procedure TForm1.FormCreate(Sender: TObject);
37- begin
38- image := TBGRABitmap.Create(640,480,BGRAWhite); //crea una imágen de 640x480
39- end;
25+begin
26+ image := TBGRABitmap.Create(640,480,BGRAWhite); //crea una imágen de 640x480
27+end;
4028```
4129
4230### Dibuja el bitmap
4331
44-Añade un manejador OnPaint. Para hacer esto, selecciona la forma principal, luego ve al inspector de objetos, en la pestaña de eventos haz doble clic en la línea OnPaint. Luego agrega el código de dibujo :
45-```
32+Añade un manejador OnPaint. Para hacer esto, selecciona la forma principal, luego ve al inspector de objetos, en la pestaña de eventos haz doble clic en la línea OnPaint. Luego agrega el código de dibujo :
33+
34+``` pascal
4635procedure TForm1.FormPaint(Sender: TObject);
47- begin
48- PaintImage;
49- end;
36+begin
37+ PaintImage;
38+end;
5039```
5140
52-Añade el procedimiento PaintImage :
53-```
41+Añade el procedimiento PaintImage :
42+
43+``` pascal
5444procedure TForm1.PaintImage;
55- begin
56- image.Draw(Canvas,0,0,True);
57- end;
45+begin
46+ image.Draw(Canvas,0,0,True);
47+end;
5848```
5949
60-Luego de escribir esto, pon el cursor en PaintImage y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
50+Luego de escribir esto, pon el cursor en PaintImage y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
6151
6252### Manejar el mouse
6353
64-Con el inspector de objetos, agrega manejadores para los eventos MouseDown y MouseMove :
65-```
54+Con el inspector de objetos, agrega manejadores para los eventos MouseDown y MouseMove :
55+
56+``` pascal
6657procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
67- Shift: TShiftState; X, Y: Integer);
68- begin
69- if Button = mbLeft then DrawBrush(X,Y);
70- end;
71-
72- procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
73- Y: Integer);
74- begin
75- if ssLeft in Shift then DrawBrush(X,Y);
76- end;
77-```
58+ Shift: TShiftState; X, Y: Integer);
59+begin
60+ if Button = mbLeft then DrawBrush(X,Y);
61+end;
7862
79-Agrega el procedimiento DrawBrush :
63+procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
64+ Y: Integer);
65+begin
66+ if ssLeft in Shift then DrawBrush(X,Y);
67+end;
8068```
69+
70+Agrega el procedimiento DrawBrush :
71+
72+``` pascal
8173procedure TForm1.DrawBrush(X, Y: Integer);
82- const radius = 5;
83- begin
84- image.GradientFill(X-radius,Y-radius, X+radius,Y+radius,
85- BGRABlack,BGRAPixelTransparent, gtRadial,
86- PointF(X,Y), PointF(X+radius,Y), dmDrawWithTransparency);
87-
88- PaintImage;
89- end;
74+const radius = 5;
75+begin
76+ image.GradientFill(X-radius,Y-radius, X+radius,Y+radius,
77+ BGRABlack,BGRAPixelTransparent, gtRadial,
78+ PointF(X,Y), PointF(X+radius,Y), dmDrawWithTransparency);
79+
80+ PaintImage;
81+end;
9082```
9183
92-Luego de escribir esto, pon el cursor en DrawBrush y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
84+Luego de escribir esto, pon el cursor en DrawBrush y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
9385
94-Este procedimiento dibuja un gradiente radial (gtRadial) :
86+Este procedimiento dibuja un gradiente radial (gtRadial) :
9587
96- * el borde rectangular es (X-radius,Y-radius, X+radius,Y+radius).
97- * el centro es negro, el borde es transparente
98- * el centro está en (X,Y) y el borde está en (X+radius,Y)
88+- el borde rectangular es (X-radius,Y-radius, X+radius,Y+radius).
89+- el centro es negro, el borde es transparente
90+- el centro está en (X,Y) y el borde está en (X+radius,Y)
9991
10092### Código
101-```
93+
94+``` pascal
10295unit UMain;
103-
104- {$mode objfpc}{$H+}
105-
106- interface
107-
108- uses
109- Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
110- BGRABitmap, BGRABitmapTypes;
111-
112- type
113- { TForm1 }
114-
115- TForm1 = class(TForm)
116- procedure FormCreate(Sender: TObject);
117- procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
118- Shift: TShiftState; X, Y: Integer);
119- procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
120- procedure FormPaint(Sender: TObject);
121- private
122- { private declarations }
123- image: TBGRABitmap;
124- procedure DrawBrush(X, Y: Integer);
125- procedure PaintImage;
126- public
127- { public declarations }
128- end;
129-
130- var
131- Form1: TForm1;
132-
133- implementation
134-
135- { TForm1 }
136-
137- procedure TForm1.FormCreate(Sender: TObject);
138- begin
139- image := TBGRABitmap.Create(640,480,BGRAWhite);
140- end;
141-
142- procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
96+
97+{$mode objfpc}{$H+}
98+
99+interface
100+
101+uses
102+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
103+ BGRABitmap, BGRABitmapTypes;
104+
105+type
106+ { TForm1 }
107+
108+ TForm1 = class(TForm)
109+ procedure FormCreate(Sender: TObject);
110+ procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
143111 Shift: TShiftState; X, Y: Integer);
144- begin
145- if Button = mbLeft then DrawBrush(X,Y);
146- end;
147-
148- procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
149- Y: Integer);
150- begin
151- if ssLeft in Shift then DrawBrush(X,Y);
152- end;
153-
154- procedure TForm1.FormPaint(Sender: TObject);
155- begin
156- PaintImage;
157- end;
158-
159- procedure TForm1.DrawBrush(X, Y: Integer);
160- const radius = 20;
161- begin
162- image.GradientFill(X-radius,Y-radius, X+radius,Y+radius,
163- BGRABlack,BGRAPixelTransparent,gtRadial,
164- PointF(X,Y), PointF(X+radius,Y), dmDrawWithTransparency);
165-
166- PaintImage;
167- end;
168-
169- procedure TForm1.PaintImage;
170- begin
171- image.Draw(Canvas,0,0,True);
172- end;
173-
174- initialization
175- {$I UMain.lrs}
176-
177- end.
112+ procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
113+ procedure FormPaint(Sender: TObject);
114+ private
115+ { private declarations }
116+ image: TBGRABitmap;
117+ procedure DrawBrush(X, Y: Integer);
118+ procedure PaintImage;
119+ public
120+ { public declarations }
121+ end;
122+
123+var
124+ Form1: TForm1;
125+
126+implementation
127+
128+{ TForm1 }
129+
130+procedure TForm1.FormCreate(Sender: TObject);
131+begin
132+ image := TBGRABitmap.Create(640,480,BGRAWhite);
133+end;
134+
135+procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
136+ Shift: TShiftState; X, Y: Integer);
137+begin
138+ if Button = mbLeft then DrawBrush(X,Y);
139+end;
140+
141+procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
142+ Y: Integer);
143+begin
144+ if ssLeft in Shift then DrawBrush(X,Y);
145+end;
146+
147+procedure TForm1.FormPaint(Sender: TObject);
148+begin
149+ PaintImage;
150+end;
151+
152+procedure TForm1.DrawBrush(X, Y: Integer);
153+const radius = 20;
154+begin
155+ image.GradientFill(X-radius,Y-radius, X+radius,Y+radius,
156+ BGRABlack,BGRAPixelTransparent,gtRadial,
157+ PointF(X,Y), PointF(X+radius,Y), dmDrawWithTransparency);
158+
159+ PaintImage;
160+end;
161+
162+procedure TForm1.PaintImage;
163+begin
164+ image.Draw(Canvas,0,0,True);
165+end;
166+
167+initialization
168+ {$I UMain.lrs}
169+
170+end.
178171```
179172
180173### Ejecuta el programa
181174
182-Deberías poder dibujar en la forma.
175+Deberías poder dibujar en la forma.
183176
184-[![BGRATutorial3.png](/wiki-images/a/aa/BGRATutorial3.png)](</File:BGRATutorial3.png>)
177+![](/wiki-images/a/aa/BGRATutorial3.png)
185178
186179### Dibujo contínuo
187180
188-Para tener un dibujo contínuo, necesitamos agregar variables adicionales :
189-```
190-TForm1 = class(TForm)
191- ...
192- private
193- { private declarations }
194- image: TBGRABitmap;
195- mouseDrawing: boolean;
196- mouseOrigin: TPoint;
181+Para tener un dibujo contínuo, necesitamos agregar variables adicionales :
182+
183+``` pascal
184+ TForm1 = class(TForm)
185+ ...
186+ private
187+ { private declarations }
188+ image: TBGRABitmap;
189+ mouseDrawing: boolean;
190+ mouseOrigin: TPoint;
197191```
198192
199-mouseDrawing va a ser 'True' durante el dibujado (con el botón izquierdo presionado) y mouseOrigin el punto inicial del segmento que está siendo dibujado.
193+mouseDrawing va a ser 'True' durante el dibujado (con el botón izquierdo presionado) y mouseOrigin el punto inicial del segmento que está siendo dibujado.
200194
201-El manejador de clic lo convierte en algo un poco mas complicado :
202-```
195+El manejador de clic lo convierte en algo un poco mas complicado :
196+
197+``` pascal
203198procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
204- Shift: TShiftState; X, Y: Integer);
205- begin
206- if Button = mbLeft then
207- begin
208- mouseDrawing := True;
209- mouseOrigin := Point(X,Y);
210- DrawBrush(X,Y,True);
211- end;
212- end;
199+ Shift: TShiftState; X, Y: Integer);
200+begin
201+ if Button = mbLeft then
202+ begin
203+ mouseDrawing := True;
204+ mouseOrigin := Point(X,Y);
205+ DrawBrush(X,Y,True);
206+ end;
207+end;
213208```
214209
215-Esto inicializa el dibujado con la posición actual. Luego, esto dibuja un segmento cerrado (fíjate en el nuevo parámetro para DrawBrush). De todas formas, en el principio, el segmento está cerrado y tiene una longitud cero, que nos da un disco :
210+Esto inicializa el dibujado con la posición actual. Luego, esto dibuja un segmento cerrado (fíjate en el nuevo parámetro para DrawBrush). De todas formas, en el principio, el segmento está cerrado y tiene una longitud cero, que nos da un disco :
216211
217-[![BGRATutorial3b.png](/wiki-images/b/b1/BGRATutorial3b.png)](</File:BGRATutorial3b.png>)
212+![](/wiki-images/b/b1/BGRATutorial3b.png)
218213
219-De a poco, agregaremos una nueva parte, que es un segmento abierto :
214+De a poco, agregaremos una nueva parte, que es un segmento abierto :
220215
221-[![BGRATutorial3c.png](/wiki-images/d/d5/BGRATutorial3c.png)](</File:BGRATutorial3c.png>)
216+![](/wiki-images/d/d5/BGRATutorial3c.png)
222217
223-Es por esto que necesitamos un nuevo parámetro para la función DrawBrush, que se convierte en :
224-```
218+Es por esto que necesitamos un nuevo parámetro para la función DrawBrush, que se convierte en :
219+
220+``` pascal
225221procedure TForm1.DrawBrush(X, Y: Integer; Closed: Boolean);
226- const brushRadius = 20;
227- begin
228- image.DrawLineAntialias(X,Y,mouseOrigin.X,mouseOrigin.Y,BGRA(0,0,0,128),brushRadius,Closed);
229- mouseOrigin := Point(X,Y);
230-
231- PaintImage;
232- end;
222+const brushRadius = 20;
223+begin
224+ image.DrawLineAntialias(X,Y,mouseOrigin.X,mouseOrigin.Y,BGRA(0,0,0,128),brushRadius,Closed);
225+ mouseOrigin := Point(X,Y);
226+
227+ PaintImage;
228+end;
233229```
234230
235-Transmitimos el parámetro Closed a DrawLineAntialias, para indicar cuando el segmento está cerrado o no. Mira el orden de las coordenadas. La posición inicial y la posición final están intercambiadas. De todas formas, para DrawLineAntialias, es la parte final que esta abierta, en este caso, necesitamos que la parte inicial esté abierta.
231+Transmitimos el parámetro Closed a DrawLineAntialias, para indicar cuando el segmento está cerrado o no. Mira el orden de las coordenadas. La posición inicial y la posición final están intercambiadas. De todas formas, para DrawLineAntialias, es la parte final que esta abierta, en este caso, necesitamos que la parte inicial esté abierta.
236232
237-La definición DrawBrush debe ser actualizada en la 'interface'.
233+La definición DrawBrush debe ser actualizada en la 'interface'.
238234
239-El manejador MouseMove se convierte en :
240-```
235+El manejador MouseMove se convierte en :
236+
237+``` pascal
241238procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
242- Y: Integer);
243- begin
244- if mouseDrawing then DrawBrush(X,Y,False);
245- end;
239+ Y: Integer);
240+begin
241+ if mouseDrawing then DrawBrush(X,Y,False);
242+end;
246243```
247244
248-Finalmente, necesitamos agregar un manejador MouseUp para actualizar mouseDrawing :
249-```
245+Finalmente, necesitamos agregar un manejador MouseUp para actualizar mouseDrawing :
246+
247+``` pascal
250248procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
251- Shift: TShiftState; X, Y: Integer);
252- begin
253- if Button = mbLeft then
254- mouseDrawing := False;
255- end;
249+ Shift: TShiftState; X, Y: Integer);
250+begin
251+ if Button = mbLeft then
252+ mouseDrawing := False;
253+end;
256254```
257255
258256### Código
259-```
257+
258+``` pascal
260259unit UMain;
261-
262- {$mode objfpc}{$H+}
263-
264- interface
265-
266- uses
267- Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
268- BGRABitmap, BGRABitmapTypes;
269-
270- type
271- { TForm1 }
272-
273- TForm1 = class(TForm)
274- procedure FormCreate(Sender: TObject);
275- procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
276- Shift: TShiftState; X, Y: Integer);
277- procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
278- procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
279- Shift: TShiftState; X, Y: Integer);
280- procedure FormPaint(Sender: TObject);
281- private
282- { private declarations }
283- image: TBGRABitmap;
284- mouseDrawing: boolean;
285- mouseOrigin: TPoint;
286- procedure DrawBrush(X, Y: Integer; Closed: boolean);
287- procedure PaintImage;
288- public
289- { public declarations }
290- end;
291-
292- var
293- Form1: TForm1;
294-
295- implementation
296-
297- { TForm1 }
298-
299- procedure TForm1.FormCreate(Sender: TObject);
300- begin
301- image := TBGRABitmap.Create(640,480,BGRAWhite);
302- end;
303-
304- procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
260+
261+{$mode objfpc}{$H+}
262+
263+interface
264+
265+uses
266+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
267+ BGRABitmap, BGRABitmapTypes;
268+
269+type
270+ { TForm1 }
271+
272+ TForm1 = class(TForm)
273+ procedure FormCreate(Sender: TObject);
274+ procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
305275 Shift: TShiftState; X, Y: Integer);
306- begin
307- if Button = mbLeft then
308- begin
309- mouseDrawing := True;
310- mouseOrigin := Point(X,Y);
311- DrawBrush(X,Y,True);
312- end;
313- end;
314-
315- procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
316- Y: Integer);
317- begin
318- if mouseDrawing then DrawBrush(X,Y,False);
319- end;
320-
321- procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
276+ procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
277+ procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
322278 Shift: TShiftState; X, Y: Integer);
323- begin
324- if Button = mbLeft then
325- mouseDrawing := False;
326- end;
327-
328- procedure TForm1.FormPaint(Sender: TObject);
329- begin
330- PaintImage;
331- end;
332-
333- procedure TForm1.DrawBrush(X, Y: Integer; Closed: Boolean);
334- const brushRadius = 20;
335- begin
336- image.DrawLineAntialias(X,Y,mouseOrigin.X,mouseOrigin.Y,BGRA(0,0,0,128),brushRadius,Closed);
337- mouseOrigin := Point(X,Y);
338-
339- PaintImage;
340- end;
341-
342- procedure TForm1.PaintImage;
343- begin
344- image.Draw(Canvas,0,0,True);
345- end;
346-
347- initialization
348- {$I UMain.lrs}
349-
350- end.
279+ procedure FormPaint(Sender: TObject);
280+ private
281+ { private declarations }
282+ image: TBGRABitmap;
283+ mouseDrawing: boolean;
284+ mouseOrigin: TPoint;
285+ procedure DrawBrush(X, Y: Integer; Closed: boolean);
286+ procedure PaintImage;
287+ public
288+ { public declarations }
289+ end;
290+
291+var
292+ Form1: TForm1;
293+
294+implementation
295+
296+{ TForm1 }
297+
298+procedure TForm1.FormCreate(Sender: TObject);
299+begin
300+ image := TBGRABitmap.Create(640,480,BGRAWhite);
301+end;
302+
303+procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
304+ Shift: TShiftState; X, Y: Integer);
305+begin
306+ if Button = mbLeft then
307+ begin
308+ mouseDrawing := True;
309+ mouseOrigin := Point(X,Y);
310+ DrawBrush(X,Y,True);
311+ end;
312+end;
313+
314+procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
315+ Y: Integer);
316+begin
317+ if mouseDrawing then DrawBrush(X,Y,False);
318+end;
319+
320+procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
321+ Shift: TShiftState; X, Y: Integer);
322+begin
323+ if Button = mbLeft then
324+ mouseDrawing := False;
325+end;
326+
327+procedure TForm1.FormPaint(Sender: TObject);
328+begin
329+ PaintImage;
330+end;
331+
332+procedure TForm1.DrawBrush(X, Y: Integer; Closed: Boolean);
333+const brushRadius = 20;
334+begin
335+ image.DrawLineAntialias(X,Y,mouseOrigin.X,mouseOrigin.Y,BGRA(0,0,0,128),brushRadius,Closed);
336+ mouseOrigin := Point(X,Y);
337+
338+ PaintImage;
339+end;
340+
341+procedure TForm1.PaintImage;
342+begin
343+ image.Draw(Canvas,0,0,True);
344+end;
345+
346+initialization
347+ {$I UMain.lrs}
348+
349+end.
351350```
352351
353352### Ejecuta el programa
354353
355-Ahora el dibujo es en su mayoría contínuo :
354+Ahora el dibujo es en su mayoría contínuo :
356355
357-[![BGRATutorial3d.png](/wiki-images/9/9a/BGRATutorial3d.png)](</File:BGRATutorial3d.png>)
356+![](/wiki-images/9/9a/BGRATutorial3d.png)
358357
359-[[BGRABitmap tutorial 2/es|Tutoría anterior (cargar imágen)]] | [[BGRABitmap tutorial 4/es|Siguiente tutoría (acceso directo a píxeles)]]
358+[[BGRABitmap tutorial 2/es|Tutoría anterior (cargar imágen)]] \| [[BGRABitmap tutorial 4/es|Siguiente tutoría (acceso directo a píxeles)]]
360359
361360---
362-*From the Free Pascal wiki, page "BGRABitmap tutorial 3/es", as the Internet Archive kept it on 2022-07-06. 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).*
361+*From the Free Pascal wiki, page "BGRABitmap tutorial 3/es", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
362+Category: Castellano
363+Category: Español

Back to history