Русский язык в компонентах TShellListView и TShellTreeView.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Русский язык в компонентах TShellListView и TShellTreeView.

Сообщение yantux »

Lazarus MS Windows. Использую TShellListView и TShellTreeView. Проблема в том, что вместо нормального отображения русских букв отображает знаки вопроса. Можно взять путь к файлу и открыть его другим компонентом (например tmemo), но пишет ошибку открытия файла.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

yantux писал(а):Lazarus MS Windows. Использую TShellListView и TShellTreeView. Проблема в том, что вместо нормального отображения русских букв отображает знаки вопроса.
...

Кодировка. 40 000 раз на форуме проблема всплывала.

yantux писал(а):...
Можно взять путь к файлу и открыть его другим компонентом (например tmemo), но пишет ошибку открытия файла.

Проблема из другой области. Не связано со знаками вопроса.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Подсказка: для нормальной работы с путями файлов см. в сторону функции SysToUTF8.
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Сообщение yantux »

Nik писал(а):Подсказка: для нормальной работы с путями файлов см. в сторону функции SysToUTF8.


Я правильно понимаю, что мне придётся обрабатывать все ноды в нужную кодировку, чтобы они корректно отображались?
Это поможет для отображения только для MS Windows XP или это будет кроссплатформенным решением, в т.ч. и для Линукс?

Добавлено спустя 2 минуты 2 секунды:
dunin писал(а):Кодировка. 40 000 раз на форуме проблема всплывала.

Сделал поиск в форуме по названиям компонетов-решения не нашёл, 40 000 раз явно не всплывало.

dunin писал(а):Проблема из другой области. Не связано со знаками вопроса.


Это связано с настойкам Лазаруса, шрифтами или надо насильно пеорекодировать все строки в нодах обоих компонентов, чтобы они корректно тоборажались?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

yantux
1. Для начала расскажите, откуда Вы берёте названия нодов?
2.
yantux писал(а):Можно взять путь к файлу и открыть его другим компонентом (например tmemo), но пишет ошибку открытия файла.

- Если у Вас в путях файлов прсутствуют русские буквы, то при чтении файла надо этот путь преобразовать из UTF8 в системную кодировку (UTF8ToSys(путь к файлу)).
- Если в путях к файлу есть пробелы, то такие пути надо обязательно заключать в кавычки.
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Сообщение yantux »

Vadim писал(а):- Если у Вас в путях файлов прсутствуют русские буквы, то при чтении файла надо этот путь преобразовать из UTF8 в системную кодировку (UTF8ToSys(путь к файлу)).
- Если в путях к файлу есть пробелы, то такие пути надо обязательно заключать в кавычки.


Есть это работает.

А что надо сделать, чтобы компоненты отображали не знаки вопроса, а русские буквы в Windows XP? Я пробовал менять charset в свойствах этих компонентов, но ни чего не помогало. Как заставить эти компонеты автоматически конвертить кодировку для корректного отображения?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

yantux
Vadim писал(а):1. Для начала расскажите, откуда Вы берёте названия нодов?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

yantux Lazarus 0.9.29 rev. 25451 Win32 - русские буквы отображаются нормально.
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Сообщение yantux »

Vadim писал(а):yantux
Vadim писал(а):1. Для начала расскажите, откуда Вы берёте названия нодов?


Нет проблем с путями и названиями файлов и их открытия на русском - делаю utf8tosys.

А вот отображения на русском языке нет.

Добавлено спустя 1 минуту:
Mr.Smart писал(а):yantux Lazarus 0.9.29 rev. 25451 Win32 - русские буквы отображаются нормально.


Нужно брать именно эту версию или можно взять самую последнюю, которая сейчас тестируется?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

yantux писал(а):Нужно брать именно эту версию или можно взять самую последнюю, которая сейчас тестируется?

Последнюю, которая лежит на сайте.

Добавлено спустя 1 минуту 36 секунд:
yantux
Вас надо понимать так, что названия для нодов Вы берёте из файла? А в файл текст Вы пишете на русском и в кодировке 1251?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Vadim - эта пара компонентов сама берёт названия нодов читая имена файлов. Компоненты позволяют быстро создать приложение подобное Проводнику windows.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Mr.Smart
Понятно, спасибо. Я ими никогда не пользовался, поэтому и не знал. ;)
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Сообщение yantux »

В своём очередном чудо проекте я меня поле self.ShellTreeView1.ObjectTypes:=:

Код: Выделить всё

   if otHidden in self.ShellTreeView1.ObjectTypes then
      begin
         self.ShellTreeView1.ObjectTypes:=[otFolders];
         self.MenuItem_hidden_folders.Caption:='Hidden folders yes';
      end else
      begin
         self.ShellTreeView1.ObjectTypes:=[otFolders,otHidden];
         self.MenuItem_hidden_folders.Caption:='Hidden folders no';
      end;


так вот, чтобы обновить компонент, чтобы сделать обновление отображения пришлось найти такой способ:

Код: Выделить всё

   SelectedIndex:=self.ShellTreeView1.Selected.SelectedIndex;
   self.ShellTreeView1.Selected.Expanded:=false;
   self.ShellTreeView1.Selected.SelectedIndex:=SelectedIndex;
   self.ShellTreeView1.Selected.Expanded:=true;   


потому что, update, refresh, invalidte не работают.

Есть ли возможность сделать обновление более культурно?


Аналогичная ситуация с компонентом self.ShellListView1.ObjectTypes:=

Код: Выделить всё

    if otHidden in self.ShellListView1.ObjectTypes then
      begin
         self.ShellListView1.ObjectTypes:=[otNonFolders];
         self.MenuItem_hidden_files.Caption:='Hidden files yes';
      end else
      begin
         self.ShellListView1.ObjectTypes:=[otNonFolders, otHidden];
         self.MenuItem_hidden_files.Caption:='Hidden files no';
      end;

   root:=self.ShellListView1.Root;
   self.ShellListView1.Root:='';
   self.ShellListView1.Root:=root;


Вопрос аналогичный.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Ничего не понял.
Столкнулся с точно такой же проблемой,
ShellTreeView и TShellListView - показывают знаки вопросов, вместо Русских названий файлов и папок.
Как исправить?
Ответить