Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CppWebBrowser, заполнение форм, добавить свой ListBox рядом с элементами формы

6.5K
05 июня 2006 года
creater
27 / / 07.04.2005
Имеется форма на котрой расположены кнопка и CppWebBrowser в который загружается HTML-страница с формой.

Вопрос в следующем:

Как можно вставлять с определенными данными свой ListBox в форму рядом с элементами
InputElement и TextAreaElement?


Т.е. загружается в CppWebBrowser HTML страница с формой и по нажатии
клавиши появляется с определенными данными ListBox под InputElement
или рядом в зависимости от кучности элементов в форме...

Заранее спасибо.
1
05 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=creater]Имеется форма на котрой расположены кнопка и CppWebBrowser в который загружается HTML-страница с формой.

Вопрос в следующем:

Как можно вставлять с определенными данными свой ListBox в форму рядом с элементами
InputElement и TextAreaElement?


Т.е. загружается в CppWebBrowser HTML страница с формой и по нажатии
клавиши появляется с определенными данными ListBox под InputElement
или рядом в зависимости от кучности элементов в форме...

Заранее спасибо.[/QUOTE]
Если я правильно понял вопрос - ты хочешь в код страницы его добавить? Тогда только ответ очевиден - переформировать страницу - т.е. загрузить страницу - парсить ее и добавлять необходимые элементы. Тогда возможно будет проще получать страницу через обычный сокет, в в компоненте показывать уже готовую страницу.
Другой способ - создать фрейм (или просто форму) с нужными тебе элементами и всплывать над нужной тебе страницей. По идее это будет проще и корректней.
6.5K
05 июня 2006 года
creater
27 / / 07.04.2005
[QUOTE=kot_]Если я правильно понял вопрос - ты хочешь в код страницы его добавить?
[/QUOTE]

Спасибо но код страницы меня не интересует.

[QUOTE=kot_]
Тогда только ответ очевиден - переформировать страницу - т.е. загрузить страницу - парсить ее и добавлять необходимые элементы.
[/QUOTE]

Помнится мне в самом начале предлагали парсить страницу когда мне нужно было заполнять поля формы... но меня это не устраивает и я заполняю форму без всякого парсинга через QueryInterface, pHTMLDocument и put_value...

Аналогичным образом хотелось бы и добавлять один единственный листбок рядом с элементами InputElement и TextAreaElement.
1
06 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=creater]Спасибо но код страницы меня не интересует.



Помнится мне в самом начале предлагали парсить страницу когда мне нужно было заполнять поля формы... но меня это не устраивает и я заполняю форму без всякого парсинга через QueryInterface, pHTMLDocument и put_value...
[/QUOTE]
Помнится у Мольера один из героев был удивлен что он говорит прозой :)

[QUOTE=creater]
Аналогичным образом хотелось бы и добавлять один единственный листбок рядом с элементами InputElement и TextAreaElement.[/QUOTE]
Ну так и добавляй - ты же получаешь список элементов страницы - все что тебе нужно найти интерфейс который ты можешь для этого вызвать - если таковой существует. Поищи среди СОМ-обектов офиса.
246
06 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=creater]Спасибо но код страницы меня не интересует.
[/QUOTE]
Извлеки всю страницу в буфер (...через QueryInterface, pHTMLDocument),
распарси вставь в нужное место нужный ТЭГ и загони все обратно через pHTMLDocument->write().

[QUOTE=creater]
Аналогичным образом хотелось бы и добавлять один единственный листбок рядом с элементами InputElement и TextAreaElement.[/QUOTE]
И кто тебе мешает? См. MSDN:
Создание элемента - IHTMLElement, IHTMLDocument2::createElement;
Вставка "в нужное место" - IHTMLSelectionObject, IHTMLTxtRange.

P.S. Что-то по CppWebBrowser стало много вопросов? Что делать?
P.S.S. Стало красиво, но немного не привычно.
6.5K
06 июня 2006 года
creater
27 / / 07.04.2005
[QUOTE=GIZMO]Извлеки всю страницу в буфер (...через QueryInterface, pHTMLDocument),
распарси вставь в нужное место нужный ТЭГ и загони все обратно через pHTMLDocument->write().


И кто тебе мешает? См. MSDN:
Создание элемента - IHTMLElement, IHTMLDocument2::createElement;
Вставка "в нужное место" - IHTMLSelectionObject, IHTMLTxtRange.
[/QUOTE]

Спасибо, уже ближе кистине, я вообще расчитывал на хоть какой-нибудь пример в виде кода т.к. сабжем раньше не приходилось сталкиваться.

[QUOTE=GIZMO]
P.S. Что-то по CppWebBrowser стало много вопросов? Что делать?
P.S.S. Стало красиво, но немного не привычно.[/QUOTE]

Ну так Веб кругом... ;-)
246
06 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=creater]Спасибо, уже ближе кистине, я вообще расчитывал на хоть какой-нибудь пример в виде кода т.к. сабжем раньше не приходилось сталкиваться.[/QUOTE]
К сожалению конкретно для твоего случая ничего нет, надо писать, а это сам понимаешь ... минимум "FAX de Luxe" емкостью 1 л. :)
6.5K
06 июня 2006 года
creater
27 / / 07.04.2005
Хотелось бы продолжить тему так как еще остались не решеные вопросы.

На данный момент удалось добавить свой ЛистБокс но, он почему то появляется не рядом с IID_IHTMLInputElement а в левом верхнем углу html страницы.

Делаю так:

Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::FillForm()
{
TCppWebBrowser *newBrowser;
newBrowser = Browser1;

LPDISPATCH DocDispatch_2 = newBrowser->ControlInterface->get_Document();

IHTMLDocument2 *HTMLDocument = NULL;

if(!newBrowser->Busy && newBrowser->Document && AnsiString(newBrowser->LocationURL) != "about :blank" &&
SUCCEEDED(newBrowser->Document->QueryInterface( IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)))
 {
  wchar_t *wstr;
  WideString wstr1;
  WideString wstr2 = "submit";
  WideString wstr3 = "reset";
  WideString wstr12 = "<SELECT name=namelist> <OPTION value=0 selected></OPTION><OPTION value=1>pole_1</OPTION> <OPTION value=2>pole_2</OPTION><OPTION value=3>pole_3</OPTION></SELECT>";

  IHTMLElementCollection* pElements;
  IHTMLElement  *pElem;

  IHTMLSelectionObject *spSelObj = NULL;
  IHTMLTxtRange *spTxtRng = NULL;

  IHTMLInputElement *pInput = NULL;
  HTMLDocument->get_all(&pElements);
  long plongnumberofelements;
  HRESULT hr3 = pElements->get_length( &plongnumberofelements);

  if ( hr3 == S_OK )
   for ( int i=0; i < plongnumberofelements; i++ )
   {
    VARIANT varIndex;
    varIndex.vt = VT_UINT;
    varIndex.lVal = i;
    VARIANT var2;
    VariantInit( &var2 );
    IDispatch* pDisp;

    pElements->item( varIndex, var2, &pDisp );

     if ( SUCCEEDED ( pDisp -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
      {
       pInput->get_type(&wstr1);
       pInput->get_name(&wstr);

       if (wstr1!= wstr2 && wstr1!= wstr3)
       {
        pInput -> put_value ( wstr );

// Здесь добавляется мой Лист бокс

        HTMLDocument->get_selection(&spSelObj);
        spSelObj->createRange((IDispatch**)&spTxtRng);
        spTxtRng->pasteHTML(wstr12);
        spTxtRng->put_text(WideString("(") + wstr + WideString(")\n"));

        }
       }
   }
        spTxtRng->Release();
        spSelObj->Release();
 }
}
//---------------------------------------------------------------------------
246
25 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=creater]Хотелось бы продолжить тему так как еще остались не решеные вопросы.

На данный момент удалось добавить свой ЛистБокс но, он почему то появляется не рядом с IID_IHTMLInputElement а в левом верхнем углу html страницы.

Делаю так:

Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::FillForm()
{
TCppWebBrowser *newBrowser;
newBrowser = Browser1;

LPDISPATCH DocDispatch_2 = newBrowser->ControlInterface->get_Document();

IHTMLDocument2 *HTMLDocument = NULL;

if(!newBrowser->Busy && newBrowser->Document && AnsiString(newBrowser->LocationURL) != "about :blank" &&
SUCCEEDED(newBrowser->Document->QueryInterface( IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)))
 {
  wchar_t *wstr;
  WideString wstr1;
  WideString wstr2 = "submit";
  WideString wstr3 = "reset";
  WideString wstr12 = "<SELECT name=namelist> <OPTION value=0 selected></OPTION><OPTION value=1>pole_1</OPTION> <OPTION value=2>pole_2</OPTION><OPTION value=3>pole_3</OPTION></SELECT>";

  IHTMLElementCollection* pElements;
  IHTMLElement  *pElem;

  IHTMLSelectionObject *spSelObj = NULL;
  IHTMLTxtRange *spTxtRng = NULL;

  IHTMLInputElement *pInput = NULL;
  HTMLDocument->get_all(&pElements);
  long plongnumberofelements;
  HRESULT hr3 = pElements->get_length( &plongnumberofelements);

  if ( hr3 == S_OK )
   for ( int i=0; i < plongnumberofelements; i++ )
   {
    VARIANT varIndex;
    varIndex.vt = VT_UINT;
    varIndex.lVal = i;
    VARIANT var2;
    VariantInit( &var2 );
    IDispatch* pDisp;

    pElements->item( varIndex, var2, &pDisp );

     if ( SUCCEEDED ( pDisp -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
      {
       pInput->get_type(&wstr1);
       pInput->get_name(&wstr);

       if (wstr1!= wstr2 && wstr1!= wstr3)
       {
        pInput -> put_value ( wstr );

// Здесь добавляется мой Лист бокс

        HTMLDocument->get_selection(&spSelObj);
        spSelObj->createRange((IDispatch**)&spTxtRng);
        spTxtRng->pasteHTML(wstr12);
        spTxtRng->put_text(WideString("(") + wstr + WideString(")\n"));

        }
       }
   }
        spTxtRng->Release();
        spSelObj->Release();
 }
}
//---------------------------------------------------------------------------
[/QUOTE]
Думаю, что при переборе елементов формы выделение так и остается в начале документа. Надо как-то перести его на/за "нужный" тебе инпут и тогда уже получать IHTMLSelectionObject (только как это сделать к сожалению сейчас не подскажу). Еще в цикле надо делать pInput -> Release(); и для IDispatch тоже.
246
27 июля 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=GIZMO]Надо как-то перести его на/за "нужный" тебе инпут и тогда уже получать IHTMLSelectionObject (только как это сделать к сожалению сейчас не подскажу). [/QUOTE]
Посмотри IHTMLTxtRang::moveToBookmark(...), IHTMLTxtRange::findText(...), IHTMLTxtRange::select() может чего придумаешь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог