powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
25 сообщений из 175, страница 5 из 7
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40060799
Fr0sT-Brutal

*рукалицо* Если прогер считает, что список подключаемых модулей - это мусор, и при добавлении некой новой функции ему лениво подключить модуль с ней - ну, тогда я умываю руки.


Если программа содержит, скажем, 100 форм - в каждой из которых так или иначе требуется похожий функционал из этих модулей - в чём смысл вручную прописывать в каждой форме в USES кучу одинакового мусора для каждой формы - который кроме того требуется ещё прописывать в определенном порядке иначе будут несовместимости типов с одинаковыми названиями (такое даже в VCL есть!) из разных модулей? Если можно просто написать USES {$I AllVcl.pas}?

Кроме того, в проекте присутствуют переписанные модули Forms.pas, Grids.pas, DBGrids.pas и т. д. - которые теперь используют функционал из других моих модулей - поэтому USES должен быть в строго определённом порядке.

Понятно желание упростить себе жизнь, объединить подключение всех модулей единой командой для каждой формы.

Правда, есть подозрение, что что-то было сделано не так, не по гайдлайнам, не общепринятым способом так скажем, отсюда и проблемы сейчас.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40060820
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анна Петровна,

Пихать в uses всё что надо, и что не надо - это, конечно, дурная практика.
А вот упорядочивать модули в нужном порядке - это имеет смысл, для этого можно и IDE-визард написать (а возможно оно даже уже где-то есть).
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40060830
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна
там в AllVcl.pas надо написать

{$IFDEF Declared Windows} Windows,{$ENDIF}
{$IFDEF Declared Messages} Messages,{$ENDIF}
{$IFDEF Declared SysUtils} SysUtils,{$ENDIF}
А потом вы откроете для себя неймспейсы.

Еще раз - выкиньте свой инклуд и пропишите в каждом модуле требуемый именно этому модулю uses и все. И забудьте о проблеме навсегда
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40060957
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Еще раз - выкиньте свой инклуд и пропишите в каждом модуле требуемый именно этому модулю uses и все. И забудьте о проблеме навсегда

Да бесполезно убеждать. Что совой об пень, что пнём об сову. Особенно после этого
Анна Петровна

Кроме того, в проекте присутствуют переписанные модули Forms.pas, Grids.pas, DBGrids.pas и т. д. - которые теперь используют функционал из других моих модулей - поэтому USES должен быть в строго определённом порядке.

"Всё прогнило, нужно всю систему менять"
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40060979
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а если просто перехватить все функции вывода текста типа DrawTextA и TextOutA и перекодировать в W на лету, то получится поправить хотя бы весь вывод?
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061085
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_, нет. Потому что на вход будут идти смешанные строки: какие-то в UTF-8, какие-то в ANSI.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061093
avp_
Интересно, а если просто перехватить все функции вывода текста типа DrawTextA и TextOutA и перекодировать в W на лету, то получится поправить хотя бы весь вывод?


Как я понимаю, вывод текста ещё зависит от используемого шрифта. В общем, надо определиться и желательно использовать во всей программе один шрифт. Потому что с MS Sans Serif одни особенности (и алгоритмы перехвата), с Arial другие, чтобы тексты отображались нормально и т. д. В моем случае во всей программе Arial, RUSSIAN_CHARSET, SetThreadLocale(1049) - но в некоторых местах может оказаться и MS Sans Serif или что-то другое.

В общем, как я понимаю, по-нормальному вопрос в рамках Delphi 7 не решается - речь может только вестись о минимизации глюков (и в том, чтобы убедить пользователя отключить злополучную галочку).
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061095
Fr0sT-Brutal

Да бесполезно убеждать. Что совой об пень, что пнём об сову. Особенно после этого

Кроме того, в проекте присутствуют переписанные модули Forms.pas, Grids.pas, DBGrids.pas и т. д. - которые теперь используют функционал из других моих модулей - поэтому USES должен быть в строго определённом порядке.
"Всё прогнило, нужно всю систему менять"


Почему нет - очень даже рассматриваю такой вариант. Причем даже до размещения вопроса на этом форуме. Просто очень не хочется так делать - очень уж удобно и красиво модули сгруппированы в Delphi 7 и никаких проблем.

В Delphi 2010, кстати, исходники VCL в комплекте есть если сборка нормальная - тот кто говорил про мою кривую сборку - был прав.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061099
GunSmoker
avp_, нет. Потому что на вход будут идти смешанные строки: какие-то в UTF-8, какие-то в ANSI.


Разве что если только вне зависимости от исходного формата строки - пытаться распознать строку, в каком она формате и всё равно пытаться выполнять преобразование. А в случае неудачи преобразования - оставлять тот формат, что был. Например, преобразовываем UTF-8 в ANSI а если в процессе преобразования произошла неудача - оставляет результат в ANSI т. к. скорее всего строка и так в ANSI.

Конечно, понимаю, что поведение программы в этом случае будет непредсказуемым и некрасивым и вообще за такое надо руки отрывать, разве что использовать такое как вариант - если нужно чтобы отображалось без крякозябр любой ценой, даже ценой потери стабильности программы ...
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061106
avp_
Интересно, а если просто перехватить все функции вывода текста типа DrawTextA и TextOutA и перекодировать в W на лету, то получится поправить хотя бы весь вывод?


Как я понимаю, гораздо надёжнее и стабильнее - перехватывать свойства Text, Caption и прочие у объектов и писать свои наследники стандартных объектов. По мере обнаружения крякозябр в разных местах программы - добавляем перехватчики для разных компонентов и свойств. Например, аналогично Text перехватываем обращения к Hint, аналогично Button перехватывает обращения к Edit и т. д.

И разумеется, у всех компонентов указать одинаковый шрифт (например, Arial) и RUSSIAN_CHARSET. Чтобы поведение перехватчиков было не случайным, а предсказуемым.

Как мне кажется, это единственный способ обеспечить более-менее стабильную работу программы без перехода на юникодный Delphi (написать такой модуль, который подключать ко всем формам программы в секции INTERFACE после USES всех стандартных VCL-модулей и до USES своих модулей (чтобы они - если работают с VCL - использовали уже новые обёртки)):



Код: 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.
37.
38.
39.
UNIT UtfVcl;

.......
type
   TUtfButton=class(TButton)
      public
         procedure SetCaption(s: string);
         function GetCaption: string;
         property Caption: string read GetCaption write SetCaption;
   end;
   TButton=class(TUtfButton)
   end;
..........
IMPLEMENTATION
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;
   SetThreadLocale(1049);
END.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061108
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна
Как я понимаю, гораздо надёжнее и стабильнее - перехватывать свойства Text, Caption и прочие у объектов и писать свои наследники стандартных объектов.
в TNT это уже сделано.
вам непременно нужен ещё один велосипед?
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061128
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
avp_, нет. Потому что на вход будут идти смешанные строки: какие-то в UTF-8, какие-то в ANSI.

Откуда? UTF-8 будет мне видится только оттуда где что то вводилось с клавиатуры.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061172
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_, из 22305574 , 22305637 и 22305592
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061205
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пара мыслей, может кому пригодится:

1. Давно перешел на хранение настроек в json-файле (если есть такая возможность). Очень удобно. Причем не надо придумывать ничего чтением, записью, преобразованием данных. Очень удобно и наглядно в коде использовать. Компонент JsonDataObjects

2. Был опыт поддержки с кучей форм в двух версиях делфи (2006 и 2009, если правильно помню) -- ничего хорошего не приносило, иногда что-то левое пробиралось в dfm и приходилось вручную чистить-восстанавливать. Вздохнул с облегчением, когда все перешли на обновленную версию.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061255
Мимопроходящий
Анна Петровна
Как я понимаю, гораздо надёжнее и стабильнее - перехватывать свойства Text, Caption и прочие у объектов и писать свои наследники стандартных объектов.
в TNT это уже сделано.
вам непременно нужен ещё один велосипед?


Не нужно. Нужно только чтобы тот код, который уже есть - продолжал нормально работать и ни в коем случае не стал хоть на 1% менее стабильным. Хорошо, что пока у большинства пользователей эта опция отключена и вообще многие вообще на Windows 7. С TntComponents если на него переходить стабильность программы может пострадать и у основной категории пользователей да и зачем на них переходить уж лучше сразу тогда наи новую версию Delphi, да и вообще любой компонент в том числе TntComponents это тоже дополнительный костыль, который также затруднит переход на новые версии Delphi в дальнейшнем.

Логика тут в том, что у основной массы пользователей всё должно остаться как есть и чтобы не стало хуже. А у тех, у кого опция эта включена - хотя бы основной функционал чтобы работал и если и будут где-то какие-то глюки - то пусть уж лучше они будут только у тех, у кого данная опция включена (а если они будут обращаться в техподдержку - предлагать эту опцию отключить), но не у вообще всех.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061258
JayDi

1. Давно перешел на хранение настроек в json-файле (если есть такая возможность). Очень удобно. Причем не надо придумывать ничего чтением, записью, преобразованием данных. Очень удобно и наглядно в коде использовать. Компонент JsonDataObjects


Кажется, еще один сторонний компонент - то есть костыль. Который затруднит переход на новые версии Delphi и дополнительно привяжет к Delphi 7. Как мне кажется, при переходе на новые версии Delphi сам по себе появляется доступ ко многим новым стандартным компонентам - которых нет в Delphi 7 и в новых версиях Delphi придётся изобретать меньше велосипедов, тк в комплекте больше возможностей "из коробки".
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061260
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна
JayDi
JsonDataObjects


Кажется, еще один сторонний компонент - то есть костыль. Который затруднит переход на новые версии Delphi и дополнительно привяжет к Delphi 7. Как мне кажется, при переходе на новые версии Delphi сам по себе появляется доступ ко многим новым стандартным компонентам - которых нет в Delphi 7 и в новых версиях Delphi придётся изобретать меньше велосипедов, тк в комплекте больше возможностей "из коробки".


В делфи 7 вообще ничего нет для работы с JSON (собственно, даже JsonDataObjects работает только с 2009 -- но она как пример дана). Я к тому, что у делфи идет настолько кривая и раздутая JSON-библиотека, что тупо отпугнет любого разработчика, кто захочет с ней работать "ради облегчения" процесса -- в результате они так и сидят на устаревших ini-файлах.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061272
JayDi

В делфи 7 вообще ничего нет для работы с JSON (собственно, даже JsonDataObjects работает только с 2009 -- но она как пример дана). Я к тому, что у делфи идет настолько кривая и раздутая JSON-библиотека, что тупо отпугнет любого разработчика, кто захочет с ней работать "ради облегчения" процесса -- в результате они так и сидят на устаревших ini-файлах.


Использую для распознавания JSON велосипед под названием OLE-объекта MSScriptControl.ScriptControl. Как вариант, можно еще использовать Node.js как внешнюю программу для разбора JSON - вызывая скрипт на Node и возвращая ответ в виде файла.

В общем, и так понятно - надо уходить с Delphi 7 - иначе с каждым годом количество вынужденных велосипедов будет расти и проблема велосипедов ещё в том, что зачастую менее эффективны, чем стандартные решения - в итоге дойдет до того, что программа для своей работы будет требовать Intel Core i7, да ещё и работать при этом неспешно.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061277
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна, вот же вы выдумщица )))

для JSON в D7 есть прекрасный superobject.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061281
Cobalt747
Анна Петровна, вот же вы выдумщица )))
для JSON в D7 есть прекрасный superobject.


Еще один сторонний велосипед с GitHub. Неизвестно, кто его делал и неизвестно, как он работает и какие там глюки.
Скорее всего, он гораздо эффективнее, чем предлагаемое мной решение. Но вот опасаюсь - если на него, например, завязать много логики в программе, а потом он заглючит - копаться в чужом коде и выяснять причины ошибок это ад для меня по крайней мере.

Со своими бы велосипедами разобраться они хоть и с квадратными колёсами, зато обкатаны и работают предсказуемо. А стандартным компонентам и программам вроде Node.js я по умолчанию больше доверяю, чем разным сторонним решениям.

Но если конечно - нужна именно скорость и стандартных решений нет, а велосипеды с квадратными колёсами едут слишком медленно - и единственный нормальный вариант использовать стороннее решение - приходится сжав зубы качать и использовать на свой страх и риск.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061284
Кстати, с переходом на Delphi 2010 гадость обнаружилась. Не даёт собака писать длинные процедуры.

Выдаёт ошибку

E2283 Too many local constants. Use shorter procedures

приходится разбивать длинную процедуру на несколько более коротких

Конечно я всё понимаю, писать несколько тысяч литералов в одной процедуре это не есть хорошо. Но с другой стороны зачем выдавать ошибку достаточно предупредить, что так делать нехорошо. Чем-то напоминает глупое ограничение еще из Турбо Паскаль - размер кода не должен превышать 64 килобайта. Смешно - но изучая Турбо Паскаль в свой время - столкнулась с этим ограничением (не более 64 Кб кода) буквально на 7-й день изучения. Используя многократно Copy&Paste это совсем даже не удивительно.
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061286
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь говорили Вам, что 2010 - глючная. Но некоторые просто обязаны наступить на грабли
лично...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061290
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна
Но вот опасаюсь - если на него, например, завязать много логики в программе, а потом он заглючит - копаться в чужом коде и выяснять причины ошибок это ад для меня по крайней мере.

Они годами отлажены. Обычно, если библиотека "глючит" -- значит в нашем коде было сделано что-то не то. Шанс на ошибку в самой библиотеке минимален. В критическом случае можно либо самостоятельно поправить исходники, либо поискать альтернативы. В свое время так пришлось переехать с SimpleXML на OXml, т.к. первый не поддерживал некоторые специфические конструкции, кодировки и большие объемы.

Но сторонняя библиотека НАМНОГО лучшее решение, нежели городить огород со сторонними скриптами (msscript) или сервисами (node.js).
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061299
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анна Петровна
E2283 Too many local constants. Use shorter procedures
Как правило, это свидетельствует об ужасном коде. Возьмите за правило писать процедуры так чтобы они влезали на экран. Хотя бы более 90% всех процедур
...
Рейтинг: 0 / 0
Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
    #40061312
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Возьмите за правило писать процедуры так чтобы они влезали на экран.

На 4K экран в портретной ориентации
...
Рейтинг: 0 / 0
25 сообщений из 175, страница 5 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]