2010-06-09 15 views
6

Qualcuno potrebbe consigliare come modificare a livello di codice la tabella codici predefinita di Windows XP (sto facendo questo da Delphi)? (Questo sarebbe l'equivalente di andare in Pannello di controllo -> Impostazioni internazionali -> Lingua per applicazioni non Unicode).Modifica a livello di codice la tabella codici predefinita in Windows XP? (da Delphi)

In questo caso, voglio passare a Cinese (PRC) e così scrivo per le seguenti stringhe di registro: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage \ ACP = 936 MACCP = 10008 OEMCP = 936

(Che è esattamente ciò che cambia la modifica della codepage non Unicode nel Pannello di controllo). Ci deve essere un'altra impostazione che ho bisogno di cambiare - e preferirei usare una chiamata API Win (se disponibile) piuttosto che scrivere direttamente nel registro.

Ho anche provato a impostare HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ Language \ Impostazione predefinita = 0804 (cinese PRC) senza alcun risultato.

Io non voglio cambiare il 'locale' di per sé in quanto questo cambierà anche il tempo/impostazioni di data, separatori, ecc ecc

Questo è perché sto utilizzando un'applicazione ANSI che ha bisogno di renderizza caratteri cinesi, e sto scrivendo uno strumento per far passare automaticamente il sistema a mostrare i caratteri (lasciando intatti altri aspetti dell'interfaccia utente).

Grazie!

Duncan

risposta

8

L'unica volta che questo sarebbe opportuno è se si sta scrivendo una domanda di tipo chiosco dove nient'altro verrà eseguito sul sistema. Quella modifica interesserà ogni altra applicazione sul sistema.

Se avete solo bisogno di rendere i personaggi e li può ottenere in un WideString è possibile rendere in vecchie versioni di Delphi chiamando i W versioni delle API di Windows direttamente, piuttosto che passare attraverso i metodi TCanvas. Cioè, chiama DrawTextW o ExtTextOutW anziché TCanvas.TextOut e disegna i caratteri Unicode senza convertirli nella codepage ANSI del sistema.

Un'opzione più completa è TMS Unicode Component Pack. Supporta le applicazioni abilitate per Unicode in Delphi 6-2007 e gestisce tutte le funzioni W per te. Funziona bene e puoi semplicemente usare TCanvas o le proprietà Caption/Text come normali .; l'unica differenza è che le proprietà sono tutte WideStrings. Originariamente era il pacchetto Unicode Controls TNT, e c'è una versione precedente, non supportata, di quello disponibile here.

Infine, è possibile utilizzare l'utilità Microsoft AppLocale per modificare la tabella codici ANSI per la propria applicazione. Ci sono dettagli su come chiamarlo da uno script batch here, una patch per eseguirlo senza la schermata nag here e un clone della riga di comando denominato SBAppLocale. Funziona, ma è un hack, e le altre opzioni sono migliori a lungo termine.

+0

Craig - Sì, questa è un'applicazione di console in cui il nostro software è l'unica applicazione visibile in esecuzione sul PC (oltre alla shell di Windows). Il software ANSI in questione è già stato scritto e non posso modificarlo (per questa situazione). Sto solo scrivendo un'utilità separata per cambiare la codepage di Windows. L'AppLocale sembra buono.Continuo a ritenere che la soluzione migliore sia quella di cambiare la tabella codici non Unicode, ma sono convinto su come farlo senza fare manualmente clic sull'opzione a discesa nel Pannello di controllo -> Impostazioni internazionali. In entrambi i casi, molte grazie per la pletora di soluzioni! – Duncan

Problemi correlati