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ともに作りこまなきゃいけないのでしょうか?
WebBrowserとRichTextBoxとがどこかで
混線してるような.....(^^;
ねろさん
>WebBrowserとRichTextBoxとがどこかで
>混線してるような.....(^^;
私も詳しくはありませんが、以下のサンプルのようなことをされているのではないでしょうか?
http://msdn.microsoft.com/workshop/samples/author/dhtml/refs/editRegions.htm
この例では、上の HTMLEditor (Content-Editable DIV) の コンテキストメニューに
"元に戻す(U)" が出てきます。
時間がないので、今は調べられませんが、このたぐいの情報は外国の方が多いようですので
Internet Explorer MSHTML Editing などのキーワードで調べられみては如何でしょうか?
追加情報
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するなどして調べてみて下さい。
参考情報が得られるかも
ご教授ありがとうございます。
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)
> からサンプルを得ることができます。
拝見させていただきました。
コレ、まさに私がやろうとしていたことですね。
参考にさせていただきます。ありがとうございます。
私、まだまだ検索の技術が未熟なんだなーと思います...
VBからJavaScriptに乗り換えたと言うことかしら。
なんとなく又戻って来るような気がしますが。
それにしてもIMAさん提示のサンプルよく出来ていますね。
ただ少し残念なのは、FireFoxで見ると誤動作します。
> コンテキストメニューに "元に戻す(U)" が出てきます。
ieの<TEXTAREA>タグの仕様ですかね。
おかげさまで実装できました。
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
...とすれば検索画面の表示はできますが、なんか気持ち悪いです。
そうですね、私も以前カスタムブラウザーを作った時は、検索画面が出せなくて色々調べました。
結論は、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も暇な時にご一読を。
こちらのリンクも・・
http://www.kbalertz.com/kb_815716.aspx
ツイート | ![]() |