WebbrowserでのUNDO、REDO

解決


suzurin  2005-01-25 04:55:55  No: 119169

WebBrowserコントロールを使用し、簡易HTMLエディタを作成しており、
UNDOボタン・REDOボタンを実装したいと考えております。

UNDOに関しては、ショートカット[Ctrl]+[z]でできるので簡単だろうと
思っていたのですが、どうにもうまくいきません。
SendMessageにてEM_UNDOを送ればよいのかと思い、

SendMessage(webBrowser1.hwnd, EM_UNDO, 0, 0)
SendMessage(webBrowser1.document.hwnd, EM_UNDO, 0, 0)

など試したのですがダメでした。
なにか根本的に間違っている気がしてきました...

また、REDOに関してはショートカットもないようなのですが、
間単に実装する方法はありますでしょうか。

ひょっとしてUNDO、REDOともに作りこまなきゃいけないのでしょうか?


ねろ  2005-01-25 05:53:00  No: 119170

WebBrowserとRichTextBoxとがどこかで
混線してるような.....(^^;


IMA  2005-01-25 17:13:55  No: 119171

ねろさん
>WebBrowserとRichTextBoxとがどこかで
>混線してるような.....(^^;

私も詳しくはありませんが、以下のサンプルのようなことをされているのではないでしょうか?
http://msdn.microsoft.com/workshop/samples/author/dhtml/refs/editRegions.htm

この例では、上の HTMLEditor (Content-Editable DIV) の  コンテキストメニューに 
"元に戻す(U)" が出てきます。

時間がないので、今は調べられませんが、このたぐいの情報は外国の方が多いようですので
Internet Explorer MSHTML Editing などのキーワードで調べられみては如何でしょうか?


IMA  2005-01-25 17:46:49  No: 119172

追加情報

http://wysiwyg.skybuilders.com/skyWriters/skyWriterIE.html
から
http://wysiwyg.skybuilders.com/demos/IE.html  に移動し最下部にある
Download the skyWriter for Internet Explorer source code. (41 KB) 
からサンプルを得ることができます。

その中の skyMSDEC.html を開いてみて下さい。
メニューバーのmenuの中にundo、redo があります。
これらのフォルダーをgrepするなどして調べてみて下さい。
参考情報が得られるかも


suzurin  2005-01-25 18:27:45  No: 119173

ご教授ありがとうございます。

IMA様
> 私も詳しくはありませんが、以下のサンプルのようなことをされているのではないでしょうか?
http://msdn.microsoft.com/workshop/samples/author/dhtml/refs/editRegions.htm

はい、ご推察のとおりでして... (^_^;
というか、こんなページがあったんですね。参考になります。

http://wysiwyg.skybuilders.com/demos/IE.html  に移動し最下部にある
> Download the skyWriter for Internet Explorer source code. (41 KB) 
> からサンプルを得ることができます。

拝見させていただきました。
コレ、まさに私がやろうとしていたことですね。
参考にさせていただきます。ありがとうございます。

私、まだまだ検索の技術が未熟なんだなーと思います...


ねろ  2005-01-25 23:55:39  No: 119174

VBからJavaScriptに乗り換えたと言うことかしら。
なんとなく又戻って来るような気がしますが。
それにしてもIMAさん提示のサンプルよく出来ていますね。
ただ少し残念なのは、FireFoxで見ると誤動作します。

>  コンテキストメニューに "元に戻す(U)" が出てきます。
ieの<TEXTAREA>タグの仕様ですかね。


suzurin  2005-01-26 05:53:44  No: 119175

おかげさまで実装できました。
IMA様にご教授いただいたように、検索サイトフル活用で、
主に日本語の書いていないページを読み解いていたので、
知恵熱が出ています...

参考までに、下記のような感じです。

'元に戻すUndo
Call webBrowser.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT)
'やり直しRedo
Call webBrowser.ExecWB(OLECMDID_REDO, OLECMDEXECOPT_DODEFAULT)

ほかにも、コピペも同様にできました。

'切り取りCut
Call webBrowser.ExecWB(OLECMDID_CUT, OLECMDEXECOPT_DODEFAULT)
'コピーCopy
Call webBrowser.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT)
'貼り付けPaste
Call webBrowser.ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT)

ただ、この方法では検索画面の表示はできませんでした。
'検索Find
Call webBrowser.ExecWB(OLECMDID_SHOWFIND, OLECMDEXECOPT_DODEFAULT)
とすると、IWebBrowser2オブジェクトの実行時エラーになってしまいます。

強引に
webBrowser.SetFocus
SendKeys "^f", True
...とすれば検索画面の表示はできますが、なんか気持ち悪いです。


IMA  2005-01-26 13:58:27  No: 119176

そうですね、私も以前カスタムブラウザーを作った時は、検索画面が出せなくて色々調べました。
結論は、suzurinの方法かmicrosoftのサンプルに含まれているwbaddrbook.dllを使用する方法です。

http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/VB_Controls/Q_20408855.html
但し、ここのmicrosoftのアドレスはリンク切れです。以下をお使いください。
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/browser/vbwebbrowser/default.asp
このページの最下部のRelated Linksも暇な時にご一読を。


IMA  2005-01-26 14:27:39  No: 119177

こちらのリンクも・・
http://www.kbalertz.com/kb_815716.aspx


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加