Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7   вперед  Ctrl      все
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Dimitry Sibiryakov,

При переходе на новую версию Delphi неизбежны баги - поэтому нужно будет параллельно вести две версии на D7 и D2010.

Так что тупо Search и Replace не вариант. Надо переписывать проект - чтобы он компилировался в D7 - но при этом без изменений также компилировался в D2010 (только потом, когда сборка будет стабильной на 2010 можно будет отказаться от D7 совсем). Ну или изменения должны быть такие, чтобы нужные куски кода переключались специальной директивой - например,

{$IFDEF Delphi2010}
.................
{$ELSE}
.................
{$ENDIF}

Заменять в каждом модуле {$I AllVcl.pas} на кучу мусора в виде списка модулей в нём - конечно, не проблема (и даже не Search&REplace, а скриптом на AutoIt или на том же Delphi) - но как-то не представляется это правильным и красивым решением.

Сообщение было отредактировано: 8 апр 21, 13:07
8 апр 21, 13:13    [22305929]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
avp_
Member

Откуда:
Сообщений: 100
Анна Петровна

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


Зачем делать самостоятельно? Может лучше пользователю вывести инструкцию как что делать или даже ссылку в интернет с более подробным изложением.

Сообщение было отредактировано: 8 апр 21, 13:12
8 апр 21, 13:19    [22305935]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Анна Петровна
Надо переписывать проект - чтобы он компилировался в D7 - но при этом без изменений также
компилировался в D2010 (только потом, когда сборка будет стабильной на 2010 можно будет
отказаться от D7 совсем). Ну или изменения должны быть такие, чтобы нужные куски кода
переключались специальной директивой - например,

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

Posted via ActualForum NNTP Server 1.5

8 апр 21, 13:21    [22305936]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
avp_

Зачем делать самостоятельно? Может лучше пользователю вывести инструкцию как что делать или даже ссылку в интернет с более подробным изложением.


Ну тогда пользователь точно ничего делать не будет - или как минимум, это отсечёт сразу половину пользователей. Так как пользователи ленивые, чтобы в чём-то разбираться. Решение менять программно - предупредив пользователя - наилучшее. Как я вижу - чтобы минимизировать риск потери пользователя - тут решения два - менять программно и перезагружать, не спрашивая пользователя или делать то же самое - но пользователя спрашивать + на случай если пользователь откажется - добавить немного костылей чтобы всё хоть как-то работало пусть и с багами и с крязозябрами в некоторых местах.
8 апр 21, 13:25    [22305940]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Dimitry Sibiryakov

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


Увы, в этом я тёмный лес :( да и времени нет тут бы с переходом на новую версию Delphi надо разобраться какой ещё GIT ...
8 апр 21, 13:26    [22305942]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Ну правильно, времени нет потому что вы его тратите на кривые костыли. Ваше право.

Posted via ActualForum NNTP Server 1.5

8 апр 21, 13:40    [22305949]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1299
Анна Петровна
...

На 2010 в комплекте есть исходники VCL? Очень нужно чтобы перенести костыли с 7 на 2010. У меня в комплекте с 2010 только dcu. Подозреваю, Embarcadero в 2010 закрыла исходный код VCL, распространяя только DCU. В XE2, XE8, XE10 - кстати исходники есть, как и в 7. А вот в 2010 нет. Вот теперь и думаю, или это целенаправленная политика Embarcadero в 2010 (от которой они потом отказались) или это просто у меня кривая 2010.
...

22305466
Только по-моему нет особого смысла переходить именно на неё, можно и на что-то более позднее. Если хотите что-то относительно старое, то например XE3. Сам долго пользовался 2010, сейчас XE3, пары существенных для меня багов в ней нет по сравнению с 2010.

Сообщение было отредактировано: 8 апр 21, 13:56
8 апр 21, 13:54    [22305955]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
s62

Только по-моему нет особого смысла переходить именно на неё, можно и на что-то более позднее. Если хотите что-то относительно старое, то например XE3. Сам долго пользовался 2010, сейчас XE3, пары существенных для меня багов в ней нет по сравнению с 2010.


Что за баги в 2010?

У 2010 перед XE8 ещё есть преимущество в нетребовательности к ресурсам. Запускается быстро, даже на виртуалках, а XE8 - серьезный проект, который кучу гигов места занимает и который для комфортной работы требует хороший и дорогой ноутбук (который еще довольно непросто выбрать чтобы всё устраивало) с SSD, 8-16 Гб оперативы и прочее.

А D7 и на обычном ноуте за 500$ с Intel Core i3, 4 Гб памяти даже без SSD приемлемо работает. А с SSD вообще шикарно. И 2010 по идее должен быть менее требовательным чем XE8/10.
8 апр 21, 14:17    [22305969]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207

08.04.2021 14:17, Анна Петровна пишет:
> А D7 и на обычном ноуте за 500$ с Intel Core i3, 4 Гб

у меня на старом Celeron-е с 3ГБ памяти на виртуалке (ХР) под Линухом
вполне приемлемо крутится.

Posted via ActualForum NNTP Server 1.5

8 апр 21, 14:21    [22305972]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Вообще мое предложение было такое
unit SomeForm;

uses Windows, Forms, SysUtils, ...;

uses {$I 'AllVCL.inc'};
uses {$I 'AppUnits.inc'};


в идеале, конечно, сделать .inc файлы самодостаточными, т.е. содержащими "uses" и ";", тогда все упростилось бы до
unit SomeForm;

uses Windows, Forms, SysUtils, ...;

{$I 'AllVCL.inc'}
{$I 'AppUnits.inc'}


Но после вот этого
Анна Петровна
AllVcl.pas убирать нельзя, так как на нем базируется MyUnits.pas. В этом и проблема. Если бы D2010 не трогал секцию USES как D7 всё было бы нормально.

уже становится неохота что-то советовать. Ибо как-то озадачивает, что сплайсинг мы могём, а вот отличать механизм подключения модулей в Дельфи от сишных инклюдов - нет. Для справки, подключенное внутри модуля влияет только на этот модуль и недоступно извне.

Сообщение было отредактировано: 8 апр 21, 14:37
8 апр 21, 14:41    [22305988]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Анна Петровна
И ещё ситуация - если в AllVcl.pas надо будет добавить новый модуль - это делается простой правкой файла AllVcl.pas - а не надо будет лазить по всем модулям и добавлять.

Пример ситуации, когда "в AllVcl.pas надо будет добавить новый модуль", не меняя остальной код всех форм - ?

Анна Петровна
И разумеется, хочу перейти на Delphi 2010. Но вот мои USES {$I AllVcl.pas}, {$I MyUnits.pas}; в каждом модуле очень этому мешают.

Все правильно, подобная проктостоматология и должна заставлять авторов неимоверно страдать.
8 апр 21, 14:47    [22305991]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Мимопроходящий

08.04.2021 14:17, Анна Петровна пишет:
> А D7 и на обычном ноуте за 500$ с Intel Core i3, 4 Гб

у меня на старом Celeron-е с 3ГБ памяти на виртуалке (ХР) под Линухом
вполне приемлемо крутится.


Не знаю, но мне для нормальной работы даже с Delphi 7 нужен ноутбук чтобы было не менее 8 Гб RAM и SSD. Иначе работа превращается в ад. Ведь ещё пара браузеров запущены, разные FAR-менеджеры, Office, PDF-Reader-ы и прочее. C Delphi XE10 вообще всё печально в этом случае - либо нужен хороший ноутбук от 16 Гб RAM, Intel Core i7 (при этом не на каждом ноутбуке есть даже 8 Гб, с а 16 вообще найти проблематично, список решений сильно сужается (а у разных моделей есть свои недостатки например неудобный тачпад, большой вес или что-то еще) и вообще они дорогущие), либо комп (ведь речь идёт не о том, чтобы просто запустить -а о том, чтобы нормально работать).
8 апр 21, 14:48    [22305994]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1299
Анна Петровна

Что за баги в 2010?
...

Я сталкивался с таким. Первое, периодически при открытии окна редактора SQL для какого-нибудь Dataset'а возникало AV и бесконечно появляющееся окно - закрываешь его, открывается новое. Так что приходилось закрывать Delphi через диспетчер задач. Было это нерегулярно, то долго нет, то чаще. В XE3 насколько помню, с таким не сталкивался.
Второе, это скорее фича, а не баг. Delphi при запуске создает в папке временных фалов один файл шрифта и после какого-то обновления Windows 7 (а может и других версий Windows) система этот файл блокирует от удаления. Если закрыть Delphi и заново запустить в одной сессии Windows, то при запуске - ошибка. Это описанная проблема. Как решение читал предложение какой-то bat-файл создавать, чтобы он запускался по-моему при старте Delphi и обходил это. Я такого не делал, просто вручную переименовывал этот файл, удалить его Windows не давала, а переименовать - да. В принципе перезапускать IDE часто необходимости нет, но когда сочетался первый баг с этим вот моментом, то вот лишний гемор был. В XE3 такого нет.
Про меньшую устойчивоcть 2010 тут и другие писали, так что наверное и что-то другое есть.
8 апр 21, 14:49    [22305995]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Fr0sT-Brutal

уже становится неохота что-то советовать. Ибо как-то озадачивает, что сплайсинг мы могём, а вот отличать механизм подключения модулей в Дельфи от сишных инклюдов - нет.


Сплайсинг, по-видимому, тоже не особо могём, иначе бы не было столько вопросов :(



Fr0sT-Brutal

Для справки, подключенное внутри модуля влияет только на этот модуль и недоступно извне.


Чтобы подключить сразу все нужные модули - и не задумываясь - подключен ли конкретный модуль к данной форме - в любой форме где нужно - например, писать в коде

CreateOleObject('Excel.Application')

без необходимости вспоминать, что надо ещё прописать в USES ComObj или как он там называется
и т. д.
8 апр 21, 14:55    [22306003]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Fr0sT-Brutal

Все правильно, подобная проктостоматология и должна заставлять авторов неимоверно страдать.


Увы, не совсем очевидно что это "проктостоматология" - по крайней мере, в свое время казалось - что это наоборот - очень удачное решение. Вместо того, чтобы плодить мусор - подключать все необходимые модули сразу одной командой. Разработчики Delphi посчитали по-другому и затруднили так делать в новых версиях но кто ж знал, что так будет ...
8 апр 21, 14:58    [22306004]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
Анна Петровна
Сплайсинг, по-видимому, тоже не особо могём, иначе бы не было столько вопросов :(


Там дело-то вообще не в этом. GetACP возвращает системную настройку вам. От того, что вы её замените на свою функцию ничего не изменится - потому что кроме вас её никто и не использует. Все системные функции, которым говорят "используй ACP" - просто читают настройку напрямую, им не нужна для этого функция.
8 апр 21, 15:47    [22306030]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
Анна Петровна
Не так уж и много костылей получается. ... Там можно и прописать новый вариант ShowMessage и прочего, что перекроет стандартные методы.


Дело вообще ни разу не в ShowMessage, а в строковых константах как таковых. Исправлять нужно их, а не ShowMessage.
8 апр 21, 15:49    [22306033]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker

Дело вообще ни разу не в ShowMessage, а в строковых константах как таковых. Исправлять нужно их, а не ShowMessage.


Да, глючить будет в некоторых местах - но по крайней мере будет хоть как-то работать - да и над уменьшением багов тоже можно работать, создавая различные обёртки с преобразованием Ansi в Utf8 и обратно.

А не просто тупо сплошные крякозябры везде. Но ведь при запуске программы пользователя предупреждаем, что нужно сменить языковые настройки - иначе будут проблемы - так что с этим проблем нет - пользователь поработает пару дней в программе, а потом всё же сменит настройку.

Но по хорошему конечно да, лучше не мучать пользователя и себя, а переходить на Delphi 2010. Осталось только найти решение с USES ...

Сообщение было отредактировано: 8 апр 21, 16:22
8 апр 21, 16:23    [22306050]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker

Дело вообще ни разу не в ShowMessage, а в строковых константах как таковых. Исправлять нужно их, а не ShowMessage.


Исправлять, бегая по всему коду программы совсем не вариант - это еще сложнее будет, чем переход на D2010.
Как временные костыли вижу только создавать преобразователи AnsiToUtf8 и обратно для обращений к VCL - и параллельно готовить проект к переходу на D2010. А внутри программы вся логика как и раньше в ANSI Windows-1251.
8 апр 21, 16:27    [22306052]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker

Там дело-то вообще не в этом. GetACP возвращает системную настройку вам. От того, что вы её замените на свою функцию ничего не изменится - потому что кроме вас её никто и не использует. Все системные функции, которым говорят "используй ACP" - просто читают настройку напрямую, им не нужна для этого функция.


Если найти, откуда GetACP берёт значение и поменять его в оперативной памяти - почему-то заканчивается это всё Access Violation и вылетом программы на Windows 10, хотя на Windows 7 прокатывает. По-любому причём Access Violation происходит не в момент перезаписи ячейки, а уже потом, когда какой-то код (тот же ShowMessage) обращается к изменённой ячейке памяти и пытается что-то делать с этим 1251.

Не в момент перезаписи Access Violation происходит - потому что если записать в ячейку DWORD:1251, а потом сразу же DWORD:65001 - Access Violation не происходит. Я полагаю, там какой-то код, который ищет данные для кодировки 1251 и просто их не находит, так как их просто нет - по крайней мере, просто изменить в ячейку памяти 65001 на 1251 не прокатывает.
8 апр 21, 16:36    [22306060]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Dimitry Sibiryakov

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


А если я не пользуюсь GIT, но пользуюсь WinMerge для сравнения изменений по версиям - это нормально или всё равно не то? Программа сравнивает 2 каталога и изменения в файлах.
8 апр 21, 17:35    [22306098]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207

08.04.2021 17:35, Анна Петровна пишет:
>
> А если я не пользуюсь GIT, но пользуюсь WinMerge для сравнения изменений по версиям - это нормально или всё равно не то?
> Программа сравнивает 2 каталога и изменения в файлах.

так вы теряете "хронологию".
а при использовании git, или svn - все ходы записаны.
и можно легко откатиться к любой ревизии.
кроме того, можно параллельно вести несколько веток проекта.
переключаться между ними, сливать воедино, снова расщеплять и т.д.

Posted via ActualForum NNTP Server 1.5

8 апр 21, 17:39    [22306099]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Анна Петровна
Увы, не совсем очевидно что это "проктостоматология" - по крайней мере, в свое время казалось - что это наоборот - очень удачное решение. Вместо того, чтобы плодить мусор - подключать все необходимые модули сразу одной командой. Разработчики Delphi посчитали по-другому и затруднили так делать в новых версиях но кто ж знал, что так будет ...

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

К сообщению приложен файл. Размер - 51Kb
8 апр 21, 17:41    [22306104]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Анна Петровна
это нормально или всё равно не то?

Это закат солнца вручную. Любая СКВ вам позволит влить багфиксы из ветки старой версии в
новую с минимальными трудозатратами. А вы потратите кучу времени на то чтобы сравнить две
версии старой ветки и воспроизвести те же действия в коде новой ветки. Но, как говорится в
анекдоте, "не жили хорошо, не стоит и начинать".

Posted via ActualForum NNTP Server 1.5

8 апр 21, 17:43    [22306105]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Кажется, нашла решение что делать с

USES {$I AllVcl.pas}

Вместо

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs

там в AllVcl.pas надо написать

{$IFDEF Declared Windows} Windows,{$ENDIF}
{$IFDEF Declared Messages} Messages,{$ENDIF}
{$IFDEF Declared SysUtils} SysUtils,{$ENDIF}
...........................

Тогда то, что Delphi будет вставлять всякую требуху в начало USES - дублируя то, что прописано в AllVcl.pas - никак не будет мешать - ошибки Unit redeclared не будет

Сообщение было отредактировано: 8 апр 21, 17:48
8 апр 21, 17:55    [22306109]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7   вперед  Ctrl      все
Все форумы / Delphi Ответить