WebBrowser i aktywny Enter itd.

0

Witam, piszę prosty program, który ma na celu połączenie paru stron internetowych. Problem polega na tym, iż wstawiając komponent WebBrowser nie działa przycisk Enter na przeglądanych stronach. Szukając rozwiązania otarłem się o przykład w Delphi a ja staram się przekładać to na C++ Builder 6 i nie za bardzo mi to wychodzi. Podaję stronę i proszę o pomoc.
http://www.swissdelphicenter.ch/en/showcode.php?id=1055

Odnośnie komponentu WebBrowser. Jak zrobić przycisk wklej aby do pola tekstowego na stronie umieszczonej w WebBrowser wkleił zawartość schowka?
Zrobiłem popup aby otwierał się klikając na stroenie w WebBrowser przez WM_.. Jednak jak zrobią aby po kliknięciu VK_APPS również uzyskać popup?

0

Najprościej zrobisz to na standardowym akceleratorze:

void MainOnComand(WPARAM wParam)
{
	CMdiChild *child;

	/*if (HIWORD(wParam) == 1) /*accelerator*/ wParam = LOWORD(wParam);

	if (ChildGetCurrentChild(&child))
	{
		ChildHandleCommand(child, wParam); // poniżej
		ToolbarHandleCommand(wParam);
	}

	switch (wParam) {}
}

void ChildHandleCommand(CMdiChild *child, WPARAM wParam)
{
	if (child->type == CHILDDTYPE_HTML)
	{
		switch (wParam)
		{
			case 107: // toolbar
				child->m_browser->GoBack();
				break;

			case 108: // toolbar
				child->m_browser->GoForward();
				break;

			case IDM_COPY:
				child->m_browser->ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
				break;

			case IDM_FIND:
				// browser->document->QueryInterface(IOleCommandTarget)->Exec(
				//   CGID_IWebBrowser, HTMLID_FIND, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
				child->m_events->ExecHtmlDispId(HTMLID_FIND);
				break;

			case IDM_SELECTALL:
				child->m_browser->ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
				break;

// jeszcze dodaj paste, undo i redo na szablonie browser->ExecWB
		}
	}
	else ...

Dla klawisza ENTER też dodaj akcelerator, a w jego obsłudze sprawdź jakie okno ma fokus i odpal odpowiednią akcję. Jeżeli to browser, to browser->document->activeElement zwróci aktywny element. Jeżeli element->get_form nie jest zerem, to odpal form->submit.

Gdyby akcelerator na klawisz ENTER stwarzał zbyt wiele problemów (gdy trzeba napisać sporo kodu by nadrobić niedziałanie czegoś) to wykrywaj ENTER w pętli komunikatów.

0

Witam ponownie, powyższych funkcja jak i symboli C++ Builder v6.0 z którego korzystam nie rozpoznaje. Co robie źle? Mógłby ktoś dokładniej wytłumaczyć jak to działa?

0

Naturalnie, że nie rozpoznaje, przecież to powyższe zostało wycięte z czegoś zupełnie innego, a Twoim zadaniem było nie skopiowanie całości do swojego programu, tylko przeanalizować, stwierdzić kilka razy "aha" i wstawić fragment "browser->ExecWB" (ze stałą OLECMDID_PASTE) pod odpowiedni button.

Ostatniego pytania nie rozumiem do końca. Jeżeli chodzi o to, że prawoklik myszy otwiera menu zdefiniowane przez Ciebie, a klawisz VK_APPS już nie, to musisz zareagować na OnContextMenu lub WM_CONTEXTMENU, lub nawet podczepić się do browsera pod event oncontextmenu (DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU).
W metodzie IDocHostUIHandler::ShowContextMenu też możesz to zrobić, ale musisz ją znaleźć (tam gdzie za pomocą myszki tworzysz kod ;)), albo zapytaj jakiegoś speca od buildera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1