Не добавляются русские строки в Memo из потока

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

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

Ответить
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Не добавляются русские строки в Memo из потока

Сообщение Sawer »

Lazarus 0.9.25/FPC 2.2.3/SVN 15716
Есть форма А с Memo, форма Б с кнопкой и поток.
Процедура на форме А:

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

procedure TFrLog.AddRecord(Rec: string);
begin
  MmLog.Lines.Add(DateTimeToStr(Date+Time)+' '+Rec);
end;

Строки с русскими буквами из потока в принципе не добавляются:
Это работает:

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

procedure TClient.LogAdd;
begin
  FrLog.AddRecord(FLog);
end;
...
FLog := 'test '; Synchronize(@LogAdd);

А это НЕТ!!! Вообще ничего не добавляется:

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

procedure TClient.LogAdd;
begin
  FrLog.AddRecord(FLog);
end;
...
FLog := 'тест '; Synchronize(@LogAdd);

Если же добавлять с формы Б нажимая на кнопку то все ОК!!! Русские строки нормально работают!

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

procedure TFrMenu.Button1Click(Sender: TObject);
var FLog: string;
begin
  FLog := 'тест';
  FrLog.AddRecord(FLog);
end;
Последний раз редактировалось Sawer 17.07.2008 13:00:42, всего редактировалось 1 раз.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

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

Сообщение Vadim »

Sawer писал(а):FLog := 'test ';

А что такое FLog? На кого этот зверь похож?
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

Attid писал(а):а какой ОС и виджет ?

Vista Home, никаких посторонних компонентов не установлено!

Добавлено спустя 1 минуту 6 секунд:
Vadim писал(а):
Sawer писал(а):FLog := 'test ';

А что такое FLog? На кого этот зверь похож?

FLog: string;
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Sawer писал(а):FLog: string;

А FrLog что такое? А что такое LogAdd?
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

Vadim писал(а):
Sawer писал(а):FLog: string;

А FrLog что такое? А что такое LogAdd?

Есть форма FrLog с компонентом MmLog (TMemo) и процедурой:

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

procedure TFrLog.AddRecord(Rec: string);
begin
  MmLog.Lines.Add(DateTimeToStr(Date+Time)+' '+Rec);
end;


Есть форма FrMenu c кнопкой Button1 и процедурой:

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

procedure TFrMenu.Button1Click(Sender: TObject);
var FLog: string;
begin
  FLog := 'тест';
  FrLog.AddRecord(FLog);
end;


Есть поток TClient:

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

  TClient = class(TThread)
  private
    TClient: TTCPBlockSocket;
    FLog: string;
  protected
    procedure Execute; override;
  public
    procedure LogAdd;
  end;

procedure TlntClt.LogAdd;
begin
  FrLog.AddRecord(FLog);
end;

procedure TlntClt.Execute;
begin
  FLog := 'test '+FDevNm;
  Synchronize(@LogAdd);
end;


Добавлено спустя 1 минуту 34 секунды:
вопрос тот же! нет добавляются строки с русскими символами!
yser
новенький
Сообщения: 29
Зарегистрирован: 06.02.2008 10:27:40

Сообщение yser »

Скорее всего у тебя русский текст ANSI, преобразуй его в UTF8 - должно работать. У меня заработало.
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

yser писал(а):Скорее всего у тебя русский текст ANSI, преобразуй его в UTF8 - должно работать. У меня заработало.

а как преобразовать?
yser
новенький
Сообщения: 29
Зарегистрирован: 06.02.2008 10:27:40

Сообщение yser »

в этом посте есть функции Tria_AnsiToUtf8 и Tria_Utf8ToAnsi
viewtopic.php?f=6&t=3517&p=25367&hilit=Tria_#p25367
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Добавлено спустя 11 минут 33 секунды:
Sawer писал(а):Есть поток TClient:

У Вас вместо строки с русскими буквами добавляется пустая строка или нет даже пустой строки? Именно в этом потоке.
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

Vadim писал(а):Добавлено спустя 11 минут 33 секунды:
Sawer писал(а):Есть поток TClient:

У Вас вместо строки с русскими буквами добавляется пустая строка или нет даже пустой строки? Именно в этом потоке.

даже нет пустой строки!!! вообще ничего!!
а если все по латиницей то все нормально!!
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Русский текст необходимо конвертировать в UTF8 для нормального отображения на контролах и лазарь должен быть собран с параметром -dWindowsUnicodeSupport. Для конвертации сгодится даже AnsiToUTF8
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

Padre_Mortius писал(а):Русский текст необходимо конвертировать в UTF8 для нормального отображения на контролах и лазарь должен быть собран с параметром -dWindowsUnicodeSupport. Для конвертации сгодится даже AnsiToUTF8

к 0.9.26 сборке исправят все?
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Кого исправят? Это вроде не ошибка, а перевод на единую кодировку для всех платформ и систем
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

а почему текст сразу в кодировке utf8 не вписывается, когда я его набираю в Лазаре?
Ответить