Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Так нужны ведь. Мне например, нужны. И вообще есть горы софта, которые работают без поддержки Юникода. Переписывание софта или переход на другие версии с поддержкой УТФ это в любом случае новые баги, недовольства пользователей и прочее. Не говоря про то, что есть куча старого софта, который заброшен и который вообще некому переписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:00 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Этот старый софт не пытается говорить по-русски с французами. Серьёзно повторяю предложение задействовать TNT Unicode Controls и не парить моск. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:05 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
avp_ Fr0sT-Brutal ACP должны умереть. К чему такой фашизм? Горы софта написано который работает и делает своё дело. К тому, что это гемор и пережиток темного прошлого. Аналоговое ТВ сдохло, и кодовые страницы должны сдохнуть тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:24 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Так TNT надо было использовать с самого начала а в идеале и писать на Delphi 2010 сначала, а не на 7 ... А теперь нереально на него переписать десятки тысяч строк кода ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:42 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
на ТНТ перейти гораздо проще, чем на новые версии Delphi. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:45 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, "Наверно, можно перехватывать SetWindowText и в случае acp=utf8 конвертировать строки на лету" - как ни странно - но похоже, что сработало. Пожалуй, использую это, чтобы временно решить проблему сейчас. Но всё равно буду готовить софт к переходу на Delphi 2010 (он юникодный, с него вероятно будет проще перейти на Delphi XE10 в дальнейшем). Delphi 7 рано или поздно умрёт, наверное лучше переходить на D2010, чем на TntComponents (скорее всего и то и то потребует сопоставимо усилий). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:46 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, а что делать со старым кодом, который работает с кучей Edits, Grids, DBGrids итд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:47 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровнаа что делать со старым кодом, который работает с кучей Edits, Grids, DBGrids итд? Назвать новые контролы так же как старые, чтобы имеющийся код ничего не заметил?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 14:50 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Я бы для начала выяснил причину кракозябров в D7. На каком конкретно шаге "не так". Может, там просто всё решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 15:21 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна ... А в Delphi 2010 - проблема такая, что модули VCL идут вообще без исходного кода. Так что непонятно как их модифицировать чтобы сохранить все хаки,сделанные в Delphi 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 15:32 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Тут, по-моему, выход только один: на текущий момент предлагать пользователю отключать эту настройку, которая мешает работать программе, и параллельно начать писать новую версию программы без быдлокода и на современной версии (возможно даже не дельфи, но это по желанию). Иначе в один далеко не прекрасный момент вы столкнётесь с чем-то, что уже не сможете обойти и выхода у вас не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 15:47 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Кстати, помогло создание обёрток в виде, представленном ниже. Это работает с Buttons, но не работает с Edits. type TUtfButton=class(TButton) public procedure SetCaption(s: string); function GetCaption: string; property Caption: string read GetCaption write SetCaption; end; TButton=class(TUtfButton) end; ...................... var mode: integer=0; procedure TUtfButton.SetCaption(s: string); begin if mode=0 then inherited Caption := s else inherited Caption := AnsiToUtf8(s); end; function TUtfButton.GetCaption: string; begin if mode=0 then result := inherited Caption else result := Utf8ToAnsi(inherited Caption); end; .................... BEGIN if GetACP=65001 then mode:=1; END. Главная проблема с Edits - всё работает нормально (даже без обёрток) - если работать с ними с помощью программного кода. Если же стартовое значение Edit было присвоено в свойствах формы (dfm) - в этом случае загружаются крякозябры и расшифровать их уже невозможно. Ч так понимаю, что-то нужно делать в методе F.ReadComponent(Self) чтобы Edits загружались из dfm в верной кодировке ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 15:56 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна Главная проблема с Edits - всё работает нормально (даже без обёрток) - если работать с ними с помощью программного кода. Если же стартовое значение Edit было присвоено в свойствах формы (dfm) - в этом случае загружаются крякозябры и расшифровать их уже невозможно. Ч так понимаю, что-то нужно делать в методе F.ReadComponent(Self) чтобы Edits загружались из dfm в верной кодировке ... Тупо переделать всё на программную инициализацию не предлагать?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:11 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна, Перехватывать WM_SETTEXT/WM_GETTEXT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:13 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна Главная проблема с Edits - всё работает нормально (даже без обёрток) - если работать с ними с помощью программного кода. Если же стартовое значение Edit было присвоено в свойствах формы (dfm) - в этом случае загружаются крякозябры и расшифровать их уже невозможно. Ч так понимаю, что-то нужно делать в методе F.ReadComponent(Self) чтобы Edits загружались из dfm в верной кодировке ... Самый простой и топорный способ - позаменять во всех dfm TEdit => TUtf8Edit. Ну и TUtf8Edit полноценно зарегистрировать в среде как компонент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:21 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
GunSmoker Я бы для начала выяснил причину кракозябров в D7. На каком конкретно шаге "не так". Может, там просто всё решается. Так наверняка при описанном режиме *A функции перегоняются в *W предполагая, что на входе utf8. Конечно, когда там на самом деле 1251, получается лажа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:25 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
alekcvp, Походу - решается вопрос без перехода на программную реализацию (перейти нереально - там десятки тысяч строк кода). При создании формы загружаем из dfm копию компонента - она загрузится в память в ANSI без всяких там перекодировок UTF8 и UTF16. А дальше уже - присваиваем компонентам формы значения из копии - перекодируя с помощью AnsiToUtf8. В этом случае получается то же самое - как и в случае программной реализации. Присваиваем значения точно также программно - только считывая их из копии DFM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:36 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Там всё гораздо хуже. В dfm похоже, что всё хранится в UTF-16, а при чтении из свойства Text компонента - в UTF-8. И при загрузке из dfm русские буквы как-то хитро перекодируются - причём с потерей данных. Например, в Edit был в dfm текст "Песик", 5 символов (не смейтесь, тестировала), а при чтении свойства Edit из свойства Text получалось 6-символьные крякозябры. Записала значение в файл. Открываю в FAR, а там в кодировке 65001 слово "Пес". То есть часть информации потерялась. Поэтому - либо значения Edits не хранить в dfm - либо грузить копию dfm при создании формы - перекодируя как нужно в UTF-8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:42 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна Походу - решается вопрос без перехода на программную реализацию (перейти нереально - там десятки тысяч строк кода). При создании формы загружаем из dfm копию компонента - она загрузится в память в ANSI без всяких там перекодировок UTF8 и UTF16. А дальше уже - присваиваем компонентам формы значения из копии - перекодируя с помощью AnsiToUtf8. В этом случае получается то же самое - как и в случае программной реализации. Присваиваем значения точно также программно - только считывая их из копии DFM. Примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:43 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, Да, именно об этом и речь - только у Вас возможно красивее и проще. Способ, в принципе, рабочий. Осталось написанный некрасивый код причесать и сделать - чтобы всё было в виде одного модуля. При подключении которого в конце секции USES - чтобы всё работало как раньше, как ни в чём не бывало. Без перехвата WM_SETTEXT/WM_GETTEXT вполне можно обойтись - достаточно переопределить свойства Caption, Text у объектов - чтобы при обращении к свойству Text вызывался свой код, который уж как надо всё перекодирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:51 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, Вы имеете ввиду - в вашем варианте вместо моего не придётся грузить копию компонента из dfm, а можно сразу поправить нужные свойства? И присвоить правильные свойства можно будет ещё до того, как они будут испорчены с потерей информации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 16:56 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Анна Петровна Вы имеете ввиду - в вашем варианте вместо моего не придётся грузить копию компонента из dfm, а можно сразу поправить нужные свойства? И присвоить правильные свойства можно будет ещё до того, как они будут испорчены с потерей информации? метод Loaded вызывается сразу после того, как все компоненты формы загрузили свои свойства из dfm-потока. в этот момент вы можете их все скопом перекодировать по своему усмотрению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 17:01 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Текстовые свойства Delphi 7 хранит в Unicode. Т.е. тот же Caption у TButton читается таким методом: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Здесь проблем нет. Далее, прочитанный WideString "Песик" конвертируется в AnsiString вызовом _LStrFromWStr / _LStrFromPWCharLen / CharFromWChar, что в итоге сводится к вызову: Код: pascal 1. где DefaultUserCodePage - глобальная переменная, по умолчанию равная 3 (CP_THREAD_ACP). Т.е. WideString "Песик" корректно преобразуется в UTF-8 "Песик" (10 символов UTF-8). Ну и в дальнейшем эта AnsiString будет передана в *A функции WinAPI, которые тоже корректно должны её опознать. Так что не, что-то где-то другое косячит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 17:40 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, Да, в Loaded можно перекодировать компоненты формы (кнопки и т. д.). Однако каким-то странным образом - в Loaded невозможен доступ к свойствам самой формы. И даже в OnCreate невозможно! То есть заголовок формы в OnCreate и в Loaded перекодировать не получится, а в Activate будет уже поздно. Можно, конечно, в случае GetACP=65001 просто тупо сделать заголовки всех форм пустыми. Но всё же интересно - почему в OnCreate и в Loaded нет доступа (даже на чтение) к свойствам самой формы. Пример кода: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 17:43 |
|
||
|
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
|
|||
|---|---|---|---|
|
#18+
Только что проверил: собрал в Delphi 7 приложение с Button1.Caption = "Песик" и запустил на Win10 c GetACP = UTF-8 - всё прекрасно показалось, как и ожидалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2021, 17:51 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40060393&tid=2037376]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 458ms |

| 0 / 0 |
