Sign in Join
Wiki copytemporary

BGRABitmap tutorial 3/es: what changed

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

OldNewLine
1-Esta tutoría muestra como dibujar en un bitmap con el mouse.
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>)
22
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
16+
317### Crear un nuevo proyecto
418
5-Crea un nuevo proyecto y añade referencia a [[BGRABitmap]], de la misma forma que en [[BGRABitmap tutorial/es|la primer tutoría]].
19+Crea un nuevo proyecto y añade referencia a [[BGRABitmap]], de la misma forma que en [[BGRABitmap tutorial/es|la primer tutoría]].
620
721### Crea una nueva imágen
822
9-Añade una variable privada a la forma principal para almacenar la imágen :
10-
11-``` pascal
12- TForm1 = class(TForm)
13- private
14- { private declarations }
15- image: TBGRABitmap;
16- public
17- { public declarations }
18- end;
23+Añade una variable privada a la forma principal para almacenar la imágen :
1924```
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 :
25+TForm1 = class(TForm)
26+ private
27+ { private declarations }
28+ image: TBGRABitmap;
29+ public
30+ { public declarations }
31+ end;
32+```
2233
23-``` pascal
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 :
35+```
2436procedure TForm1.FormCreate(Sender: TObject);
25-begin
26- image := TBGRABitmap.Create(640,480,BGRAWhite); //crea una imágen de 640x480
27-end;
37+ begin
38+ image := TBGRABitmap.Create(640,480,BGRAWhite); //crea una imágen de 640x480
39+ end;
2840```
2941
3042### Dibuja el bitmap
3143
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
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+```
3546procedure TForm1.FormPaint(Sender: TObject);
36-begin
37- PaintImage;
38-end;
47+ begin
48+ PaintImage;
49+ end;
3950```
4051
41-Añade el procedimiento PaintImage :
42-
43-``` pascal
52+Añade el procedimiento PaintImage :
53+```
4454procedure TForm1.PaintImage;
45-begin
46- image.Draw(Canvas,0,0,True);
47-end;
55+ begin
56+ image.Draw(Canvas,0,0,True);
57+ end;
4858```
4959
50-Luego de escribir esto, pon el cursor en PaintImage y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
60+Luego de escribir esto, pon el cursor en PaintImage y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
5161
5262### Manejar el mouse
5363
54-Con el inspector de objetos, agrega manejadores para los eventos MouseDown y MouseMove :
55-
56-``` pascal
64+Con el inspector de objetos, agrega manejadores para los eventos MouseDown y MouseMove :
65+```
5766procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
58- Shift: TShiftState; X, Y: Integer);
59-begin
60- if Button = mbLeft then DrawBrush(X,Y);
61-end;
62-
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;
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;
6877```
6978
70-Agrega el procedimiento DrawBrush :
71-
72-``` pascal
79+Agrega el procedimiento DrawBrush :
80+```
7381procedure TForm1.DrawBrush(X, Y: Integer);
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;
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;
8290```
8391
84-Luego de escribir esto, pon el cursor en DrawBrush y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
92+Luego de escribir esto, pon el cursor en DrawBrush y presiona Ctrl-Shift-C para agregar la declaración a 'interface'.
8593
86-Este procedimiento dibuja un gradiente radial (gtRadial) :
94+Este procedimiento dibuja un gradiente radial (gtRadial) :
8795
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)
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)
9199
92100### Código
93-
94-``` pascal
101+```
95102unit UMain;
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;
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;
111143 Shift: TShiftState; X, Y: Integer);
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.
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.
171178```
172179
173180### Ejecuta el programa
174181
175-Deberías poder dibujar en la forma.
182+Deberías poder dibujar en la forma.
176183
177-![](/wiki-images/a/aa/BGRATutorial3.png)
184+[![BGRATutorial3.png](/wiki-images/a/aa/BGRATutorial3.png)](</File:BGRATutorial3.png>)
178185
179186### Dibujo contínuo
180187
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;
188+Para tener un dibujo contínuo, necesitamos agregar variables adicionales :
191189```
192-
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.
190+TForm1 = class(TForm)
191+ ...
192+ private
193+ { private declarations }
194+ image: TBGRABitmap;
195+ mouseDrawing: boolean;
196+ mouseOrigin: TPoint;
197+```
194198
195-El manejador de clic lo convierte en algo un poco mas complicado :
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.
196200
197-``` pascal
201+El manejador de clic lo convierte en algo un poco mas complicado :
202+```
198203procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
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;
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;
208213```
209214
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 :
211-
212-![](/wiki-images/b/b1/BGRATutorial3b.png)
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 :
213216
214-De a poco, agregaremos una nueva parte, que es un segmento abierto :
217+[![BGRATutorial3b.png](/wiki-images/b/b1/BGRATutorial3b.png)](</File:BGRATutorial3b.png>)
215218
216-![](/wiki-images/d/d5/BGRATutorial3c.png)
219+De a poco, agregaremos una nueva parte, que es un segmento abierto :
217220
218-Es por esto que necesitamos un nuevo parámetro para la función DrawBrush, que se convierte en :
221+[![BGRATutorial3c.png](/wiki-images/d/d5/BGRATutorial3c.png)](</File:BGRATutorial3c.png>)
219222
220-``` pascal
223+Es por esto que necesitamos un nuevo parámetro para la función DrawBrush, que se convierte en :
224+```
221225procedure TForm1.DrawBrush(X, Y: Integer; Closed: Boolean);
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;
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;
229233```
230234
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.
232-
233-La definición DrawBrush debe ser actualizada en la 'interface'.
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.
234236
235-El manejador MouseMove se convierte en :
237+La definición DrawBrush debe ser actualizada en la 'interface'.
236238
237-``` pascal
239+El manejador MouseMove se convierte en :
240+```
238241procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
239- Y: Integer);
240-begin
241- if mouseDrawing then DrawBrush(X,Y,False);
242-end;
242+ Y: Integer);
243+ begin
244+ if mouseDrawing then DrawBrush(X,Y,False);
245+ end;
243246```
244247
245-Finalmente, necesitamos agregar un manejador MouseUp para actualizar mouseDrawing :
246-
247-``` pascal
248+Finalmente, necesitamos agregar un manejador MouseUp para actualizar mouseDrawing :
249+```
248250procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
249- Shift: TShiftState; X, Y: Integer);
250-begin
251- if Button = mbLeft then
252- mouseDrawing := False;
253-end;
251+ Shift: TShiftState; X, Y: Integer);
252+ begin
253+ if Button = mbLeft then
254+ mouseDrawing := False;
255+ end;
254256```
255257
256258### Código
257-
258-``` pascal
259+```
259260unit UMain;
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;
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;
275305 Shift: TShiftState; X, Y: Integer);
276- procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
277- procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
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;
278322 Shift: TShiftState; X, Y: Integer);
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.
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.
350351```
351352
352353### Ejecuta el programa
353354
354-Ahora el dibujo es en su mayoría contínuo :
355+Ahora el dibujo es en su mayoría contínuo :
355356
356-![](/wiki-images/9/9a/BGRATutorial3d.png)
357+[![BGRATutorial3d.png](/wiki-images/9/9a/BGRATutorial3d.png)](</File:BGRATutorial3d.png>)
357358
358-[[BGRABitmap tutorial 2/es|Tutoría anterior (cargar imágen)]] \| [[BGRABitmap tutorial 4/es|Siguiente tutoría (acceso directo a píxeles)]]
359+[[BGRABitmap tutorial 2/es|Tutoría anterior (cargar imágen)]] | [[BGRABitmap tutorial 4/es|Siguiente tutoría (acceso directo a píxeles)]]
359360
360361---
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
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).*

Back to history