Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Возможности TWebBrowser, несколько вопросов   Найти похожие ветки 

 
Calm ©   (2006-06-22 13:03) [0]

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

Есть мысль отобразить весь этот винегрет с помощью HTML и TWebBrowser или любом другом компоненте, показыающем HTML.

Вопрос: смогу ли я в TWebBrowser обработать клики, наведение, уход мышки с элементов SPAN и IMG ?

P.S. Используется D6.


 
Calm ©   (2006-06-22 17:39) [1]

Если кому итересно - частично можно реализовать с помощью THTMLViewer
Там можно делать конструкции типа
<a href="id_01" class="<чтобы_ссылка_не_была_отличима_от_текста><span>произвольный текст"</span></a>

По клику на текст в событие будет передан url, по которому можно одноначно определить, по какой ссылке кликали.

Насчет наведения мыши, похоже, не получится.

P.S. Может мне надо было не в начинающие постить? Просто я думал, что все знают, а я один такой темный.


 
anton773 ©   (2006-06-22 21:56) [2]


> Вопрос: смогу ли я в TWebBrowser обработать клики, наведение,
>  уход мышки с элементов SPAN и IMG ?

Да. Если там будут гиперссылки


 
palva ©   (2006-06-22 22:06) [3]

> Вопрос: смогу ли я в TWebBrowser обработать клики, наведение,
>  уход мышки с элементов SPAN и IMG ?

Все эти события может обработать клиентский скрипт, который, например, через строку статуса даст знать о событии Delphi обработчикам. Все это трудоемко, но можно сделать.


 
Gero ©   (2006-06-23 01:43) [4]

Можно.

Обьявляем класс:


 TEventMethod = procedure of object;

 TWBEventHandler = class(TInterfacedObject, IDispatch)
 private
   FOnEvent: TEventMethod;
 protected
   function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
   function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
   function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer;
    DispIDs: Pointer): HResult; stdcall;
   function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word;
    var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
 public
   constructor Create(const Method: TEventMethod);
   property OnEvent: TEventMethod read FOnEvent write FOnEvent;
 end;

implementation

constructor TWBEventHandler.Create(const Method: TEventMethod);
begin
 inherited Create;
 FOnEvent := Method;
end;

function TWBEventHandler.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer;
 DispIDs: Pointer): HResult;
begin
 Result := E_NOTIMPL;
end;

function TWBEventHandler.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
 Result := E_NOTIMPL;
end;

function TWBEventHandler.GetTypeInfoCount(out Count: Integer): HResult;
begin
 Result := E_NOTIMPL;
end;

function TWBEventHandler.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word;
 var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
begin
 if (DispID = DISPID_VALUE) then
   begin
     if Assigned(FOnEvent) then
       FOnEvent;
     Result := S_OK;
   end
 else
   Result := E_NOTIMPL;
end;



Пишем обработчик:


procedure TForm1.MyEventHandler;
begin
 // обрабатываем событие. Всю инфу пожно получить из window.event
end;


И присваеваем нужному елементу новый обработчик:

element.onmouseover = TEventObject.Create(MyEventHandler) as IDispatch;


 
Gero ©   (2006-06-23 02:00) [5]

> И присваеваем нужному елементу новый обработчик:

Вернее

element.onmouseover = TWBEventHandler.Create(MyEventHandler) as IDispatch;


 
Calm ©   (2006-06-23 10:20) [6]

Gero, а как получить этот самый элемент
element.onmouseover = ?
Хотя бы в самых общих чертах, плиз.

palva

> Все эти события может обработать клиентский скрипт, который,
>  например, через строку статуса даст знать о событии Delphi
> обработчикам.

Клиентский скрипт - подразумевается java script в html ? Через строку статуса - это как?  В TWebBrowser есть событие вывода текста туда?

Если я правильно понял, вы предлагаете для каждого элемента при наведении мыши писать в строку статуса нечто, например ID элемента, а в событии изменения строки статуса этот id получать и обрабатывать в программе, верно ?


 
Gero ©   (2006-06-23 10:37) [7]

> Gero, а как получить этот самый элемент
> element.onmouseover = ?

Через MSHTML. Если знаешь JavaScript хоть немного, проблем возникнуть не должно.
По имени можно получить элемент примерно так:

function GetWBElementByName(WebBrowser: TWebBrowser; ElementName: string): IHTMLElement;
var
 Doc: IHTMLDocument2;
begin
 Doc := WebBrowser.Document as IHTMLDocument2;
 if Doc <> nil then
   Result := Doc.all.item(ElementName, 0) as IHTMLElement
 else
   Result := nil;
end;

Можно также использовать GetElementById и другие JS-средства.


 
Calm ©   (2006-06-23 11:46) [8]

Большое спасибо, Gero.

Знания HTML и JS присутствуют в хорошем объеме. Не хватало знаний (да что там, отсутствуют! :))  по работе со всем этим добром из Delphi.


 
parovoZZ ©   (2006-06-23 14:06) [9]

Вся эта байда глючит, если страницу грузить в потоке. Также не работает, если нажать F5 или из контекстного меню кликнуть обновить.


 
Gero ©   (2006-06-23 14:17) [10]

> [9] parovoZZ ©   (23.06.06 14:06)

Глючит только если руки неровные.


 
parovoZZ ©   (2006-06-23 19:20) [11]

Ну может быть, я ловил IHTMLEventObj.srcElement.getAttribute("id", 0). Но иногда это событие просто не возникало.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
15-1149840196
Ketmar
2006-06-09 12:03
2006.07.09
LUA 5.1 -- сборка в виде .obj...


1-1148733499
parovoZZ
2006-05-27 16:38
2006.07.09
Цикл обработки сообщений Application


15-1149849329
Aleksandr.
2006-06-09 14:35
2006.07.09
Где в BDS 2006 настраиваются шаблоны автоподстановки?


10-1120634549
Alkid
2005-07-06 11:22
2006.07.09
Отладка COM-объектов


2-1150873143
greg123
2006-06-21 10:59
2006.07.09
Внесение изменений в текствый файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский