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

Вниз

Как обработать такую структуру:Variant Array of Variant ?   Найти похожие ветки 

 
Secam   (2002-07-12 20:06) [0]

Уважаемые мастера,
Подскажите пожалуйста, как работать с Variant Array of Variant?
Эту надпись я увидел в списке watch, когда попытался посмотреть значение переменной PostData, События OnBeforeNavigate2 в TWebBrowser.
В модуле DSIntF.pas я нашел функцию VariantArraytoString, но она с этим зверем не работает.
Как узнать, что внутри этого Variant Array ?


 
int64 ©   (2002-07-12 20:52) [1]

Такой код работает:

procedure TForm1.Button1Click(Sender: TObject);
var V: OleVariant;
begin
V:= StringToVariantArray(Caption);
Caption:= VariantArrayToString(V)+VariantArrayToString(V);
end;

А если ты хочешь, чтоб работал такой:

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
Caption:= VariantArrayToString(PostData);
end;

, то в PostData должно что-то быть перед отправкой.

Этот текст я послал через WebBrowser1 (зашёл на страницу
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1026489978&n=0 ,
набрал всё это и нажал добавить)

Сейчас посмотрю, появилось ли что-нибудь в Caption.


 
int64 ©   (2002-07-12 20:54) [2]

Нда. Ничего. :((


 
Secam   (2002-07-12 22:25) [3]

Дополнение ...
В исходниках функции VariantArrayToString из DSIntF.pas
есть такое условие:
if VarIsArray(V) and (VarType(V) and varTypeMask = varByte) then
т.е. насколько я понимаю массив должен состоять из byte иначе результат - пустая строка.
А если массив не из байт а из строк или еще из чего нибудь ?
как его прочитать и как узнать из чего он состоит ?


 
Secam   (2002-07-12 22:57) [4]

VarIsArray(PostData) дает false
(VarType(V) and varTypeMask) = $000c, что соответствует varVariant.
Т.е. получается, что PostData вообще не массив !
Именно такое сообщение возникает при попытке вызвать
VarArrayLock(PostData).
Что значит VarVariant и как из него получить данные ?



 
int64 ©   (2002-07-13 02:40) [5]

Всё дело в использовании функции VarIsArray. Она перегружаемая.

function VarArrayToString(const V: Variant): string;
var
i, j: Integer;
begin
if VarIsArray(V, True) then
for I := 0 to VarArrayHighBound(V, 1) do
begin
j := V[i];
result := result + chr(j);
end;
end;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
caption:= VarArrayToString(PostData);
end;


 
Secam   (2002-07-14 00:35) [6]

Работает !!!
СПАСИБО !!!!!!!!!!!
просто спас !!!



Страницы: 1 вся ветка

Текущий архив: 2002.07.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-81224
Help
2002-07-13 20:02
2002.07.25
Как в Memo вставить текст при нажатии...


3-81205
Pro
2002-07-05 11:42
2002.07.25
SQL запрос с накоплением данных


1-81299
HEXBAT
2002-07-12 10:53
2002.07.25
Помогите с Маской ввода Плиз


14-81423
SPeller
2002-06-23 08:35
2002.07.25
Задание справочного файла для приложения


3-81169
lexa-m
2002-07-04 08:42
2002.07.25
Ув. Мастера, объясните наконец