Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1297514636
Женя
2011-02-12 15:43
2011.05.22
Рисунки


15-1297011378
artem
2011-02-06 19:56
2011.05.22
Заработок на учебных заведениях


15-1296342105
@!!ex
2011-01-30 02:01
2011.05.22
Delphi ломает hadl linkи


2-1297437090
NieL
2011-02-11 18:11
2011.05.22
Out of memory while expanding memory stream


8-1212481376
leonidus
2008-06-03 12:22
2011.05.22
Ошибка "JPEG error #41"