Sign in Join
Wiki copytemporary

Dialog Examples/es: what changed

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

OldNewLine
1-## Contents
2-
3- * 1 Algunos diálogos útiles
4- * 1.1 Diálogos con mensaje
5- * 1.1.1 ShowMessage
6- * 1.1.2 MessageBox
7- * 1.1.3 MessageDlg
8- * 1.1.4 El diálogo '**QuestionDlg'**
9- * 1.2 Diálogos de entrada de texto
10- * 1.2.1 InputBox
11- * 1.2.2 InputQuery
12- * 1.2.3 PasswordBox
13- * 1.3 Constantes y tipos usados en los cuadros de diálogo
14-
151# Algunos diálogos útiles
162
173Aquí tenemos algunos diálogos útiles, que no aparecen en la Paleta de Componentes:
184
195 * procedimiento [ShowMessage (const Msg: string);](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/showmessage.html>)
206 * función [MessageBox (Text, Caption : PChar; Flags: Word): Integer;](<http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tapplication.messagebox.html>)
217 * función [MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/messagedlg.html>)
228 * función [InputBox (const ACaption, APrompt, ADefault: string); string;](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputbox.html>)
239 * función [InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html>)
2410 * función [PasswordBox(const ACaption, APrompt : String): String;](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/passwordbox.html>)
2511
2612Cada uno de ellos da lugar a la aparición de una ventana emergente, que contiene cierta información y espera una respuesta del usuario: presionar un botón, introducir algún texto o ambas cosaa. Los programadores tienen poco control sobre el formato, tamaño o posición de estas ventanas, pero pueden cambiar su contenido textual.
2713La razón de que haya varias alternativas es permitir diferentes métodos de crear la ventana y de recibir datos de respuesta para procesar en nuestro código.
2814
2915## Diálogos con mensaje
3016
3117Las ventanas de diálogo con mensaje muestran un mensaje y esperan que se salga de ellos mediante la pulsación de unos de los botones que muestran, o cerrando la ventana con cualquier otra opción disponible.
3218
3319### [ShowMessage](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/showmessage.html>)
3420```
3521Procedure ShowMessage (const Msg: string);
3622 {el procedimiento está definido en la unidad ''Dialogs.pp''}
3723```
3824
3925Es la ventana de diálogo más simple: recibe una cadena como parámetro, y la muestra en una ventana predefinida, con un botón (OK o Aceptar) y un icono de Información. El diálogo se muestra hasta que se cierra con alguna de las opciones posibles: pulsar el único botón o el aspa de la barra de título.
4026La ventana del diálogo es modal, es decir, se muestra, toma el foco y no permite interacción con la aplicación que la originó.
4127
4228Ejemplo:
4329```
4430Program UnMensajeConLazarus;
4531 Uses Dialogs;
4632 var mi_mensaje: string;
4733 begin
4834 mi_mensaje:= 'Este es un texto que se extiende a lo largo de'#13'de dos líneas';
4935 ShowMessage (mi_mensaje);
5036 end.
5137```
5238
5339(nota: cómo se puede ver en el ejemplo el _const_ de la definición del procedimiento significa que no es necesaria una variable, aunque se puede utilizar una variable si lo queremos. Así mismo vemos que los mensajes los podemos dividir en las líneas que deseemos mediante _#13_ , _sLineBreak_ o _LineEnding_ , esto lo podemos usar en todos los cuadros de los que hablamos aquí)
5440
5541[![Lazarus ShowMessage.png](/wiki-images/9/9b/Lazarus_ShowMessage.png)](</File:Lazarus_ShowMessage.png>)
5642
5743### [MessageBox](<http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tapplication.messagebox.html>)
5844```
5945Function Application.MessageBox (Mensaje, Titulo: PChar; Marcadores: longint) : Integer;
6046```
6147
6248Función definida en _**Forms.pp**_ como parte de _TApplication_ , de ahí que tengamos que usarla de esta forma: Application.Messagebox ( ); o bien utilizando la construcción 'With Application do ...'].
6349
6450Sus parámetros:
6551
6652 * Mensaje: El texto del mensaje que queremos mostrar al usuario;
6753 * Titulo: El título de la ventana del cuadro de diálogo;
6854 * Marcadores: Un entero construido al sumar varias constantes (definidas en el módulo LCLType) que definen el icono y botones que mostrará el cuadro, por ejemplo _MB_ABORTRETRYIGNORE + MB_ICONQUESTION_ hará que se muestre un signo de interrogación (?) y tres botones: Abortar, Reintentar e Ignorar.
6955
7056La función devuelve un valor entero que corresponde al botón que se presionó; su valor se puede determinar por referencia a las constantes [IDOK..IDHELP]
7157
7258Si no necesitamos el valor del botón pulsado la podemos invocar cómo un procedimiento, en Pascal no es obligatorio recoger el valor devuelto por una función - véase el ejemplo siguiente:
7359
7460Ejemplo:
7561```
7662Uses Forms, Dialogs, LCLType;
7763
7864 Procedure MuestraMessageBox;
7965 var resp, estilo: integer;
8066 texto: pchar;
8167 begin
8268 with application do
8369 begin
8470 estilo := MB_ABORTRETRYIGNORE + MB_ICONQUESTION;
8571 resp := MessageBox ('Pulsa un botón', 'Ejemplo de MessageBox', estilo); //recogemos el valor de la función
8672 case resp of
8773 IDABORT: texto := 'Abortar';
8874 IDRETRY: texto := 'Reintentar';
8975 IDIGNORE: texto := 'Ignorar';
9076 else texto := 'Has cerrado el cuadro con el aspa: ';
9177 end; //case
9278 MessageBox (texto, 'Respuesta', MB_ICONHAND); // no recogemos el valor devuelto por MessageBox
9379 end; //with
9480 end; //procedmiento
9581```
9682
9783[![Lazarus MessageBox.png](/wiki-images/1/1a/Lazarus_MessageBox.png)](</File:Lazarus_MessageBox.png>) [![Lazarus MessageBoxRespuesta.png](/wiki-images/6/67/Lazarus_MessageBoxRespuesta.png)](</File:Lazarus_MessageBoxRespuesta.png>)
9884
9985### [MessageDlg](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/messagedlg.html>)
10086```
10187function MessageDlg(const aMsg:String; DlgType:TMsgDlgType; Buttons:TMsgDlgButtons; HelpCtx:LongInt):Integer;
10288 function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;
10389 Buttons:TMsgDlgButtons; HelpCtx:longInt):Integer;
10490 function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;
10591 Buttons:TMsgDlgButtons; HelpCtx:LongInt; DefaultButton:TMsgDlgBtn):Integer;
10692 function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;
10793 Buttons:TMsgDlgButtons; const HelpKeyword: String):Integer;
10894```
10995
110- Ver [Tipos de mensaje(TMsgDlgType)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgtype.html>), [Botones(TMsgDlgButtons)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbuttons.html>) [Botones(TMsgDlgBtn)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbtn.html>) Las dos clase de botones definen exactamente lo mismo¿¡!?)
96+Ver [Tipos de mensaje(TMsgDlgType)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgtype.html>), [Botones(TMsgDlgButtons)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbuttons.html>) [Botones(TMsgDlgBtn)](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbtn.html>) Las dos clase de botones definen exactamente lo mismo¿¡!?)
11197
11298Hay cuatro versiones de esta función, en la primera al omitir el título, se pondrá cómo título el identificador de la aplicación; en las demás podemos poner como título de la ventana el texto que nos convenga. En la tercera podemos especificar mediante el parámetro _DefaultButton_ qué botón será el activo por defecto. En la cuarta podemos mostrar la ayuda especificada en _HelpKeyword_.
11399
114100Es el más completo y elaborado de las ventanas de diálogo, y permite al programador un considerable control sobre su aspecto.
115101
116102Los parámetros que definen el tipo de cuadro y el icono es un tipo enumerado, y los botones se pueden especificar como un conjunto entre corchetes, por ejemplo [mbRetry, mbIgnore, mbAbort, mbCancel].
117103
118104 _HelpCtx_ se utiliza para especificar qué tema del archivo de ayuda debe ser demostrado, o cero para no mostrar nínguno. Si se utiliza HelpKeyword se mostrará la ayuda de esa palabra.
119105
120106El valor devuelto por la función corresponde al botón presionado, expresado como un entero (ver más edelante las definiciones de [mrNone..mrAll]).
121107
122- Ejemplo:
108+Ejemplo:
123109```
124110Uses forms, dialogs, lcltype, controls;
125111
126112 procedure EstoSiQueEsUnMensaje;
127113 var tipo: TMsgDlgType;
128114 botones: TMsgDlgButtons;
129115 begin
130116 tipo := mtWarning;
131117 botones:= [mbYesToAll, mbNoToAll];
132118 MessageDlg ('Cosas para no olvidar', 'las personas son las que dan sentido,'#13+
133119 'coherencia y lógica a las cosas', tipo, botones,0);
134120 end;
135121```
136122
137123[![Lazarus MessageDlg.png](/wiki-images/8/81/Lazarus_MessageDlg.png)](</File:Lazarus_MessageDlg.png>)
138124
139125### El diálogo '**QuestionDlg'**
140126
141127El diálogo '**QuestionDlg'** permite cambiar los rótulos de los botones y determinar los botones predetermindo y de cancelar. Ejemplo:
142128```
143129case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYes,'Positivo', mrNo, 'Negativo', mrCancel,'Predetermindado'],'La ayuda') of
144130 mrYes: QuestionDlg ('Este es el Título','Has elegido "Positivo"',mtCustom,[mrOK,'¡Muy bien!'],'');
145131 mrNo: QuestionDlg ('Este es el Título','¡Oh! has elegido "Negativo"',mtCustom,[mrOK,'Exacto'],'');
146132 mrCancel: QuestionDlg ('Título','Has cancelado el diálogo con ESC o el botón "Predetermindado".',mtCustom,[mrOK,'Correcto'],'');
147133 end;
148134```
149135
150136[![QuestionDlg es linux qt.png](/wiki-images/7/70/QuestionDlg_es_linux_qt.png)](</File:QuestionDlg_es_linux_qt.png>)
151137
152138[![Note-icon.png](/wiki-images/b/be/Note-icon.png)](</File:Note-icon.png>)
153139
154140**Nota:** ¡Si el usuario cancela el diálogo y no hay un botón definido como 'IsCancel', mrCancel será devuelto! Si quieres redirigir ESC/cerrar a u botón concreto utiliza el parámetro 'IsCancel' tras el botón deseado . (_Nota del traductor_ , lo traduzco pero no consigo reproducir esta funcionalidad)
155141
156142Ejemplos avanzados con botones (tomados de promptdialog.inc)
157143```
158144[mrOk, '¡Vale!',mrCancel,'Cancela Ahora',mrIgnore, 'Ignorar',300,'¡Hazlo!','IsDefault']
159145```
160146
161147Se muestran cuatro botones:
162148
163149 * '¡Vale' que devuelve _mrOk_
164150 * 'Cancela Ahora' que devuelve _mrCancel_
165151 * 'Ignorar' que devuelve _mrIgnore_
166152 * '¡Hazlo!' que devuelve _300_. Este es el botón predeterminado (con el foco)
167153
168154Es habitual que los botones en los diálogos de Lazarus tengan iconos. Con el fin de evitar que los iconos se muestren, se pueden utilizar valores no normalizados como resultado de los mensajes. El valor normalizado má alto hasta hoy es 11. Por ejemplo:
169155```
170156case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[20,'Positivo', 21, 'Negativo',22,'No lo sé','IsDefault'],'') of
171157 20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[20,'Eso está bien'],'');
172158 21: QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[21,'Correcto'],'');
173159 22: QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[22,'Tal vez'],'');
174160 end;
175161```
176162
177163Con el fin de facilitar el trabajo, definiremos constantes. Por ejemplo:
178164```
179165const
180166 mrNoneNI= 20;
181167 mrOkNI= mrNoneNI+1;
182168 mrCancelNI= mrNoneNI+2;
183169 mrAbortNI= mrNoneNI+3;
184170 mrRetryNI= mrNoneNI+4;
185171 mrIgnoreNI= mrNoneNI+5;
186172 mrYesNI= mrNoneNI+6;
187173 mrNoNI= mrNoneNI+7;
188174 mrAllNI= mrNoneNI+8;
189175 mrYesToAllNI= mrNoneNI+10;
190176 mrCloseNI= mrNoneNI+11;
191177 mrLastNI= mrCloseNI;
192178 begin
193179 case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYesN,'Positivo', mrNoNI, 'Negativo',22,'No lo sé','IsDefault'],'') of
194180 20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[mrYesNI,'Eso está bien'],'');
195181 21: QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[mrNoNI,'Correcto'],'');
196182 22: QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[mrCancelNI,'Tal vez'],'');
197183 end;//case
198184 end;
199185```
200186
201187[![QuestionDlg esp 002.png](/wiki-images/4/47/QuestionDlg_esp_002.png)](</File:QuestionDlg_esp_002.png>)
202188
203189## Diálogos de entrada de texto
204190
205191### [InputBox](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputbox.html>)
206192
207193Junto con el mensaje muestra una caja de edición para que el usuario pueda escribir un texto que será pasado a la aplicación.
208194```
209195Function InputBox(const ATitulo, ACursor, ADefecto : String) : String;
210196```
211197
212198Se puede especificar el título de la Ventana (ATitulo), el mensaje que indicará al usuario que tipo de entrada de texto se espera que realice (ACursor) e incluso un texto ya predefinido (ADefecto). El texto escrito por el usuario o el proporcionado es devuelto a la aplicación como resultado de la función. La vnta muestr loa botones mbOK y mbCancel)
213199
214200Ejemplo:
215201```
216202Uses forms, lcltype, dialogs, controls;
217203
218204 procedure VentanaEntradaTexto;
219205 var textoUsuario: string;
220206 begin
221207 textoUsuario := InputBox ('Introducción de texto por el usuario',
222208 'Por favor, escribe algo aquí:',
223209 'Si no quieres escribir, este es el texto que se devolverá');
224210 ShowMessage (textoUsuario);
225211 end
226212```
227213
228214[![Lazarus InputBox.png](/wiki-images/4/4b/Lazarus_InputBox.png)](</File:Lazarus_InputBox.png>)
229215
230216(nota: ojo con esta ventana, el texto de _ACursor_ tiene un límite de longitud visible, ya que la ventana tiene un ancho y un alto limitado y fijo, y mostrará el texto en una única línea -al menos a día de hoy-)
231217
232218### [InputQuery](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html>)
233219```
234220Function InputQuery(const ATitulo, ACursor : String; Enmascarar : Boolean; var TextoUsuario : String) : Boolean;
235221 Function InputQuery(const ATitulo, ACursor : String; var TextoUsuario : String) : Boolean;
236222```
237223
238224La función [_**InputQuery**_](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html>), que como [[Dialog Examples|_InputBox_]], permite al usuario introducir texto, tiene dos versiones; en la primera se utiliza el parámetro _Enmascarar_ que indica si el texto que escribe el usuario se sustituye por asteriscos (valor _true_) o no (_false_), como para escribir una contraseña; en la segunda se omite este parámetro, lo que equivale a darle el valor _false_. El texto introducido por el usuario se devuelve en el parámetro _TextoUsuario_ (por eso es variable); la función devuelve _true_ si se presionó el botón _Aceptar_ , o _falso_ si se cerró la ventana de cualquier otra forma (por ejemplo, pulsando el icono 'X' de la barra de título).
239225
240226Ejemplo:
241227```
242228Uses forms, lcltype, dialogs, controls;
243229
244230 procedure TryInputQuery;
245231 var respuesta: boolean;
246232 TextoUsuario: string;
247233 begin
248234 respuesta := InputQuery ('Una cuestión de geografía', '¿Capital de Nicaragua?', true, TextoUsuario);
249235 if respuesta {= true} and (TextoUsuario = 'Managua') then
250236 ShowMessage ('Efectivamente ' + TextoUsuario + ' es la capital de Nicaragua')
251237 else
252238 begin
253239 InputQuery ('Prueba de nuevo', 'No has pulsado ''OK'' o tu respuesta (' + TextoUsuario
254240 + ') no es la capital de Nicaragua', TextoUsuario);
255241 ShowMessage (' Tu respuesta ha sido: ' + TextoUsuario);
256242 end;
257243 end;
258244```
259245
260246[![Lazarus InputQuery.png](/wiki-images/7/7e/Lazarus_InputQuery.png)](</File:Lazarus_InputQuery.png>) [![Lazarus InputQueryNoMascara.png](/wiki-images/4/43/Lazarus_InputQueryNoMascara.png)](</File:Lazarus_InputQueryNoMascara.png>)
261247
262248Nota: en la segunda imagen apreciamos que _InputQuery_ padece el mismo defecto que _InputBox_ respecto del texto que puede mostrar por la limitación de las dimensiones de la ventana. En Linux, con Lazarus 0.09.30-0 y FPC 2.4.2 este defecto no aparece y la ventana se expande; además se pueden crear nuevas líneas con #13)
263249
264250[![InputQuery ES Linux LAZ 0.9.30-0 FPC-2.4.2.png](/wiki-images/2/29/InputQuery_ES_Linux_LAZ_0.9.30-0_FPC-2.4.2.png)](</File:InputQuery_ES_Linux_LAZ_0.9.30-0_FPC-2.4.2.png>)
265251
266252### [PasswordBox](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/passwordbox.html>)
267253```
268254Function PasswordBox(const ACaption, APrompt : String) : String;
269255```
270256
271257Su comportamiento es parecido a [[Dialog Examples|InputBox]], consistiendo las diferencias en que no hay texto por defecto y el texto que el usuario escribe se enmascara.
272258
273259## Constantes y tipos usados en los cuadros de diálogo
274260
275261Constantes y tipos importantes que se utilizan en estos diálogos y que están predefinidas en la biblioteca LCL:
276262
277263Constantes enteras para definir tipos de botones e iconos que se muestran en MessageBox, definidos en la unidad _**LCLType.pp**_ :
278264```
279265//Botones
280266 MB_OK = $00000000;
281267 MB_OKCANCEL = $00000001;
282268 MB_ABORTRETRYIGNORE = $00000002;
283269 MB_YESNOCANCEL = $00000003;
284270 MB_YESNO = $00000004;
285271 MB_RETRYCANCEL = $00000005;
286272 //Iconos
287273 MB_ICONHAND = $00000010;
288274 MB_ICONQUESTION = $00000020;
289275 MB_ICONEXCLAMATION = $00000030;
290276 MB_ICONASTERICK = $00000040;
291277 MB_ICONWARNING = MB_ICONEXCLAMATION;
292278 MB_ICONERROR = MB_ICONHAND;
293279 MB_ICONINFORMATION = MB_ICONASTERICK;
294280```
295281
296282Constantes enteras que definen el valor devuelto desde MessageBox según el botón que se presione:
297283```
298284IDOK = 1; ID_OK = IDOK;
299285 IDCANCEL = 2; ID_CANCEL = IDCANCEL;
300286 IDABORT = 3; ID_ABORT = IDABORT;
301287 IDRETRY = 4; ID_RETRY = IDRETRY;
302288 IDIGNORE = 5; ID_IGNORE = IDIGNORE;
303289 IDYES = 6; ID_YES = IDYES;
304290 IDNO = 7; ID_NO = IDNO;
305291 IDCLOSE = 8; ID_CLOSE = IDCLOSE;
306292 IDHELP = 9; ID_HELP = IDHELP;
307293```
308294
309295Definen si el botón por omisión es el primero, el segundo o el tercero:
310296```
311297MB_DEFBUTTON1 = $00000000;
312298 MB_DEFBUTTON2 = $00000100;
313299 MB_DEFBUTTON3 = $00000200;
314300 MB_DEFBUTTON4 = $00000300;
315301```
316302
317303El valor del parámetro Marcadores de _MessageBox_ se forma al añadir una constante botón [MB_OK..MB_RETRYCANCEL], una constante icono [MB_ICONHAND..MB_ICONINFORMATION] y una constante opcional, de botón por defecto [MB_DEFBUTTON1..MB_DEFBUTTON3]
318304
319305Los tipos que se utilizan en MessageDlg, los cuales necesitan parámetros AType de TMsgDlgType y AButtons de TMSgDlgButtons:
320306```
321307{ Definido en Dialogs.pp }
322308 type
323309 TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
324310 TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
325311 TMsgDlgButtons = set of TMsgDlgBtn;
326312
327313 const
328314 mbYesNoCancel = [mbYes, mbNo, mbCancel];
329315 mbOKCancel = [mbOK, mbCancel];
330316 mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
331317
332318 MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry,
333319 bkIgnore, bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose);
334320
335321 BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo, mbClose,
336322 mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll);
337323
338324 { Definido en Controls.pp }
339325 const
340326 mrNone = 0;
341327 mrOK = mrNone + 1;
342328 mrCancel = mrNone + 2;
343329 mrAbort = mrNone + 3;
344330 mrRetry = mrNone + 4;
345331 mrIgnore = mrNone + 5;
346332 mrYes = mrNone + 6;
347333 mrNo = mrNone + 7;
348334 mrAll = mrNone + 8;
349335 mrNoToAll = mrNone + 9;
350336 mrYesToAll = mrNone + 10;
351337 mrLast = mrYesToAll;
352338```
353339
354340Sobre las ventanas de diálogo: [Referencia de la unidad _**Dialogs**_ : Procedimientos y funciones](<http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/index-5.html>)
355341
356342---
357343*From the Free Pascal wiki, page "Dialog Examples/es", as the Internet Archive kept it on 2025-01-18, last changed on 2024-12-05. 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