Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 17.12.2013, 19:32
hilaryon hilaryon вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 18
Репутация: 10
По умолчанию

хех, сразу возник вопрос, что делать с элементами которые не имеют DefaultEncoding свойства? -)
хотя, если загруженные тексты будут уже раскодированы правильно, то поидее все будет работать и так -)

русификация у меня грузится через TIniFile.. придется видимо от него отказаться ( кодировки он не поддерживает

Последний раз редактировалось hilaryon, 17.12.2013 в 19:37.
Ответить с цитированием
  #17  
Старый 17.12.2013, 21:34
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
Всякий раз если не указать явно, будет вызываться API-функция GetACP которая возвращает язык локализации Windows.
Вот это очень и очень странно, поскольку на XP и 2003 GetACP возвращала именно кодировку региональных настроек, а не локализации.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #18  
Старый 17.12.2013, 21:39
hilaryon hilaryon вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 18
Репутация: 10
По умолчанию

в общем способ предложенный работает, правда чтобы им воспользоваться надо все файлы подгружаемые прогонять через перекодированный мемо, и даже после этого если пользоваться функцией chr и ord для изменения букв, к примеру для дешифровки сообщений, он не правильной расшифровывает ( пока не понял почему так

реально жаль что нельзя установить в приложении кодировку и чтобы он не брал настройки с винды (
Ответить с цитированием
  #19  
Старый 17.12.2013, 22:48
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Freeman
Вот это очень и очень странно, поскольку на XP и 2003 GetACP возвращала именно кодировку региональных настроек, а не локализации.
На XP я и проверял. По поводу локализации это я на вскидку сказал, возможно и не от локализации (просто не знаю от чего уж тогда), но уж точно не от региональных настроек.
Вот для примера на русскоязычной WinXP установил языковый стандарт "Итальянский (Италия)", расположение "Танзания" и язык ввода по-умолчанию "Английский (США) - (США)". Запускаю такой код:
Код:
type
  _cpinfoExA = record
    MaxCharSize: UINT;                       { max length (bytes) of a char }
    DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { default character }
    LeadByte: array[0..MAX_LEADBYTES - 1] of Byte;      { lead byte ranges }
    UnicodeDefaultChar: WideChar;
    Codepage: UINT;
    CodePageName: array[0..MAX_PATH -1] of AnsiChar;
  end;

  TCPInfoExA = _cpinfoExA;
  TCPInfoEx = TCPInfoExA;  

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

procedure TForm1.Button1Click(Sender: TObject);
var
  LCPInfo: TCPInfoEx;
begin
  if GetCPInfoEx(GetACP, 0, LCPInfo) then
  begin
    ShowMessageFmt('$%4x (%d) => "%s"', [LCPInfo.Codepage, LCPInfo.Codepage, LCPInfo.CodePageName]);
  end;
end;
Который в результате тем не менее выдаёт: $ 4E3 (1251) => "1251 (ANSI - кириллица)":


Цитата:
Сообщение от hilaryon
хех, сразу возник вопрос, что делать с элементами которые не имеют DefaultEncoding свойства? -)
Можно ещё загружать через RawByteString:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  s: RawByteString;
begin
  fs := TFileStream.Create('ИмяФайла', fmOpenRead);
  try
    SetLength(s, fs.Size);
    fs.Read(Pointer(s)^, fs.Size);
    SetMultiByteConversionCodePage(1251); // Это достаточно сделать однажды, например в FormCreate
    Edit1.Text := s;
  finally
    fs.Free;
  end;
end;
Цитата:
Сообщение от hilaryon
русификация у меня грузится через TIniFile.. придется видимо от него отказаться ( кодировки он не поддерживает
Обычный TIniFile лучше вообще не использовать. В том же модуле есть TMemIniFile полностью реализующий функциональность TIniFile и даже чуть больше.

Цитата:
Сообщение от hilaryon
реально жаль что нельзя установить в приложении кодировку и чтобы он не брал настройки с винды (
Я экспериментировал с DelphiXE2. Возможно в XE5 это исправили.
Ответить с цитированием
  #20  
Старый 17.12.2013, 22:53
hilaryon hilaryon вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 18
Репутация: 10
По умолчанию

пробовал с XE5 тот же результат, кстати чтобы затестить код не таская на другую машину можно просто поменять в реестре кодовую страницу дла 1251 поставить 1252 и перезагрузится

Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1251"="c_1252.nls"
Ответить с цитированием
  #21  
Старый 17.12.2013, 23:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от hilaryon
пробовал с XE5 тот же результат,
Я имел ввиду возможно в XE5 ввели возможность "одним махом" изменить кодовую страницу для ansi-текста.
Цитата:
Сообщение от hilaryon
кстати чтобы затестить код не таская на другую машину можно просто поменять в реестре кодовую страницу дла 1251 поставить 1252 и перезагрузится

Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1251"="c_1252.nls"
Сделал так. Теперь GetACP возвращает 1252 , а вышеприведённый код выводит: $ 4E4 (1252) => "1252 (ANSI - ???????? 1)". Почему знаки вопроса непонятно...
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
hilaryon (17.12.2013)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter