![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Variant 2 String
Gu © (2011-02-16 18:44:00)Есть вот такая процедурка
Procedure Qq(MyVar:Variant);
var s:string;
Begin
s:='';Case VarType(MyVar) of
varEmpty,varNull:s:=DateTimeToStr(Now);
varSmallint,varInteger,varError,varShortInt,varByte,varWord,varLongWord,varInt64 :s:='Целое: '+inttostr(MyVar);
varSingle,varDouble,varCurrency:s:='Дробное: '+floattostr(MyVar);
varDate:s:='Дата\Время: '+DateTimeToStr(MyVar);
varBoolean:if myvar=true then s:='Логическое ДА' else s:='Логическое НЕТ';
varDispatch,varVariant,varUnknown,varStrArg:s:='Неизвестное значение';
varString,varOleStr:s:='Строковое: '+VarToStr(MyVar);
end;
if (s=null)or(s='') then s:='пусто';Showmessage(s);
End;
Если запрашиваю все типы кроме string - работает (например qq(true);qq(123.66);qq(127); и тп), а на стринговые 0 внимания, все время возвращает пустую строку, если например запрашиваю qq('лялятополя');
пробовал так: объявляем st:string;st:='лялятополя';qq(st); все равно пустую строку возвращает, т.е. VarType вообще не отрабатывает никак. Срабатывает только если st как ansistring объявить.
Вопрос: как сделать, чтобы на стринг обычный срабатывала? Может опции компилятора какие нужны?
Rad 2010, Win7
Игорь Шевченко (2011-02-16 20:31:00) [1]так всяко понятнее:
Procedure Qq(MyVar:Variant); var s:string; Begin s:='';Case VarType(MyVar) of
varEmpty, varNull: s:= DateTimeToStr(Now ); varSmallint,varInteger,varError,
varShortInt,varByte,varWord,varLongWord,varInt64 :s:='Целое: '+inttostr(MyVar
);varSingle,varDouble,varCurrency:s:='Дробное: '+floattostr(MyVar);varDate: s
:='Дата\Время: '+DateTimeToStr( MyVar); varBoolean: if myvar= true then s:=
'Логическое ДА' else s :='Логическое НЕТ'; varDispatch,varVariant,varUnknown,
varStrArg : s:='Неизвестное значение';varString, varOleStr:s:='Строковое: '+
VarToStr(MyVar);end;if (s=null)or(s='') then s:='пусто';Showmessage(s);End;
sniknik (2011-02-16 19:54:00) [2]258 - $0102; в седьмой дельфе нет, начиная с 2009й по идее уже должно...
sniknik (2011-02-16 19:52:00) [3]> с юникодом беда.
ну, так... чуть меняешь код,
VT: Word;
VT:= VarType(MyVar);
case VT of
...
ставишь точку останова на case VT of и смотришь чему равна переменная в этот момент для "лялятополя", после идешь туда где эти константы описаны (Ctrl+клик мышкой на любой у тебя в коде) и ищешь у которой найденное значение... если нету, свою опиши. или прямо числом в код вставь.
разве проблема?
Gu (2011-02-16 19:50:00) [4]спасибо
Gu (2011-02-16 19:48:00) [5]258 o_O
ок, привяжусь к нему в кейсе
И. Павел (2011-02-16 19:45:00) [6]
> передается правильно, там "лялятополя" лежит при останове.
ShowMessage(IntToStr(VarType(MyVar))) что показывает?
Gu (2011-02-16 19:03:00) [7]передается правильно, там "лялятополя" лежит при останове.
вроде все типы перечислил (можно еще VarArray:s:='Массив'; добавить), одно хотябы отрабатывать должно. с юникодом беда.
И. Павел (2011-02-16 18:49:00) [8]
> т.е. VarType вообще не отрабатывает никак.
Все равно какое-то значение принимать должен. Просто его среди перечисляемых в case нет. Посмотрите, чему равен VarType(MyVar), когда передаете строку.