Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизVariant 2 String Найти похожие ветки
← →
Gu (2011-02-16 18:44) [0]Есть вот такая процедурка
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 18:49) [1]
> т.е. VarType вообще не отрабатывает никак.
Все равно какое-то значение принимать должен. Просто его среди перечисляемых в case нет. Посмотрите, чему равен VarType(MyVar), когда передаете строку.
← →
Gu (2011-02-16 19:03) [2]передается правильно, там "лялятополя" лежит при останове.
вроде все типы перечислил (можно еще VarArray:s:="Массив"; добавить), одно хотябы отрабатывать должно. с юникодом беда.
← →
И. Павел © (2011-02-16 19:45) [3]
> передается правильно, там "лялятополя" лежит при останове.
ShowMessage(IntToStr(VarType(MyVar))) что показывает?
← →
Gu (2011-02-16 19:48) [4]258 o_O
ок, привяжусь к нему в кейсе
← →
Gu (2011-02-16 19:50) [5]спасибо
← →
sniknik © (2011-02-16 19:52) [6]> с юникодом беда.
ну, так... чуть меняешь код,
VT: Word;
VT:= VarType(MyVar);
case VT of
...
ставишь точку останова на case VT of и смотришь чему равна переменная в этот момент для "лялятополя", после идешь туда где эти константы описаны (Ctrl+клик мышкой на любой у тебя в коде) и ищешь у которой найденное значение... если нету, свою опиши. или прямо числом в код вставь.
разве проблема?
← →
sniknik © (2011-02-16 19:54) [7]258 - $0102; в седьмой дельфе нет, начиная с 2009й по идее уже должно...
← →
Игорь Шевченко © (2011-02-16 20:31) [8]так всяко понятнее:
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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c