TWebBrowserを仕様して、HTMLを開いています
そのときにHTMLテキストエリア内の改行ができません
いままで気づきませんでした、そうしてでしょうか?
(動作例)
FormにTWebBrowserを設置して以下をナビゲートします、この
テキストエリア内のENTERでの改行ができるようにしたい。
http://search.chiebukuro.yahoo.co.jp/search/search.php?flg=3&fr=chie-search-t&p=delphi+TWebBrowser+%E6%94%B9%E8%A1%8C
宜しくお願いします。
こんにちは.Mr.XRAYです.
>テキストエリア内のENTERでの改行ができるようにしたい。
いろいろな意味があると思いますが,
(1) 提示のURLのテキスト入力エリアで{Enter]で改行するようにしたい.
そのURLの内容を表示しているサーバー側のプログラムを変更する必要があります.
例えば,私のサイトの掲示板は,設置当初,タイトル部で[Enter]を押すと,自動的に
[送信]になっていましたか,修正しました.
(2) Delphiから,このテキストエリアに文章を挿入する時に改行をいれたい.
改行文字を入れれば可能と思われます.
(3) 表示されているテキストエリアに,キーボードから入力している時に改行したい.
[Shift] + [Enter]で可能と思われます
単なる[Entter]は自動的にSubmitする時に使います.
Delphiのアプリでもありますよね.ModalResultとか.
他にも考えられますが.
ここはDelphi関係の掲示板ですので,おそらく(2)ではないかと思います(確信なし).
こんなところでしょうか.
的ハズレでしたら,ごめんなさい.
Mr.XRAY様さっそくのご返信ありがとうございます。
私の説明不足でいろいろご迷惑をおかけいたしました、
私の行いたいことはキーボードからの入力になります
(3)になると思います
FormにTWebBrowserを配置しただけのものになりますが
そのTWebBrowserに表示されているHTMLのテキストエリア内に
キーボード入力で文字を入力する際に改行ができない状態です
Ctrl+EnterまたはAlt+Enterなどを試しましたが無理でした
そして送信にもなりません、サーバー側を変更することも可能ですが
IEでHTMLをみているような操作ができることが1番の希望です
引き続き宜しくお願いします。
FAQだと思われます、
まとめてくださってるページがありましたのでこちらを参考にしてください。
http://fusigidane.seesaa.net/article/136751944.html
あと有名どころのブラウザコンポーネントは大抵対応しています。
http://www.bsalsa.com/product.html
Mr.XRAYです.
大変失礼しました.
TWebBrowser上での表示の場合でしたね.
文章をよく読まず失礼しました.
>あと有名どころのブラウザコンポーネントは大抵対応しています。
>http://www.bsalsa.com/product.html
今このコンポーネントで動作確認しました.
[Enter]でも[Shift]+[Enter]でも改行します.
動作確認環境
Windows XP(SP3) + Delphi2010(UP5) + TEmbeddedWB Version 14.69.1 - 23.11.2009
Mr.XRAY様ご回答ありがとうございます、以下を試してみましたがエラーが
でてしまいます、基本的なことかもしれませんがご指導宜しくお願いします。
まずTMainFormにApplicationEventsを配置、その後
以下をMAINFormにいれてみたところ、、、
----------------------------------------------------------
FOleInPlaceActiveObject:IOleInPlaceActiveObject;
の
FOleInPlaceActiveObject
部分と
----------------------------------------------------------
if Msg.message = WM_KEYDOWN then
の
Msg.message
の部分が赤下線になってしまいます。
----------------------------------------------------------
環境は以下です。
WinXP SP3 delphi2010
「コピー」の動作不良
以下のコードをユニットの最後部に書く必要があります。
initialization
OleInitialize(nil);
finalization
OleUninitialize;
//引用原文
//TMainFormにApplicationEventsを配置したとします。
//WebBrowser1.: TWebBrowser;
procedure TMainForm.AppMessages(var Msg: tagMSG; var Handled: Boolean);
var
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
Re: HRESULT;
begin
if Msg.message = WM_KEYDOWN then
begin
//WebBrowserにメッセージが送られてきたかを判定
if IsChild(WebBrowser1.Handle, Msg.hwnd) then
begin
FOleInPlaceActiveObject :=
WebBrowser1.ControlInterface as IOleInPlaceActiveObject;
//メッセージをアクティブなWebBrowser(の子ウインド)に転送
Re := FOleInPlaceActiveObject.TranslateAccelerator(Msg);
if Re = S_OK then
Handled := True
else
Handled := False;
end
end
//自分で編集したもの
procedure TForm1.FormCreate(Sender: TObject);
FOleInPlaceActiveObject:IOleInPlaceActiveObject;
Re : HRESULT;
begin
// main
if Msg.message = WM_KEYDOWN then
begin
// WebBrowserにメッセージが送られてきたかを判定
if IsChild(WebBrowser1.Handle, Msg.hwnd) then
begin
FOleInPlaceActiveObject :=
WebBrowser1.ControlInterface as IOleInPlaceActiveObject;
// メッセージをアクティブなWebBrowser(の子ウインド)に転送
Re := FOleInPlaceActiveObject.TranslateAccelerator(Msg);
if Re = S_OK then
Handled := True
else
Handled := False;
end
end
end;
すいません、いろいろ抜けていました、
プラスこちらもためしてみましたがうまく動きません
https://www.petitmonte.com/bbs/answers?question_id=973
Application.OnMessage := MsgHandler;ここの
OnMessage にエラーがでてしまします。
動作確認できたソースをあげていただくことはできませんでしょうか?
すいません、いろいろ抜けていました、
プラスこちらもためしてみましたがうまく動きません
https://www.petitmonte.com/bbs/answers?question_id=973
Application.OnMessage := MsgHandler;ここの
OnMessage にエラーがでてしまします。
動作確認できたソースをあげていただくことはできませんでしょうか?
ご確認下さい。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ActiveX, AppEvnts, StdCtrls;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
ApplicationEvents1: TApplicationEvents;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
case Msg.message of
WM_KEYDOWN :
begin
if IsChild(WebBrowser1.Handle, Msg.hwnd) then
begin
Handled := (IOleInPlaceActiveObject(WebBrowser1.ControlInterface as IOleInPlaceActiveObject)
.TranslateAccelerator(Msg) = 0);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
aURL:string;
begin
aURL := 'http://search.chiebukuro.yahoo.co.jp/search/search.php?flg=3&fr=chie-search-t&p=delphi+TWebBrowser+%E6%94%B9%E8%A1%8C';
WebBrowser1.Navigate(aURL);
end;
end.
>Application.OnMessage := MsgHandler;ここの
>OnMessage にエラーがでてしまします。
何というエラーメッセージがでますか?
On何とかというのは,ほとんどイベントのことです.
このイベントのコードが implementation部にあると思いますが,
interface部で定義されていないからだと思いますよ.
こんにちは.
monaaさんが具体的なコードを提示していますので,ついでに.
前の参考ページのコードよりも,monaaさんのコードをお勧めします.
if IsChild(WebBrowser1.Handle, Msg.hwnd)
と
Handled := (IOleInPlaceActiveObject...
だけで判断しておいたほうが,ブラウザしている他のコントロールやブラウザ(TWebBrowser自身)
のキー操作が保障されます.これは,前出のコードとmonaaさんのコードの両方をいろいろテストして
みると分かります.
monaaさんのコードを見ると
ApplicationEvents1: TApplicationEvents;
というのが,いわゆる「特殊な領域」にあります.
これは,コンポーネントをこのフォームに配置してあるということです.
このコンポーネントはTApplicationEventsです.
「Delphiの特殊領域」の参考記事
http://mrxray.on.coocan.jp/Delphi/Others/A_UltraIntro01.htm#03
それから,前出のコードにある以下のコードはDelphi2010では必要ありません.
Delphiが自動的にやってくれます(monaaさんのコードにもありません).
>initialization
> OleInitialize(nil);
>finalization
> OleUninitialize;
それと,私がテストしたのは,TEmbededWBというコンポーネントです.
http://mrxray.on.coocan.jp/Delphi/plSamples/940_TWebBrowserAndIE.htm#08
テストした具体的なコードは以下です.これだけのコードです.
procedure TForm1.Button1Click(Sender: TObject);
var
StrURL : String;
begin
StrURL := 'http://search.chiebukuro.yahoo.co.jp/search/search.php?flg=3&fr=' +
'chie-search-t&p=delphi+TWebBrowser+%E6%94%B9%E8%A1%8C';
EmbeddedWB1.Navigate(StrURL);
end;
end.
Mr.XRAY
皆様たくさんのご返答ありがとうございます。
>monaa 様
コンポーネントを配置してそのままソースをはりつけて
コンパイルできましたが、動作がかわったようには思えません
Memoはどういう役割をはたすのでしょうか?
>Mr.XRAY
procedure TForm1.Button1Click(Sender: TObject);
var
StrURL : String;
begin
StrURL := 'http://search.chiebukuro.yahoo.co.jp/search/search.php?flg=3&fr=' +
'chie-search-t&p=delphi+TWebBrowser+%E6%94%B9%E8%A1%8C';
EmbeddedWB1.Navigate(StrURL);
end;
end.
ありがとうございます、コンポーネントをDLしてきました
EmbeddedWB_D5-D2010_Version_14.69.1
どれを追加したらよろしいのでしょうか?
追加経験がないため苦戦しております。
>どれを追加したらよろしいのでしょうか?
解凍したファイルの中にReadme_Install.txtというのがあります.
そこに書いてあります.Delphi2010のはありませんが,
そういう場合は,なるべく最新であるDelphi2005のを参考にします.
英語ができなくても,単語やファイル名である程度は判断できます.
http://www.bsalsa.com/ewb_install_d200.html
(Readme_Install.txtに書いてあるリンクです)
>Memoはどういう役割をはたすのでしょうか?
そのコードで使っていなければ削除します.
テスト等で,Memoに出力したり,確認用に使用することもあるからです.
じゅんさん用に特別にコードを作成しているわけではないのです.
そのぐらいは自分で判断しないといけません.
これじゃ,授業料いただかないといけませんね.
# 誤字脱字やスペルを間違えてもなんか質問されてしまいそう...
多分間違えることはないと思いますが,
>..:\Borland\BDS\3.0\lib
というのは,Delphi2010をインストールしたLibというフォルダに読み換えます.
したがって,デフォルトでインストールした場合は,
C:\Program Files\Embarcadero\RAD Studio\7.0\lib
ということになります.
このLibにEmbeddedWB_2010というフォルダを作成するといいでしょう.
ではがんばってください.
ツイート | ![]() |