UpperCase + Русский язык

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

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

UpperCase + Русский язык

Сообщение TRSteep » 11.06.2009 22:44:23

Пытаюсь сделать так:

Код: Выделить всё
for i:=0 to Memo.Lines.Count - 1 do
  begin
    Memo.Lines[i] := UpperCase( Memo.Lines[i]  );
  end;
end;


Английский работает нормально, а вот русский не работает...

Есть ли штатные средства решения проблемы или писать табличку замены?
Последний раз редактировалось TRSteep 12.06.2009 01:23:13, всего редактировалось 1 раз.
TRSteep
незнакомец
 
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Re: UpperCase + Русский язык

Сообщение Mr.Smart » 12.06.2009 00:48:26

В модуле LCLProc есть функция UTF8UpperCase и не только.... :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: UpperCase + Русский язык

Сообщение TRSteep » 12.06.2009 00:55:06

Mr.Smart о! спасибо большое!

ну для меня это еще густой лес...
вот разбираюсь по мере написания :)

PS первый запуск кнопки нормальн, при втором:

Project raised exception class 'RunError(211)'


код:

Код: Выделить всё
procedure TFormMain.Button_UpCaseClick(Sender: TObject);
var
  i: integer;
  SStrings: TStrings;
begin
  SStrings := TStrings.Create;
  SStrings := Memo.Lines;

  for i:=0 to Memo.Lines.Count - 1 do
  begin
    Memo.Lines[i] := UTF8UpperCase( SStrings[i] );
  end;

  SStrings.Free;
end;


Если убрать SStrings.Free в конце нормально.....
За собой не нужно чтоли удалять объект?
TRSteep
незнакомец
 
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Re: UpperCase + Русский язык

Сообщение Vadim » 12.06.2009 06:44:01

TRSteep писал(а):SStrings: TStrings;

1. TStrings - класс абстрактный и он Вам показал свою "кузькину мать". :) Использовать его самого не нужно, а лучше взять какого-нибудь егоного потомка, например TStringList, у которого все методы прописаны и поэтому есть что использовать.
2. TMemo и сам по себе содержит TStrings (свойство Lines), поэтому его и нужно использовать, либо вообще, зная из чего состоит TStrings, обходиться более простыми методами, например:
Код: Выделить всё
procedure TFormMain.Button_UpCaseClick(Sender: TObject);
begin
    Memo.Lines.Text := UTF8UpperCase( Memo.Lines.Text );
end;

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

Re: UpperCase + Русский язык

Сообщение TRSteep » 12.06.2009 13:14:09

Vadim писал(а):
TRSteep писал(а):SStrings: TStrings;

1. TStrings - класс абстрактный и он Вам показал свою "кузькину мать". :) Использовать его самого не нужно, а лучше взять какого-нибудь егоного потомка, например TStringList, у которого все методы прописаны и поэтому есть что использовать.
2. TMemo и сам по себе содержит TStrings (свойство Lines), поэтому его и нужно использовать, либо вообще, зная из чего состоит TStrings, обходиться более простыми методами, например:
Код: Выделить всё
procedure TFormMain.Button_UpCaseClick(Sender: TObject);
begin
    Memo.Lines.Text := UTF8UpperCase( Memo.Lines.Text );
end;

;)


1. Спасибо. Я вот читаю абстрактный абстрактный - а понять что делать с ним не могу :)
2. Ого... про text не подумал... Спасибо еще раз! я пробовал построчно делать, memo подтормаживает, а если через TStrings (теперь уже TStringList) делать нормально.
TRSteep
незнакомец
 
Сообщения: 7
Зарегистрирован: 01.06.2009 13:01:45

Re: UpperCase + Русский язык

Сообщение VirtUX » 12.06.2009 17:17:21

Абстракный - значит не содержащий ничего конкретного в самом себе, а лишь является указателем на что-то реальное. После метода SStrings.Free Вы уничтожаете то, что находится в Memo.Lines - вот Вам и ошибка при повторной попытке обработать Memo.Lines, так как его уже не существует.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

Рейтинг@Mail.ru