Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2016, 12:26
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию Синтакисис команд с переменной AnsiString вместо String

Есть код, который успешно компилируется в 7SE. В новых компиляторах (у меня это Delphi XE7), в которых разработчики продукта перешли на универсальную кодировку UTF8?, некоторые команды с переменной String читаются неверно.
Например,
Код:
function HConvert(E:TEdit; var H:Byte):Boolean;
var Hp:Byte; S:String; Error:Boolean;
begin
 Hp:=H; Result:=true;
 Error:=false;
 S:=UpperCase(E.Text);
 case length(S) of
 1: if ConvD(S[1])>=0 then H:=ConvD(S[1])
                     else Error:=true;
...
Помогите записать этот фрагмент кода, если S:AnsiString; или S:RawByteString;
Заранее благодарю за помощь.

Последний раз редактировалось cadil, 12.01.2016 в 14:27.
Ответить с цитированием
  #2  
Старый 12.01.2016, 15:04
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от cadil
некоторые команды с переменной String читаются неверно.
Как это не верно?
Цитата:
Сообщение от cadil
если S:AnsiString
AnsiUpperCase
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 12.01.2016, 17:19
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
Как это не верно?AnsiUpperCase
Каюсь. Неправильно пояснил суть проблемы. Если в исходнике принудительно заменить String на AnsiString, Char на AnsiChar, то все в XE7 компилируется, но по другому пути, чем в SE7. Впрочем, как и со String и Char. Причиной может быть, как пишут в нете:
Цитата:
Все зависит от того на какой версии Дельфи ты компилишь данный код, если на ANSI, то один символ = один байт, если на Unicode, то один символ - два байта.
Вопрос "символ - один или два байта", я планирую решить по схеме (может, это и неверно):
Код:
function HConvert(E:TEdit; var H:Byte):Boolean;
var Hp:Byte; S:String; Error:Boolean;
begin
 Hp:=H; Result:=true;
 Error:=false;
 S:=UpperCase(E.Text);
S:= RawByteString(S);  //!
 case ??? of
 1: if ConvD(S[1])>=0 then H:=ConvD(S[1])
                     else Error:=true;
...
Как вместо ??? записать переменную S в новом формате RawByteString?

Последний раз редактировалось cadil, 12.01.2016 в 17:37.
Ответить с цитированием
  #4  
Старый 12.01.2016, 20:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я тебе в другой ветке ответил.
Думаю так пройдет (нет под рукой, что бы проверить):
Код:
function HConvert(E:TEdit; var H:Byte):Boolean;
var Hp:Byte; S:AnsiString; Error:Boolean;
begin
 Hp:=H; Result:=true;
 Error:=false;
 S := E.Text;
 S:=AnsiUpperCase(S);
 If Length(S) = 1 Then
   Begin
     if ConvD(S[1])>=0 then H:=ConvD(S[1])
                       else Error:=true;
   End;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
cadil (12.01.2016)
  #5  
Старый 12.01.2016, 21:31
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Я тебе в другой ветке ответил.
Думаю так пройдет (нет под рукой, что бы проверить):
Спасибо!
Проверил - код корректный, но кака было, кака - есть. Похоже, на этом направлении - переназначении свойств переменных придется ставить крест.
Я прочитал твой пост в другой ветке. Сейчас упакую проект и вышлю тебе на личку.
Ответить с цитированием
  #6  
Старый 12.01.2016, 21:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

не обещаю, что будет время ковыряться...
Ответить с цитированием
  #7  
Старый 12.01.2016, 22:52
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
не обещаю, что будет время ковыряться...
Будет время и настроение - взгляни.

Последний раз редактировалось cadil, 13.01.2016 в 22:58.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025