Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

**Стандартная Кодовая Страница Windows для не-UNICODE Программ на Delphi 7**

Delphi , Синтаксис , Кодировки

Стандартная Кодовая Страница Windows для не-UNICODE Программ на Delphi 7

Вопрос пользователя связан с необходимостью получения стандартной кодовой страницы Windows для не-UNICODE программ в приложении Delphi 7. Это необходимо для сравнения с другими кодовыми страницами и корректной работы с текстом в программе.

Решение проблемы

Стандартная кодовая страница Windows, установленная для не-UNICODE программ, определяется значением DEFAULT_CHARSET. Это значение зависит от текущей локали системы. Например, для английского (США) это будет ANSI_CHARSET. Для получения этой информации можно использовать функцию GetCPInfoEx с параметром CP_ACP, которая возвращает информацию о стандартной кодовой странице в структуре CPINFOEX.

Пример кода

Ниже приведен пример кода на Object Pascal (Delphi), который демонстрирует, как получить стандартную кодовую страницу Windows:

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Forms;

type
  _cpinfoex = record
    MaxCharSize: UINT; { максимальный размер символа в байтах }
    DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { символ по умолчанию }
    LeadByte: array[0..MAX_LEADBYTES - 1] of Byte; { диапазоны ведущих байтов }
    UnicodeDefaultChar: WCHAR;
    CodePage: UINT;
    CodePageName: array[0..MAX_PATH] of char;
  end;
  TCPInfoEx = _cpinfoex;
  {$EXTERNALSYM CPINFOEX}
  CPINFOEX = _cpinfoex;
  {$EXTERNALSYM GetCPInfoEx}

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    procedure Check;
  public
  end;

function GetCPInfoEx(CodePage: UINT; dwFlags: DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall;
function GetCPInfoEx; external 'kernel32.dll' name 'GetCPInfoExA';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Check;
end;

procedure TForm1.Check;
var
  CPInfoEx: TCPInfoEx;
  CD: Cardinal;
  CharsetInfo: TCharSetInfo;
  CSN, CodePageName, s, info: String;
  i: Integer;
begin
  if GetCPInfoEx(CP_ACP, 0, CPInfoEx) then
  begin
    info := 'CodePage: ' + IntToStr(CPInfoEx.CodePage) + #10;
    CodePageName := '';
    i := 0;
    repeat
      CodePageName := CodePageName + CPInfoEx.CodePageName[i];
      Inc(i);
    until CPInfoEx.CodePageName[i] = #0;
    info := info + 'CodePageName: ' + CodePageName + #10;
    info := info + 'MaxCharSize: ' + IntToStr(CPInfoEx.MaxCharSize) + ' bytes.' + #10;
    s := '';
    for i := 0 to MAX_DEFAULTCHAR - 1 do
      s := s + IntToStr(CPInfoEx.DefaultChar[i]) + ' ';
    info := info + 'DefaultChar: ' + s + #10;
    s := '';
    for i := 0 to MAX_LEADBYTES - 1 - 1 do
      s := s + IntToStr(CPInfoEx.LeadByte[i]) + ' ';
    info := info + 'LeadByte: ' + s + #10;
    info := info + 'UnicodeDefaultChar: ' + CPInfoEx.UnicodeDefaultChar;
    if TranslateCharsetInfo(CPInfoEx.CodePage, CharsetInfo, TCI_SRCCODEPAGE) then
    begin
      CharsetToIdent(CharsetInfo.ciCharset, CSN);
      info := info + ' - ' + IntToStr(CharsetInfo.ciCharset) + ' - ' + CSN + #10;
    end;
    ShowMessage(info);
  end;
end;

// Необходимо добавить определения для TCPInfoEx и GetCPInfoEx, если они не объявлены в модуле Windows.
{$IFDEF _DEBUG}
{$DEFINE EXTERNALSYM}
{$IFDEF UNICODE}
  {$EXTERNALSYM CPINFOEXW}
  {$EXTERNALSYM GetCPInfoExW}
{$ELSE}
  {$EXTERNALSYM CPINFOEXA}
  {$EXTERNALSYM GetCPInfoExA}
{$ENDIF}
{$ENDIF}

end.

Конвертация в TFontCharset

Для использования полученной информации о кодовой странице в объекте TFont, можно использовать функцию TranslateCharsetInfo, которая конвертирует кодовую страницу в соответствующий идентификатор TFontCharset.

Заключение

Используя предложенный код, можно получить стандартную кодовую страницу Windows для не-UNICODE программ, которая зависит от настроек локали системы. Это позволяет сравнивать кодовую страницу с другими и использовать ее в работе с текстом в приложении Delphi 7.

Создано по материалам из источника по ссылке.

Описание: Вопрос касается извлечения информации о стандартной кодовой странице Windows для не-UNICODE программ в среде разработки Delphi 7 для корректной работы с текстом и его сравнения с другими кодовыми страницами.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Кодировки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-03 19:48:32/0.0034890174865723/0