Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: yako-_- en 5 Octubre 2010, 01:08 am



Título: Duda de novato en Free pascal
Publicado por: yako-_- en 5 Octubre 2010, 01:08 am
Buenas!!

Mi duda des bien sencilla como puedo imprimir en pantalla en modo consola acentos y Ñ´s en Free Pascal???? los pongo y me muestra caracteres raros. hay alguna librería o algo que re lo permita hacer directamente o tengo que poner en cada letra "char (123)" (el número que sea)

Edito: Otra duda es como puedo cargar una imagen en free pascal? en modo graph o consola un bmp o jpg ¿y música un midi o algo asi?

Gracias un saludo!!!!


Título: Re: Duda de novato en Free pascal
Publicado por: Khronos14 en 5 Octubre 2010, 10:55 am
Para hacer eso tienes que emplear la API de Windows CharToOemBuffA o CharToOemBuffW. En Delphi sería algo así:

Código
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  Windows, SysUtils;
  7.  
  8. var
  9.  S: AnsiString;
  10. begin
  11.  S := 'Ejemplo de cadena: ñ, á, í, ó, é';
  12.  CharToOemBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
  13.  WriteLn(S);
  14.  ReadLn;
  15. end.
  16.  

Saludos.


Título: Re: Duda de novato en Free pascal
Publicado por: d(-_-)b en 5 Octubre 2010, 11:07 am
Tambien puedes seguir este curso muy bueno.

Curso de Pascal de Nacho Cabanes

Citar
# Curso de Pascal, de Nacho Cabanes - Tema 0 - Introducción.
# Curso de Pascal, de Nacho Cabanes - Tema 1 - Generalidades de Pascal.
# Curso de Pascal, de Nacho Cabanes - Tema 2 - Variables.
# Curso de Pascal, de Nacho Cabanes - Tema 3 - Entrada/Salida básica.
# Curso de Pascal, de Nacho Cabanes - Tema 4 - Operaciones matemáticas.
# Curso de Pascal, de Nacho Cabanes - Tema 5 - Condiciones.
# Curso de Pascal, de Nacho Cabanes - Tema 6 - Bucles.
# Curso de Pascal, de Nacho Cabanes - Tema 7 - Constantes y tipos.
# Curso de Pascal, de Nacho Cabanes - Tema 8 - Procedimientos y funciones.
# Curso de Pascal, de Nacho Cabanes - Tema 9 - Otros tipos de datos.
# Curso de Pascal, de Nacho Cabanes - Tema 10 - Pantalla en modo texto.
# Curso de Pascal, de Nacho Cabanes - Tema 11 - Ficheros (1 - Leer fichero de texto).
# Curso de Pascal, de Nacho Cabanes - Tema 11b - Ficheros (2 - Escribir fichero de texto).
# Curso de Pascal, de Nacho Cabanes - Tema 11c - Ficheros (3 - Ficheros con tipo).
# Curso de Pascal, de Nacho Cabanes - Tema 11d - Ficheros (4 - Ficheros generales).
# Curso de Pascal, de Nacho Cabanes - Tema 12 - Creación de unidades.
# Curso de Pascal, de Nacho Cabanes - Tema 13 - Variables dinámicas (1).
# Curso de Pascal, de Nacho Cabanes - Tema 13b - Variables dinámicas (2).
# Curso de Pascal, de Nacho Cabanes - Tema 14 - Gráficos (1).
# Curso de Pascal, de Nacho Cabanes - Tema 14b - Gráficos (2: las órdenes más habituales).
# Curso de Pascal, de Nacho Cabanes - Tema 14c - Gráficos (3: algunos fuentes de ejemplo).
# Curso de Pascal, de Nacho Cabanes - Tema 14d - Gráficos (4: gráficos con TMT Pascal y FPK Pascal).
# Curso de Pascal, de Nacho Cabanes - Tema 14e - Incluir los ficheros BGI en el EXE.
# Curso de Pascal, de Nacho Cabanes - Tema 15 - Servicios del DOS.
# Curso de Pascal, de Nacho Cabanes - Tema 16 - Programación Orientada a Objetos (1).
# Curso de Pascal, de Nacho Cabanes - Tema 16b - Programación Orientada a Objetos (2).
# Curso de Pascal, de Nacho Cabanes - Tema 16c - Programación Orientada a Objetos (3).
# Curso de Pascal, de Nacho Cabanes - Tema 16d - Programación Orientada a Objetos (4).
# Curso de Pascal, de Nacho Cabanes - Tema 16e - Programación Orientada a Objetos (5).
# Curso de Pascal, de Nacho Cabanes - Tema 16f - Programación Orientada a Objetos (6).
# Curso de Pascal, de Nacho Cabanes - Tema 16g - Programación Orientada a Objetos (7).
# Curso de Pascal, de Nacho Cabanes - Tema 16h - Programación Orientada a Objetos (8).
# Curso de Pascal, de Nacho Cabanes - Tema 17 - El entorno Turbo Vision (1).
# Curso de Pascal, de Nacho Cabanes - Tema 17b - El entorno Turbo Vision (2: Ventanas estándar).
# Curso de Pascal, de Nacho Cabanes - Tema 17c - El entorno Turbo Vision (3: Ventanas de diálogo).
# Curso de Pascal, de Nacho Cabanes - Tema 17d - El entorno Turbo Vision (4: Ventanas de texto).
# Curso de Pascal, de Nacho Cabanes - Tema 17e - El entorno Turbo Vision (5: Un fuente de ejemplo).
# Curso de Pascal, de Nacho Cabanes - Ampliación 1 - Otras órdenes no vistas.
# Curso de Pascal, de Nacho Cabanes - Ampliación 2a - Gráficos sin BGI (1).
# Curso de Pascal, de Nacho Cabanes - Ampliación 2b - Gráficos sin BGI (2).
# Curso de Pascal, de Nacho Cabanes - Ampliación 2c - Gráficos sin BGI (3).
# Curso de Pascal, de Nacho Cabanes - Ampliación 2d - Gráficos sin BGI (4).
# Curso de Pascal, de Nacho Cabanes - Ampliación 2e - Gráficos sin BGI (5).
# Curso de Pascal, de Nacho Cabanes - Ampliación 3 - Ordenar datos.
# Curso de Pascal, de Nacho Cabanes - Ampliación 4 - Overlays.
# Curso de Pascal, de Nacho Cabanes - Ampliación 5 - Ensamblador desde Turbo Pascal.

Curso: http://www.freepascal.es/cursos.php


saludos...


Título: Re: Duda de novato en Free pascal
Publicado por: yako-_- en 6 Octubre 2010, 00:33 am
buenas!!

Gracias por las ayuda a ambos me estoy viendo los tutes de nacho cabanes

Lo de usar la api de windows para cada frase que Writeln('loquesea ñ ó');

tengo que crear una variable???

un saludo


Título: Re: Duda de novato en Free pascal
Publicado por: Khronos14 en 6 Octubre 2010, 00:38 am
Puedes hacer algo como esto:

Código
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  Windows, SysUtils;
  7.  
  8. procedure WriteLnOem(Line: AnsiString);
  9. begin
  10.  CharToOemBuffA(PAnsiChar(Line), PAnsiChar(Line), Length(Line));
  11.  WriteLn(Line);
  12. end;
  13.  
  14. begin
  15.  WriteLnOem('Prueba con acentos y ñ: á é í...');
  16.  WriteLnOem('...');
  17.  ReadLn;
  18. end.
  19.  

Saludos.


Título: Re: Duda de novato en Free pascal
Publicado por: yako-_- en 7 Octubre 2010, 00:54 am
Buenas!!

Gracias por la ayuda pero e provado con el codigo ( copy paste) y me sale asi


(http://img685.imageshack.us/img685/8905/dibujobjm.jpg)


A ver si hay otra forma de hacerlo o si estoy haciendo algo mal.

Si no es mucho pedir , si me puedes comentar el código te lo agradecería para saber que estoy haciendo.

Un saludo y gracias de antemano


Título: Re: Duda de novato en Free pascal
Publicado por: Khronos14 en 7 Octubre 2010, 01:13 am
Fallo mío, hice el código al vuelo y no lo comprobé.

Código
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  Windows, SysUtils;
  7.  
  8. procedure WriteLnOem(Line: PAnsiChar);
  9. var
  10. szBuff: PAnsiChar;
  11. begin
  12.  try
  13.    GetMem(szBuff, StrLen(Line)); //Reservamos memoria
  14.    CharToOemBuffA(Line, szBuff, StrLen(Line)); // Convierte la cadena Line en formato Oem, szBuff es el destino
  15.    WriteLn(szBuff); //Escribe la linea en la consola
  16.  finally
  17.    FreeMem(szBuff); //Liberamos la memoria
  18.  end;
  19. end;
  20.  
  21. begin
  22.  WriteLnOem('Ejemplo de cadena: ñ, á, í, ó, é');
  23.  WriteLnOem('...');
  24.  ReadLn;
  25. end.
  26.  

Saludos.


Título: Re: Duda de novato en Free pascal
Publicado por: yako-_- en 10 Octubre 2010, 23:56 pm
Buenas!!

Ya me da un poco de apuro escribir otra vez parece que estoy molestando.

el tema que que hice un "copy paste" y nada me sale una imagen parecia a la mostrada anteriormente pero con diferentes caracteres :-\.

No se si lo dije antes, quizas el tema es que tu me das el codigo de delphi y yo lo estoy compilando en Lazarus. ¿Puede ser ese el problema?

Un saludo y gracias de antemano


Título: Re: Duda de novato en Free pascal
Publicado por: d(-_-)b en 11 Octubre 2010, 01:05 am
No es lo mismo copiar un ejemplo que funciona, a algo muy distiso a como lo aplicas.

de todos modos puedes colocar la parte del codigo que te da el problema para echar un ojo, y ver como lo usas o aplicas.

saludos...


Título: Re: Duda de novato en Free pascal
Publicado por: Khronos14 en 11 Octubre 2010, 01:16 am
La verdad me extraña que sea un problema de Lazarus, a lo mejor puede ser debido a tu Sistema Operativo, y que no tenga instaladas todas las fuentes del sistema.

No tengo Lazarus instalado para probarlo, pero traduje el código a C y funciona perfectamente.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5. #include <windows.h>
  6.  
  7. void WriteLnOem(char* Line)
  8. {
  9. char* szBuff;
  10.  
  11.    szBuff = (char*) malloc(strlen(Line) + 1);
  12.    if (szBuff != NULL){
  13.        CharToOemBuffA(Line, szBuff, strlen(Line));
  14.        szBuff[strlen(Line)] = 0;
  15.        puts(szBuff);
  16.        free(szBuff);
  17.    }    
  18. }
  19.  
  20.  
  21. int main()
  22. {
  23.    WriteLnOem("Ejemplo de cadena: ñ, á, í, ó, é");
  24.    WriteLnOem("...");
  25.    system("pause>null");
  26. return 1;
  27. }
  28.  


Saludos.


Título: Re: Duda de novato en Free pascal
Publicado por: yako-_- en 14 Octubre 2010, 23:56 pm
Buenas!!

Ahora que lo comentas tuve que borrar idiomas por que el windows que instale venia distribución México y estoy en España y tuve que andar en los teclados y tal.

Con referente al código lo puse tal cual aquí os pongo dos capturas:

Código fuente:

(http://img840.imageshack.us/i/16684053.jpg/)

Corriendo:

(http://img97.imageshack.us/i/98085135.jpg/)


Gracias de antemano como siempre y gracias por el interés mostrado

Un saludo!!