глупый вопрос

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

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

Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

глупый вопрос

Сообщение DYUMON »

Доброго времени суток . вопрос такой я тока щас поставил сам среду и попытался создать простое приложение блокнот
среда 0.9.26

код такой

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

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
memo1.Lines.LoadFromFile(opendialog1.FileName);
end;


но он отказывается работать.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

И в чём заключается "но он отказывается работать"?
Olkha
незнакомец
Сообщения: 7
Зарегистрирован: 09.03.2009 10:20:18

Сообщение Olkha »

Наверное, проблемы с кодировкой.
У меня были, смотри мой вопрос "TStringList: как вытащить конкретную строку"
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Для фукции LoadFromFile() имя файла должно быть в кодировке ANSI, а свойство FileName возвращает в кодировке UTF-8.
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

в том и дело что даже

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

memo1.Lines.LoadFromFile('C:\10-1.txt');

не хотит нифига грузить. я тут форум посмотрел народ жалуется на русскую кодировку :(
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Почему жалуется? Очень даже и доволен :wink:
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Решил проверить - все нормально грузится без всяких извращений с кодировками.
Мандривава 2008.1 gtk2, 0.9.27.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

serg_iv писал(а):Решил проверить - все нормально грузится без всяких извращений с кодировками.
Мандривава 2008.1 gtk2, 0.9.27.

Конечно же работает :wink: Почему неработать если у Вас в системе локаль UTF-8 :wink:
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Почему то после перевода Lazarus на utf8, некоторые компоненты остались на Ansi, поэтому приходится проверять каждый раз, что требуется: Ansi-строка или UTF8 для имени файла.
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

Я пробовал на рабочем компе. Пришел домой поставил написал без проблемм блокнот. принес на работу запустил уже готовый exe он выдал ошибку типо файл "" не существует и умер
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

DYUMON
Возможно на рабочем компе в пути к файлу не было символов кириллицы и ошибка не проявилась , так как что UTF8 - что ANSI одно и тоже, если используются только первые 127 байтов в таблице символов. А на рабочем в пути к файлу символы кириллицы использовались, вот ошибка и проявилась. Используйте UTF8ToSys и SysToUTF8
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

Так на рабочем компе даже
просто путь
'C:\txtx.txt' не хочет грузится
дома UTF8ToSys работает а на работе нифига.

Добавлено спустя 20 минут 43 секунды:
пересобрал среду щас файлы грузятся но теперь внутри кракозябры вместо русских букв. %)
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

ДА простят меня за некрофилию. Прошли годы, опять повторил свой пример. в memo загрузились кракозябры.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Если Лазарь из последних: TMemo отображает в UTF-8. Возможно ваш файл содержит внутри символы в другой кодировке (OEM866 или CP1251)...
Если не уверены точно в какой кодировке, то тут на форуме обсуждалось "как определить кодировку".
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

DYUMON, это проблемы с кодировкой. Лечится подбором функции перекодировки.

Это если исключать проблем с самой средой.

А вообще, у меня работоспособен такой кусок:

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

procedure TForm1.MenuItem8Click(Sender: TObject);
var
  Str:TStringList;
begin
  Str:=TStringList.Create;
  if OpenDialog1.Execute then
       Begin
            MyFile:=OpenDialog1.FileName;
            Form1.Caption:=MyFile+'             LexEditor';
            // ожидается выбор кодировки текста
           Case OpenDialog1.FilterIndex of
             1:begin
                 {$IFDEF MSWINDOWS}
                 Str.LoadFromFile(UTF8ToSys(MyFile));
                 {$ENDIF}
                 {$IFDEF LINUX} Str.LoadFromFile(MyFile);   {$ENDIF}
                 Form1.MainEditor.Lines:=Str;
               end;
              2:Begin
                {$IFDEF MSWINDOWS}
                 Str.LoadFromFile(UTF8ToSys(MyFile));
                 {$ENDIF}
                 {$IFDEF LINUX} Str.LoadFromFile(MyFile);   {$ENDIF}
                 Form1.MainEditor.Lines.Text:=CP1251ToUTF8(Str.Text);  <<<----- процедура перекодировки подобрана ручками
              end;
              else begin end;
             end;
       end
  else Begin end;
  Str.Free;
end;                 


Ну и на закуску -- никто не мешает тебе сделать так:

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

procedure TForm1.Button12Click(Sender: TObject); // winToUTF8 -- повторное открытие в другой кодировке.
var
    Str:TStringList;
begin
     if MyFile = '' then 
        begin
             ShowMessage ('Файл не был открыт.');
        end
     else
         begin
             Str:=TStringList.Create;
             Str.LoadFromFile(UTF8ToSys(MyFile));
             Form1.MainEditor.Clear;
             Form1.MainEditor.Lines.Text:= Str.Text;
             Str.Free;
         end;
end;           
Ответить