0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 18
1

Открытие файлов с русскими названиями в приложениях. Lazarus

04.04.2016, 17:53. Показов 2374. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Хочу открыть файл через Paint, который уже имеется в Timage1, все хорошо, все работает, но при открытии файла где в пути присутствует русские символы, выдает ошибку. Есть решения? Код ниже.

Добавлено через 53 секунды
Pascal
1
2
3
4
5
6
7
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  if Open_image.FileName = '' then begin
   ShellExecute(0,nil, PChar('"mspaint.exe"'),PChar('""'),nil,1);
   end else
  ShellExecute(0,nil, PChar('"mspaint.exe"'),PChar('"'+Form1.memo1.Lines[IndexImage]+'"'),nil,1);
end;
Нашел что-то по типу UTF8ToSys но не понял как с ним работать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2016, 17:53
Ответы с готовыми решениями:

не работает функция realpath для папок и файлов с русскими названиями
Мне надо запускать функцию scandir(), только в том случае, если существует такой путь, иначе, если...

Не хочет работать с русскими названиями в папках
Открываю файлы вот так: void MainWindow::openFile(const QString &path) { QString...

Распаковка Zip файла с русскими названиями
В общем проблема такого характера, у меня есть архив .zip в нем находится папка с двумя файлами на...

Иконка для директории с русскими названиями в английской windows
Пишу FileExplorer на WPF на компьютере стоит Windows 7 русская, решил протестировать на английской...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
04.04.2016, 18:25 2
Какая версия Лазаруса (и версия ОС, заодно)? В новой (1.6.0) все уже переведено на UTF8, так что никаких проблем с открытием файлов с любыми символами в путях не возникает. Проверил сейчас под Win7 + Lazarus 1.6, нормально открывает файлы не только с кириллицей, а и с фарси в пути.
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 18
04.04.2016, 18:38  [ТС] 3
Lazarus 1.6
Win10
Миниатюры
Открытие файлов с русскими названиями в приложениях. Lazarus  
0
Native x86
Эксперт Hardware
5512 / 3271 / 934
Регистрация: 13.02.2013
Сообщений: 10,416
04.04.2016, 18:41 4
Цитата Сообщение от volvo Посмотреть сообщение
Проверил сейчас под Win7 + Lazarus 1.6, нормально открывает файлы не только с кириллицей, а и с фарси в пути.
Странно. Функция ShellExecute ждет UTF-16 либо ANSI, а лазарус из выражения PChar('"'+Form1.memo1.Lines[IndexImage]+'"') возвращает указатель на строку в UTF-8. Как же оно работает у вас? Или он делает автоматическую перекодировку при вычислении результата выражения вида PChar(UTF8String)?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
04.04.2016, 18:49 5
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от quwy Посмотреть сообщение
Или он делает автоматическую перекодировку при вычислении результата выражения вида PChar(UTF8String)?
Возможно.

По правилам, однако, нужно делать так:
Pascal
1
2
  ShellExecute(0, nil, PWideChar('"mspaint.exe"'),
    PWideChar(UTF8ToUTF16('"' + Form1.memo1.Lines[IndexImage] + '"')), nil, 1);
(не забыть в uses добавить LazUTF8), Kiminaro, попробуй.
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 18
04.04.2016, 19:03  [ТС] 6
volvo, Да, спасибо, все работает, Спасибо!
Пойду почитаю про PWideChar.

Добавлено через 7 минут
volvo, Кстати, вопрос уже в другое русло, но все-таки, вот есть кнопка, которая удаляет из истории (MEmo1 записывает все открывающиеся картинки) последнюю добавленную, а можно сделать так, чтобы удалил текущую которая открыта? Чет сидел вдуплял, но не понял. Извиняюсь за глупости, но это первая программа, да и изучаю программирование всего-ничего.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
04.04.2016, 19:13 7
Ну ты ж открываешь файл, имя которого записано в Memo под индексом IndexImage, так и удаляй строку с этим индексом:
Pascal
1
Memo1.Lines.Delete(IndexImage);
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 18
04.04.2016, 19:17  [ТС] 8
volvo, Все так просто, боже, спасибо большое, чет я тут решил изобрести велосипед .
0
04.04.2016, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2016, 19:17
Помогаю со студенческими работами здесь

монтирую виндовский диск, а у меня там файлы ипапки которые с русскими названиями отображаются как '?????????????'
Подсажите плиз! монтирую виндовский диск, а у меня там файлы ипапки которые с русскими названиями...

В определенной директории, прочитать все имена файлов и создать папки, с названиями этих файлов
В общем Моя задача, в определенной директории, прочитать все имена файлов и создать папки, с...

Открытие ссылки на документ в других приложениях
В Lotus есть такая удобная вещь, как возможность добавлять в письмо ссылку на конкретный документ в...

Массив с названиями файлов
Помогите создать массив srting который будет хранить названия всех файлов из папки. int main(){...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru