Duda de novato en Free pascal

Iniciado por yako-_-, 5 Octubre 2010, 01:08 AM

0 Miembros y 1 Visitante están viendo este tema.

yako-_-

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!!!!
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

Khronos14

Para hacer eso tienes que emplear la API de Windows CharToOemBuffA o CharToOemBuffW. En Delphi sería algo así:

Código (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

var
  S: AnsiString;
begin
  S := 'Ejemplo de cadena: ñ, á, í, ó, é';
  CharToOemBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
  WriteLn(S);
  ReadLn;
end.


Saludos.

d(-_-)b

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...
Max 400; caracteres restantes: 366

yako-_-

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
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

Khronos14

Puedes hacer algo como esto:

Código (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

procedure WriteLnOem(Line: AnsiString);
begin
  CharToOemBuffA(PAnsiChar(Line), PAnsiChar(Line), Length(Line));
  WriteLn(Line);
end;

begin
  WriteLnOem('Prueba con acentos y ñ: á é í...');
  WriteLnOem('...');
  ReadLn;
end.


Saludos.

yako-_-

#5
Buenas!!

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





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
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

Khronos14

Fallo mío, hice el código al vuelo y no lo comprobé.

Código (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
 Windows, SysUtils;

procedure WriteLnOem(Line: PAnsiChar);
var
szBuff: PAnsiChar;
begin
 try
   GetMem(szBuff, StrLen(Line)); //Reservamos memoria
   CharToOemBuffA(Line, szBuff, StrLen(Line)); // Convierte la cadena Line en formato Oem, szBuff es el destino
   WriteLn(szBuff); //Escribe la linea en la consola
 finally
   FreeMem(szBuff); //Liberamos la memoria
 end;
end;

begin
 WriteLnOem('Ejemplo de cadena: ñ, á, í, ó, é');
 WriteLnOem('...');
 ReadLn;
end.


Saludos.

yako-_-

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
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

d(-_-)b

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...
Max 400; caracteres restantes: 366

Khronos14

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.


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>

void WriteLnOem(char* Line)
{
char* szBuff;

    szBuff = (char*) malloc(strlen(Line) + 1);
    if (szBuff != NULL){
        CharToOemBuffA(Line, szBuff, strlen(Line));
        szBuff[strlen(Line)] = 0;
        puts(szBuff);
        free(szBuff);
    }   
}


int main()
{
    WriteLnOem("Ejemplo de cadena: ñ, á, í, ó, é");
    WriteLnOem("...");
    system("pause>null");
return 1;
}


Saludos.