CBuilder / DelphiのHTMLエディター
-
03-07-2019 - |
質問
C ++ Builder 5の基本的なWYSIWYG HTMLエディターコンポーネントを見つけて、ユーザーが既存のHTMLページテンプレートに貼り付ける簡単なテキストを作成できるようにする必要があります。 リンクの作成、画像の追加、headers / bold / italicの使用を簡単にサポートします。
解決
フォームにTWebBrowserをドロップし、次のようにデザインモードを有効にできます。
// Delphi code..
(WebBrowser1.Document as IHTMLDocument2).designMode := 'on';
上記の行を実行すると、ページが編集可能になります。追加のテキストを入力したり、削除したりすることができます。選択範囲を太字にしたり、画像を挿入したい場合は、プログラムするボタンをいくつか追加する必要があります。すばらしいことは、Delphi(またはC ++ビルダーの場合)からそれを行うか、ページにjavascriptを追加してそれ自体を編集できることです。
ページのコンテンツはから取得できます
(WebBrowser.Document as IHTMLDocument2).body.innerHTML;
(IHTMLDocument2としてのWebBrowser.Document)はnilであることを忘れないでください。
とにかく、あなたのためにすべての作業を行うコンポーネントが周りにあると想像できます。これはおそらく、車輪を再発明するよりも良い方法です。
他のヒント
世界クラスのサポートと豊富な機能セットにより、 TRichView をお勧めします。それは本当の" HTML"ではありませんがエディターでは、HTMLにエクスポートする機能をサポートし、必要に応じて適切なCSSスタイルを生成します。メイン製品のメール部分を処理するために使用していますが、非常にうまく機能します。内部的には、ストレージはRTF(イメージをよりよくサポートするために拡張された)または独自の形式のいずれかです。簡単にあなたのニーズに合ったシンプルなエディターの例がたくさんあります。
C ++ Builderでは、次のようになります。
(wbはTCppWebBrowserです)
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "mshtml.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnNavigateAndEditClick(TObject *Sender)
{
wb->Navigate((WideString)"www.google.com");
while (wb->Busy)
Application->ProcessMessages();
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
html->put_designMode(L"On");
html->Release();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnInsertImageClick(TObject *Sender)
{
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
VARIANT var;
VARIANT_BOOL receive;
html->execCommand(L"InsertImage",true,var, &receive);
html->Release();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnGetHtmlClick(TObject *Sender)
{
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
IHTMLElement *pElement;
html->get_body(&pElement);
pElement->get_parentElement(&pElement);
wchar_t *tmp;
pElement->get_outerHTML(&tmp);
Memo1->Lines->Text = tmp;
pElement->Release();
html->Release();
}
}
//---------------------------------------------------------------------------
EmbeddedWebBrowser
コンポーネントの無料セットとEdit Designerコンポーネントを提供します
EmbeddedBrowser
ウィンドウにリンクして、デザインモードを制御し、編集を制御する
ファイルに保存、リンク、画像などを挿入...
うまく機能しているようです!