html画面で編集出来るようなツールの作成

解決


武田  2009-05-02 23:08:57  No: 34245

よろしくお願いします。環境はWindowsXP sp3  Delphi6 Personalです。
先に「簡易HTMLエディターを作成するには・・。」という質問がありましたが
私もローカルのHTMLファイルをロードして簡易なHTML画面の編集ができるツールを作りたいと勉強しています。
私の力でここまでたどり着いたのではなくサイトを探して参考例を集めた結果
下記のようになりました。
uses   ActiveX,mshtml_TLB;
var Doc:TStringList;

//HTMLファイルをロードする
procedure TForm1.Button1Click(Sender: TObject);
begin
    if OpenDialog1.Execute then
    WebBrowser1.Navigate(OpenDialog1.FileName);
    Doc:=TStringList.Create;
    Edit1.Text:= OpenDialog1.FileName;
end;
//html画面のソースを取得する
function TForm1.GetSource: String;
var
    DispIHTMLDocument: IHTMLDocument2;      //mshtml_TLBが必要
    Persist: IPersistStream; //  ActiveX,が必要
    Mem: TStringStream;
begin
    result:='';
    Mem := TStringStream.Create('');
    try
        DispIHTMLDocument :=WebBrowser1.Document as IHTMLDocument2;
        Persist := DispIHTMLDocument as IPersistStreamInit;
        Persist.Save(TStreamAdapter.Create(Mem), True);
        Result := Mem.DataString;
    finally
        Mem.Free;
    end;
end;
//html画面を編集可能/不可能に切り替える
procedure TForm1.SetDesignMode(Value: Boolean);
var
 HTML: IHTMLDocument2;
begin
    HTML := WebBrowser1.Document as IHTMLDocument2;
    if Value then
        HTML.designMode := 'On'
    else
        HTML.designMode := 'OFF';
end;
//ソースの取得
procedure TForm1.Button2Click(Sender: TObject);
begin
    Doc.Text:= GetSource;  //memo1.Lines.Add(Doc.Text);
    SetDesignMode(true);//編集可能にする
end;
計画ではこのあと、html画面でのカーソルの位置をソース上の何文字目にあるかが特定できれば
例えば半角の<br>などを挿入して改行を挿入したソースを再表示すれば改行された画面になり編集できたことになるのではと思います。
memoなどは何行目何文字目と取得する例が有りましたが
html画面のカーソル位置をhtmlソース上でカーソルの位置を特定する方法があるでしょうか。
ありましたら教えて頂きたいと思います。
(Microsoft DHTML Editing ControlなるものをDLして見ましたが、なにか脆弱性が問題とかで
MicrosoftはVista以降サポートしないと書いてあり、その使用例などほぼ皆無でした。)

よろしくお願いします。


みんみん  2009-05-03 03:13:23  No: 34246

HTMLでは単純な文字列のみのページを除いて、
画面のカーソル位置がHTMLの何行目と判断するのは難しいと思いますよ。

なぜならHTMLの改行(<BR>タグ以外のCR)は、画面上では改行されませんし
HTMLタグの属性(align、valign)などが設定されている場合なども
HTMLと画面のサイズなどより一概に何行目とはわからない思います。


武田  2009-05-03 04:49:42  No: 34247

みんみんさんご返事を有り難うございます。
何行目かは、ソースをダウンロードすれば解るとおりCRの位置がめちゃくちゃになり確定できないと思いますね。
何文字目というのは判別できませんでしょうか?

これが難しいものだというのは初心者の私にも想像が出来ます。
なぜなら、htmlエディタはいっぱいありますが、html画面から編集できるのは
Microsoft FrontPageかホームページビルダーくらいしか見たことがないですから、たぶん個人レベルでは難しいのでしょうね。
解りました。
有り難うございました。


みんみん  2009-05-03 06:03:39  No: 34248

検索したところフリーのWEBエディタである「alphaEDIT」なるものを発見いたしました。
ペロさんが希望しているWYSIWYG編集・HTMLソース編集・ブラウザプレビューの機能が
実装されていると思います。
(ただしCSSには弱いとブログ記事にありました)

http://www.pololon.com/koby/software.php?id=alphaEDIT

ただDHTML Editing Controlを使用しているアプリの為、Vistaには対応していないようです。
ペロさんはDHTML Editing ControlをDLしたようなので、
もしそれをインストールすれば動作するようになるのかもしれません。
(使用に関して責任は持てませんが・・・(^_^);)


みんみん  2009-05-03 06:57:18  No: 34249

>>武田さん

お名前を間違えるとは大変失礼いたししました。m(_ _)m
ペロさんは前スレッドの質問者の方でしたね。


武田  2009-05-04 07:04:12  No: 34250

みんみんさん、なんども有り難うございます。
こういうのがあったんですね。
DHTML Editing Controlの記述サイトを探してみると、バグだの脆弱性だの
いいことは書いていませんし、MSのサイトもリンク切れになっているし
ともかくコレを研究してみます。
有り難うございました。


リッチ  2009-05-05 21:13:34  No: 34251

リッチテキストをhtmlに変換すれば、頑張れるかも。。。

<<http://www.microsoft.com/downloads/details.aspx?familyid=DD422B8D-FF06-4207-B476-6B5396A18A2B&displaylang=en>>


ぺろ  2009-05-06 00:28:29  No: 34252

思わぬところで、波及した感じです。
最初に質問したぺろと申します。

当人はというと、超巨大な数字でも、割り算が出来る方法を知ったので、2Gまでの数字の素数判定のプログラムを作っていました。
2Gって何桁だよ、アホだ、アホすぎる。
いや、さらに改造すれば、メモリーが許す限り、無限大にも。(笑

で、文字の位置を判定することは、私にも分からないのですが・・・、
(WebBrowser1.Document as IHTMLDocument2)
  .execCommand('paste', True ,#13);

http://msdn.microsoft.com/ja-jp/library/dd591349.aspx

って使えませんか?
こいつは、文字のの選択範囲、カーソル位置に何かしてくれる物です。
例は、改行をペーストしているだけです。

HTMLのソースを見ても、<BR>になるから、平気だとは思うんですが、、、プログラムの内部まで見る技術や知識が私にはないので、なんとも。^^;
こいつを調べられたので、私は、まぁ、順調といえば、順調に開発途中です。

あとは、リッチエディット方式なら、タグと本文を分離する方法を考えついたのですが・・・、タグを複雑に複雑にすると、処理が面倒になっていくので、保留にしました。^^;
部分的に文字の修飾をなくす時が、面倒な処理になるんだよなー。
可能といえば、可能だとは思うんだけど・・・。

武田さんには、ヒントをいただいたので、もし見て頂き、参考になれば、幸いです。


武田  2009-05-06 01:59:08  No: 34253

リッチさん、べろさん、お返事有り難うございました。
何ともならないので、徘徊していました(笑)
もう一度ここに何か無いかと戻ってきましたら、お返事を発見したわけです。
リッチさん、べろさんの「リッチテキストをhtmlに変換すれば・・」の件は
じっくりやってみます。
かねてよりRichEditに画像など貼り付けられないか探求していましたので。
(有料パッケージならありましたけど)

DHTMLEditorを使ったコンポーネントを見つけたのですが

http://hp.vector.co.jp/authors/VA015669/
http://hp.vector.co.jp/authors/VA015669/DHTMLED(activeX)/UIDHTMLEdExplanation.html
私はブラウザコンポーネントは TEmbeddedWBをず〜っと愛用していますので
ブラウザコンポーネントごと変更しなければならないみたいですのでちょっと問題なのと更新が2001/10/23 以降されてないのが気になります。

やはりDHTMLEditorを使うのは現実的ではないのかもしれません。
有り難うございました。では。


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

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






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