Italian community of Lazarus and Free Pascal

Programmazione => Graphics => Topic aperto da: Legolas - Agosto 09, 2013, 12:49:50 pm

Titolo: Grafica "very old school"
Inserito da: Legolas - Agosto 09, 2013, 12:49:50 pm
Ciao a tutti :)
Sto scrivendo un programmino di conversione dati che girerà solo in finestra DOS. Volevo infiocchettarlo con qualche fronzolo, tipo caratteri ascii semigrafici, come si faceva una volta (http://www.pierotofy.it/pages/sorgenti/browse/19268/5161/), ma non riesco ad ottenere una corrispondenza tra caratteri dell'editor di Lazarus e caratteri nella finestra della console di windows. Al momento ho aggirato il problema utilizzando direttamente i codici ASCII (#202#205#186 ...). La cosa curiosa è che se utilizzo il codice ASCII direttamente funziona, ma se utilizzo la combinazione ALT+Codice ASCII all'interno di Lazarus, nel code editor il carattere è giusto, ma nella console no:

Codice: [Seleziona]
  writeln('Caratteri da codice ASCII: '#202#186);
  writeln('Caratteri inseriti direttamente: ╩║');

risultato:

Citazione
Caratteri da codice ASCII: ╩║
Caratteri inseriti direttamente: Ôò®Ôòæ

Anche SetConsoleCP() non sembra sortire effetti... Qualche idea?
Titolo: Re:Grafica "very old school"
Inserito da: nomorelogic - Agosto 09, 2013, 04:38:18 pm
dovresti fare una prova e vedere come viene salvato nel sorgente il carattere inserito direttamente con ALT+codice.
Mi spiego meglio, dovresti aprire il sorgente pascal con un editor esadecimale e vedere che cosa ci trovi dove dovrebbe esserci un certo carattere (e secondo me ci trovi 3 caratteri per ogni singolo immesso). Da qualche parte credo di aver appreso che il sorgente pascal sia salvato da lazarus in UTF-8. Il compilatore potrebbe invece leggere le costanti stringa byte per byte (questo spiegherebbe i 6 caratteri ottenuti a fronte di 2 inseriti).

La prima cose che mi viene in mente è quella di vedere se il compilatore ha un qualche parametro per far interpretare le costanti nel sorgenti in UTF-8 ma, anche ci fosse la possibilità, nella finestrina dos... l'UTF-8 sarà letto bene? Ho qualche dubbio, ma non sarebbe male avere la risposta :P

Credo ti toccherà usare i cancelletti :D
Titolo: Re:Grafica "very old school"
Inserito da: nomorelogic - Agosto 09, 2013, 04:51:43 pm
Anche SetConsoleCP() non sembra sortire effetti... Qualche idea?

hai provato con il valore 65001 (UTF-8)?
Titolo: Re:Grafica "very old school"
Inserito da: Legolas - Agosto 09, 2013, 05:41:57 pm
Anche SetConsoleCP() non sembra sortire effetti... Qualche idea?

hai provato con il valore 65001 (UTF-8)?

Sì, ma da solo no basta, come ho scoperto :)
Una pezza (che però fa funzionare la baracca) è la seguente:

Codice: [Seleziona]
  SetConsoleOutputCP(850);
  WriteLn('Caratteri da codice ASCII: '#202#186);
  SetConsoleOutputCP(65001);
  WriteLn(UTF8String('Caratteri inseriti direttamente: ╩║'));

In più, bisogna impostare il carattere della console su Lucida Console invece di Raster. In questo modo c'è corrispondenza tra caratteri grafici inseriti nell'editor del codice e finestra della console  :D
Titolo: Re:Grafica "very old school"
Inserito da: nomorelogic - Agosto 09, 2013, 05:46:46 pm
caspita è vero, ci voleva UTF8String, altro che opzione del compilatore

vabbè fa caldo... :D
Titolo: Re:Grafica "very old school"
Inserito da: Legolas - Agosto 09, 2013, 11:52:57 pm
Altro problema... Il codice funziona bene, fino a quando non aggiungo la unit crt per colorare i caratteri... A quel punto va tutto a farsi benedire e tornano caratteri a casaccio  >:(
Titolo: Re:Grafica "very old school"
Inserito da: bonmario - Agosto 10, 2013, 09:13:49 am
La butto lì ... la uses di crt l'hai messa come ultima o come prima tra le uses? Se è come prima, può darsi che abbia qualche funzione/procedura con lo stesso nome di altre e che quindi viene letta da lì e non da dove veniva letta prima. Se è così, puoi provare ad aggiungerla per ultima. Se non è così ... boh !!!

Ciao, Mario
Titolo: Re:Grafica "very old school"
Inserito da: Legolas - Agosto 10, 2013, 09:45:46 am
Ho provato a metterla sia per prima che per ultima, ma il risultato non cambia
Titolo: Re:Grafica "very old school"
Inserito da: bonmario - Agosto 10, 2013, 10:02:59 am
Ho trovato questo con il tuo stesso problema, ma purtroppo non da soluzioni ... http://forum.lazarus.freepascal.org/index.php?topic=8973.0

Ciao, Mario
Titolo: Re:Grafica "very old school"
Inserito da: bonmario - Agosto 12, 2013, 06:16:18 pm
Confesso che non l'ho letto tutto, ma credo che questa segnalazione si riferisca allo stesso problema:
http://bugs.freepascal.org/view.php?id=24257

Ciao, Mario
Titolo: Re:Grafica "very old school"
Inserito da: Legolas - Agosto 13, 2013, 09:35:14 am
Sì, infatti sembra essere correlato al mio problema. ora seguo l'evoluzione del bug, nel caso vi faccio sapere se ci sono novità ;)