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

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

Как обработать такую структуру:Variant Array of Variant ?


Secam ©   (2002-07-12 20:06:00) 

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


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

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


int64   (2002-07-13 02:40:00) [2]

Всё дело в использовании функции 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-12 22:57:00) [3]

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


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

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


int64   (2002-07-12 20:54:00) [5]

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


int64   (2002-07-12 20:52:00) [6]

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

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.


Наверх

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