Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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), когда передаете строку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо