Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
3-81153
Фикус
2002-07-04 08:26
2002.07.25
Backup - Restore командной строкой


14-81418
mcs
2002-06-27 09:48
2002.07.25
Свен Шрайбер


7-81501
ses1
2002-05-03 01:49
2002.07.25
Как определить тип монитора? Объем памяти видеоадаптера?


3-81134
muhin-av
2002-07-03 15:25
2002.07.25
помогите разобраться с DBCtrlGrid ???


1-81281
SergeyD
2002-07-15 14:34
2002.07.25
Потомок TImage




   Наверх