Главная страница
    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.007 c
3-81161
Sergey_
2002-07-04 09:06
2002.07.25
Помогите кто знает. Как задекларировать в Delphi переменные ...


1-81358
alxx
2002-07-13 18:54
2002.07.25
Undo в RxRichEdit


14-81465
mifi
2002-06-28 09:27
2002.07.25
Openfile в скрипте


1-81356
Klon
2002-07-13 16:37
2002.07.25
Как рисовать в чужом окне или по всему экрану?


1-81264
Балков Евгений
2002-07-15 11:12
2002.07.25
Конвертирование Hex - ов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский