C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ウェブブラウザで表示した画像をクリックした時にパスを取得 [1]


(過去ログ 69 を表示中)

[トピック内 27 記事 (21 - 27 表示)]  << 0 | 1 >>

■40282 / inTopicNo.21)  Re[1]: ウェブブラウザで表示した画像をクリックした時にパスを取得
  
□投稿者/ Jitta (598回)-(2009/08/23(Sun) 11:18:29)
No40213 (RT さん) に返信

 疑問なのですが、全体の仕様はどのようになっているのでしょう?
本当に今のままでいいのか。
お客様が編集する HTML の、元になるデータは、誰が、どのように、出してくるのか。
「画像」と言っているものは、そのデータをグラフ化したものではないのか。
そうだとすると、お客様が手で編集する必要は、本当にあるのか。

技術的にもお客様の運用的にも、ややこしいことをしているだけのような気がします。
引用返信 編集キー/
■40285 / inTopicNo.22)  Re[9]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ 魔界の仮面弁士 (1247回)-(2009/08/23(Sun) 12:02:56)
2009/08/23(Sun) 12:04:34 編集(投稿者)

No40281 (RT さん) に返信
> (1)編集モードから通常の表示モードへの切り替えを行う方法
> 以外の方法
どうしても必要なら、DirectInput でのマウスキャプチャに切り替えてみるとか。


> (2)編集モードから通常の表示モードへの切り替えを行い、リンク先へのジャンプを防ぐ方法
通常、画像そのものに、ハイパーリンクの機能は無いですよね?

もしかして、ここでいう画像とは、<img> タグではなく、<input type=image> のことなのでしょうか?
それとも、<a> タグが併用されているという事でしょうか? あるいは、その画像の onclick イベントに
ページを切り替えるような JavaScript コードが埋め込まれているという事なのでしょうか?

何にせよ、リンク先へのジャンプを防ぎたい場合には、Navigating イベントで
e.Cancel を true に設定してやれば OK です。
引用返信 編集キー/
■40288 / inTopicNo.23)  Re[2]: ウェブブラウザで表示した画像をクリックした時にパスを取得
□投稿者/ RT (97回)-(2009/08/23(Sun) 12:20:03)
2009/08/23(Sun) 12:24:19 編集(投稿者)
2009/08/23(Sun) 12:22:52 編集(投稿者)

webBrowser_Main.Document.Body.AttachEventHandler("onclick", delegate
{

webBrowser_Main.Document.Body.SetAttribute("contentEditable", "false");
HtmlElement tag = webBrowser_Main.Document.ActiveElement; // event.srcElement の代用
if (tag.TagName == "IMG")


↑のコードのように、タグネームの設定をIMGにすると、編集モードを解除しても、イメージファイルをクリックしたときに、イベントが取れない事がわかりました。おそらく、コードを囲んでいるタグを指定しないとダメなんですね。

ではどうやったら、イメージをクリックした時に、クリックイベントを取れるのでしょうか?
引用返信 編集キー/
■40291 / inTopicNo.24)  Re[3]: ウェブブラウザで表示した画像をクリックした時にパスを取得
□投稿者/ 魔界の仮面弁士 (1248回)-(2009/08/23(Sun) 12:56:21)
2009/08/23(Sun) 13:06:52 編集(投稿者)
No40288 (RT さん) に返信
>  webBrowser_Main.Document.Body.AttachEventHandler("onclick", delegate
>  {
>      webBrowser_Main.Document.Body.SetAttribute("contentEditable", "false");
クリックされるたびに、『Body』の contentEditable を "false" にしているようですね。


まず、デザインモードにしたとき
 ((mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument).designMode = "On";
は、クリックしてもイベントは発生しません。

一方、デザインモードにしていない場合(閲覧モード)には、contentEditable で
編集可能にしてあるかどうかに関わらず、onclick のイベントは発生します。

ただし編集可能にしていた場合、最初のクリックはオブジェクトの選択のみを意味するので、
クリックされたオブジェクトによっては、該当要素のイベントとして扱うために、
選択後にもう一度クリック(物によってはダブルクリック)せねばならない可能性があります。


>      HtmlElement tag = webBrowser_Main.Document.ActiveElement;  // event.srcElement の代用
No39742 のコードで、上記にも転記されている『event.srcElement』というヒントを
コメント文に埋め込んでおいたのですが、そのことには気が付いていましたか?

HtmlElement tag = webBrowser1.Document.ActiveElement;
mshtml.IHTMLWindow2 Window = (mshtml.IHTMLWindow2)webBrowser1.Document.Window.DomWindow;
mshtml.IHTMLEventObj Event = Window.@event;
label1.Text = tag.TagName;
label2.Text = Event.srcElement.tagName;</pre></pre>

引用返信 編集キー/
■40292 / inTopicNo.25)  Re[4]: ウェブブラウザで表示した画像をクリックした時にパスを取得
□投稿者/ RT (98回)-(2009/08/23(Sun) 13:35:16)
2009/08/23(Sun) 13:53:25 編集(投稿者)

No40291 (魔界の仮面弁士 さん) に返信

webBrowser_Main.Document.Body.AttachEventHandler("onclick", delegate
{
HtmlElement tag = webBrowser_Main.Document.ActiveElement;
mshtml.IHTMLWindow2 Window = (mshtml.IHTMLWindow2)webBrowser_Main.Document.Window.DomWindow;
mshtml.IHTMLEventObj Event = Window.@event;
label3.Text = tag.TagName;
label4.Text = Event.srcElement.tagName;
if (Event.srcElement.tagName == "IMG")
{
mshtml.IHTMLElement tags = (mshtml.IHTMLElement)webBrowser_Main.Document.GetElementFromPoint(webBrowser_Main.PointToClient(Control.MousePosition)).DomElement;

s = (string)tags.getAttribute("src", 2);
label5.Text = s;

↑で、ようやく画像をクリックして、相対パスを取得する事が出来ました。

魔界の仮面弁士 さん、やじゅさん、επιστημηさん、Jittaさん、Jitta on the wayさん、
かずきさん、774RRさん、gtk2kさん、orz..さん、ありがとうございました。またよろしくお願いします。

解決済み
引用返信 編集キー/
■40294 / inTopicNo.26)  Re[5]: ウェブブラウザで表示した画像をクリックした時にパスを取得
□投稿者/ 魔界の仮面弁士 (1249回)-(2009/08/23(Sun) 13:47:28)
No40292 (RT さん) に返信
> label4.Text = Event.srcElement.tagName; // event.srcElement の代用

いやいやいや。
代用では無く、まさにそれが event.srcElement そのものですよ? (涙
引用返信 編集キー/
■40296 / inTopicNo.27)  Re[6]: ウェブブラウザで表示した画像をクリックした時にパスを取得
□投稿者/ RT (99回)-(2009/08/23(Sun) 13:54:24)
No40294 (魔界の仮面弁士 さん) に返信
> ■No40292 (RT さん) に返信
>>label4.Text = Event.srcElement.tagName; // event.srcElement の代用
>
> いやいやいや。
> 代用では無く、まさにそれが event.srcElement そのものですよ? (涙

編集いたしました。すいませんでした。
解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -