FeLiX писал(а):Упс, кажись меня немного не так поняли.
AppData- переменная, основной путь главных настроек.
СurUser или СurrentUser дальнейший путь для определенного пользователя программы, тобишь имя папки в которой хранится его настройки, на подобии квип или кутим.
Таак другой вариант
- Код: Выделить всё
Img1.LoadFromFile(UTF8ToSys(AppPath + 'Pixmap' + PathDelim + CurrentIcons + PathDelim + 'Logo.png'));
Где AppPath путь экзешника, 'Pixmap' имя папки где хранятся изображения, переменная string CurrentIcons имя текущий темы, соответствующая имени папки в Pixmap, откуда надо грузить изображения.
Вот если встречается кириллица, то конечно путь не найден, не смотря на заветное UTF8ToSys().
Если убрать CurrentIcons или AppPath то все ок.
AppPath, CurrentIcons - это всё переменные какого типа? уж не WideString-ли?
Добавлено спустя 1 минуту 51 секунду:А.Н. писал(а):А, кстати, откуда качать его? На sourceforge так и лежит 0.9.28.2. Или я совсем не в теме?
P.S.: Похоже, всё-таки, придётся своими силами исправлять.
Daily snapshots (ака снапшоты, ночные сборки):
http://www.hu.freepascal.org/lazarus/ (выбирай 0.9.29, а не 0.9.28-3)
Добавлено спустя 10 минут 4 секунды:Sergei I. Gorelkin писал(а):Я о том же... С этим багом основная проблема не в том, чтобы его исправить, а чтобы при этом сломать минимально возможное количество кода.
ну так-то можно исправить "малой кровью"
например:
1) исправляем в SysUtils, чтобы значение возвращалось в ANSI кодирвоке.
2) добавляем модуль SysUtilsOld, там пишем такую функцию
- Код: Выделить всё
unit SysUtilsOld; deprecated;
function GetEnvironmentVariable(const s: String): String;
begin
Result:=ANSItoOEM(SysUtils.GetEnvironmentVariable(s))
end;
3) для всех тех, кто использует в своих программах именно OEM результат, нужно просто добавить SysUtilsOld в uses-секцию (обязательно после SysUtils). Все другие должны исходить из того, что возвращается ANSI значение.
Добавление использования всего одного модуля не несёт за собой большого количества правок.