Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2014, 16:29   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 267
По умолчанию НЕпонятное с 'Invalid variant operation' WinXP или Win7

Добрый день.

есть код

Код:
procedure TMain.ListBox2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
const  WebSearchId='text';
var SRStr:string;  Data:variant;
begin   (*перенос значения строки в окно ввода страницы в браузере*)
  if (Key = VK_RETURN) then
  SRStr:=(ListBox2.Items[ListBox2.ItemIndex]);

  if not Assigned(Wbbr.Document) then Exit;
  if Wbbr.OleObject.Document.all.tags('FORM').Length <> 0 then
  Data:=Wbbr.Oleobject.Document.GetElementByID(WebSearchId);
  Data.Value:=SRStr;
end;
1. Компилляция происходит нормально.
2. при запуске программы в WinXP все нормально (ну кроме того что под ИЕ8 не работает часть функций)
3. при запуске программы в Win7 (IE9) все работает, но при запуске процедуры вылазит : First chance exception at $7584D36F. Exception class EVariantInvalidOpError with message 'Invalid variant operation'. Process KWFinder.exe (1024), источник

Код:
unit System.Variants;

procedure VarInvalidOp;
begin
  raise EVariantInvalidOpError.Create(SInvalidVarOp);
end;
Компиляция в Win7 ничего не изменила

Вопросы : где косяк? и что делать?
Pcrepair вне форума Ответить с цитированием
Старый 11.09.2014, 17:07   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
WinXP ИЕ8
Win7 (IE9)
А вы в курсе, что WebBrowser по умолчанию использует режим IE7, независимо от того, стоит ли более новый? Если не изменить это в реестре или HTML код не содержит специальный параметр.
http://msdn.microsoft.com/en-us/libr...wser_emulation
http://programmersforum.ru/showthrea...=264992&page=2

А для GetElementByID разве Variant нужен, а не IHTMLElement2?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 11.09.2014 в 18:24.
Alex11223 вне форума Ответить с цитированием
Старый 11.09.2014, 18:14   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 267
По умолчанию

не, мы не в курсе. всего не знает никто
на странице сервиса есть:
Код HTML:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=edge"/>
но этот сервис работает корректно только с ИЕ9 и выше (ИЕ8 зависает)
есть стандартный код передачи значения:
Код:
var Data:variant;
begin
  (*Вписываю логин в форму на сайте.*)
  Data:=Webbr.oleobject.document.getelementbyid('login-0');  
  Data.value:=LabeledEdit1.Text;
бяда одна - на ХР все работает, на Вынь7 идет исключение Invalid variant operation
Что касается реестра.... ? попробуем, там еще перевести нужно
Pcrepair вне форума Ответить с цитированием
Старый 11.09.2014, 18:20   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да про версию IE это вряд ли имеет отношение к вопросу раз в ХР работало.

Скорее уж это:
Цитата:
А для GetElementByID разве Variant нужен, а не IHTMLElement2?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 11.09.2014 в 18:23.
Alex11223 вне форума Ответить с цитированием
Старый 12.09.2014, 02:36   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
не, мы не в курсе. всего не знает никто
Привет, троешник с амбициями!
А кто это "мы"?
northener вне форума Ответить с цитированием
Старый 12.09.2014, 08:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да про версию IE это вряд ли имеет отношение к вопросу раз в ХР работало.
А по-моему как раз в ней и все дело. Меня вот эта часть кода смущает: Wbbr.OleObject.
Зачем идти через OLE, если есть Wbbr.Document?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2014, 16:29   #7
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 267
По умолчанию

и еще раз:
есть стандартный код передачи значения:
Код:
var Data:variant;
begin
  Data:=Wbbr.Oleobject.Document.GetElementByID(WebSearchId);
  Data.Value:=SRStr;
не мной придуманный, а самим билли (или его индусами)
ошибка возникает потому что в Data.Value передается НУЛЬ
а нуль туда передается потому что ИЕ8 и ИЕ9 по разному делают ДОМ:

Код HTML:
IE8 <INPUT id=uniq141044814648023 class=b-form-input__input value="сбор мака" name=text jQuery18308003793014671061="18">
IE9 <input id="uniq141044933918717" class="b-form-input__input" name="text">
еще кое кто кое где писал что OLE и IHTMLElementCollection это типа одно и то же. прийдется проверять, но возможно кто что то уже знает?
Pcrepair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid variant type glabz Общие вопросы Delphi 1 23.05.2013 08:18
Invalid floating operation DjoNik135 Общие вопросы Delphi 17 30.03.2012 00:17
Invalid pointer operation. KoBRaAndrey Общие вопросы Delphi 6 02.06.2010 17:32
Invalid Pointer Operation Unconnected Общие вопросы Delphi 3 21.02.2009 20:23
Invalid pointer operation Димарик Общие вопросы Delphi 2 05.11.2007 09:53