Змінюй хід війни! Допомагай ЗСУ!

TCppWebBrowser гиперссылки

  • Автор теми Автор теми StyleT
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 11.06.2009
Повідом.: 424
TCppWebBrowser гиперссылки

Здравствуйте, возникла проблемка, я гружу в TCppWebBrowser страничку из файла, и мне надо чтоб при нажатии на HTML кнопку с этой странички прога поняла сигнал и выполнила действие, пока вышло очень криво, так как я не могу остановить выполнение компонента и событие вызывается много раз. Все делаю в Builder 2009.
Вот что пока вышло:

HTML:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=WINDOWS-1251">
</head>
<A href="https://next">Назад</a>
<A href="https://back">Вперед</a>
</html>
С++:
Код:
void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp,
          Variant *URL, Variant *Flags, Variant *TargetFrameName, Variant *PostData,
          Variant *Headers, VARIANT_BOOL *Cancel)
{
	if(CppWebBrowser1->LocationURL.Pos("back")!=0)
	{
		Memo1->Lines->Add("Вперед!!!");
		CppWebBrowser1->Stop();
	}
	if(CppWebBrowser1->LocationURL.Pos("next")!=0)
	{
		Memo1->Lines->Add("Назад!!!");
		CppWebBrowser1->Stop();
	}
}
 
Можно подписаться на DOM-события непосредственно из твоего кода. Как таковой, доступ к DOM-модели ActiveX компонент браузера предоставляет через свойство Document - его нужно преобразовать к интерфейсу IHTMLDocument2. Далее находишь нужный тебе элемент, преобразуешь его к IHTMLElement2 и вызываешь метод attachEvent.

Вот примеры кода на Visual C++, но как это адаптировать к C++ Builder'у - понятия не имею:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Кроме того, тебе понадобится очень четкое понимание базовых принципов COM - когда нужно вызывать QueryInteface и Release и как работает подсчет ссылок. Иначе - запаришься отлаживать.

Во, нашел еще пару ссылочек по Delphi, он все же "роднее к C++ Builder":

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Что, впрочем, никоим образом не отменяет сказанного выше про четкое понимание принципов работы COM.
 
Можно подписаться на DOM-события непосредственно из твоего кода. Как таковой, доступ к DOM-модели ActiveX компонент браузера предоставляет через свойство Document - его нужно преобразовать к интерфейсу IHTMLDocument2. Далее находишь нужный тебе элемент, преобразуешь его к IHTMLElement2 и вызываешь метод attachEvent.

Вот примеры кода на Visual C++, но как это адаптировать к C++ Builder'у - понятия не имею:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Кроме того, тебе понадобится очень четкое понимание базовых принципов COM - когда нужно вызывать QueryInteface и Release и как работает подсчет ссылок. Иначе - запаришься отлаживать.

Во, нашел еще пару ссылочек по Delphi, он все же "роднее к C++ Builder":

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Что, впрочем, никоим образом не отменяет сказанного выше про четкое понимание принципов работы COM.

что то для такой маенькой хрени выходит сильно много усилий, так как ловить надо две кнопки (вперед-назад) то планировал это сделать через изменение тайтла/урл/статуса страницы и отлов сего действа в проге, но как нормально отловить я так и не понял, ибо чудесные ивенты браузера (OnTitleChange, OnStatusTextChange и т.д.) не хотят работать, а в хелпе написано вообще их не юзать:( Глобальное и единое решение это круто, но не в данном случае единичного использования, ИМХО
 
Пиши на .NET, там есть уже готовое решение :)

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
Пиши на .NET, там есть уже готовое решение :)

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

да это ж середина работы уже, поздно переделывать, надо как нить уловить чертово сообщение не влазя в дебри :пиво:
 
надо как нить уловить чертово сообщение не влазя в дебри :пиво:

Ну, на Delphi простейший вариант выглядит так (с моими правками по упрощению):

Код:
var
Document: IHTMLDocument2;
Btn: IHTMLElement;
NewEvent: Olevariant;
FEvent: IDispatch;
..
Btn := Document.All.item('MyButton', 0) as IHTMLElement;
NewEvent := TEventObject.Create(MyEvent) as IDispatch;
Btn.onclick := NewEvent;

(с)
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Поскольку у тебя HTML страничка твоя собственная, можно не заморачиваться с attachEvent а юзать напрямую OnClick
 
а делфя все ещё жива блин, осталось сие чудо как нить в C++ перегнать...
 
а что его перегонять то? Если в билдер то ничего сложно не вижу, если в Visual то тут конечно придётся *******ться с интерфейсом как минимум, а как максимум все что Delphi-зависимое придётся искать или аналоги или писать с нуля.
 
а может отдельные кнопочки сделать (не в TCppWebBrowser)? И не париться...
 
а может отдельные кнопочки сделать (не в TCppWebBrowser)? И не париться...

интерфейс должен быть полностью настраиваемым с сервера, а так как почти весь интерфейс это окошко браузера (делаю что то типо новостной ленты для организаций) то и кнопки должны быть в окне браузера;)

а что его перегонять то? Если в билдер то ничего сложно не вижу, если в Visual то тут конечно придётся *******ться с интерфейсом как минимум, а как максимум все что Delphi-зависимое придётся искать или аналоги или писать с нуля.

с ивентами раньше дело особо не имел, тем более в Делфях, потому и перегнать не знаю как
 
Попробуй тут задать вопрос:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
(в соответствующем разделе)
 
Попробуй тут задать вопрос:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
(в соответствующем разделе)

увы, имел плачевный опыт с форумом исходников, 3 вопроса и 0 ответов, обычно или сам находил решение, или тут помогали, как то не лежит у меня к ним душа:rolleyes:
 
увы, имел плачевный опыт с форумом исходников, 3 вопроса и 0 ответов, обычно или сам находил решение, или тут помогали, как то не лежит у меня к ним душа:rolleyes:
А у меня наоборот - всегда пытаются как-то помочь.
Хотя может потому, что я пишу на Visual C++ и в соответствующую рубрику, а там другой контингент...

Всетаки попробуй задать там вопрос!
 
закинул на исходники, может там чего выплывет...
 
Уже ответили! Мнение о форуме еще не поменялось?
 
Назад
Зверху Знизу