Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Вниз

Как обработать такую структуру: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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
3-81169
lexa-m
2002-07-04 08:42
2002.07.25
Ув. Мастера, объясните наконец


1-81309
sergey32
2002-07-12 12:24
2002.07.25
Где можно скачать excel_TLB.pas?


14-81481
ZimZum
2002-06-27 23:27
2002.07.25
Браузер


8-81392
DenKop
2002-03-14 23:52
2002.07.25
Pascal


7-81493
fore_3
2002-05-07 12:39
2002.07.25
Как послать логическую 1 на нужную ножку lpt порта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский