WEBページの入力BOXにaが入力でにないのを回避するには

解決


TWebBrowserの勉強中  2008-10-11 03:49:01  No: 32178

環境はXPのD6Personalです。
当サイトの過去ログ「PageControlのページを削除するとエラーがでる
」のママんさんのコードを参考にブラウザの勉強中です。
下記の件で行き詰まっています。
Webページの投稿欄などで入力BOXがありますが、サイトによっては
文字「a」だけやスペースが入力できないサイトがあります。
前記のコードを必要な部分だけ抽出したコードが下記の通りです。
フォームにTPagecontrolを貼り付けただけです。WebBrowserは動的に作成。
ところが、Captionにページのタイトルを代入するコードをコメントアウト
すれば問題なく入力できます。
FormCreate()にいろいろなサイト例を列挙してみました。
私が任意に設定したコードがないので、原因がわかりません。
なにかサイトに仕掛けがあるのでしょうか。
新米が下手な説明をするよりはと長文になりました。すみません。
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls,  ExtCtrls, ComCtrls, StdCtrls, SHDocVw_TLB;

type
  TIETabSheet = class(TTabSheet)
  private
    procedure WebBrowser1TitleChange(Sender: TObject; const Text: WideString);
  public
    WebBrowser1 : TWebBrowser;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TForm1 = class(TForm)
    PageControl1: TPageControl;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{ TIETabSheet }
procedure TIETabSheet.WebBrowser1TitleChange(Sender: TObject; const Text: WideString);
begin
  //Caption代入をコメントアウトすれば文字aやスペースを入力できる
  //↓↓↓↓↓
  Caption:= Text;//タブのキャプション決定
end;

constructor TIETabSheet.Create(AOwner: TComponent);
begin
  inherited;
  //タブシートの作成と同時にブラウザ作成
  WebBrowser1 := TWebBrowser.Create(self);
  TOleControl(WebBrowser1).Parent := Self;
  WebBrowser1.Align               := alClient;
  WebBrowser1.OnTitleChange := WebBrowser1TitleChange;//イベントの定義
end;

destructor TIETabSheet.Destroy;
begin
  WebBrowser1.Free;//タブシートの破棄と同時にブラウザ破棄
  inherited;
end;

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);//タブを動的に作成
var
  IETab:TIETabSheet;
begin
  IETab :=  TIETabSheet.Create(PageControl1);
  IETab.Parent       := PageControl1;
  IETab.PageControl  := PageControl1;
  PageControl1.ActivePage := TTabSheet(IETab);
    //aだけ入力できないサイト例 (新規投稿ページ)
    IETab.WebBrowser1.Navigate('http://miuras.net/taro/cyclamen.cgi');
    //Serchに  aは入力できるがスペースは入力できないサイト。
    //ただしgoogleサーチ窓は入力できる
    //IETab.WebBrowser1.Navigate('http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi');
    //問題なく入力できるサイト例
    //IETab.WebBrowser1.Navigate('http://homepage2.nifty.com/winfaq/bbs2k.html');
    //IETab.WebBrowser1.Navigate('http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi');
end;

end.


ttt  2008-10-11 04:19:14  No: 32179

ページのタイトルに「Q&A」とか「Q& A」が含まれているので、そのままCaptionに設定するとAやスペースがアクセスキーになってしまうのが原因。
Captionのヘルプを見ると書いてあると思いますが、&&に変換しましょう。


TWebBrowserの勉強中  2008-10-11 07:15:35  No: 32180

tttさん、早速教えて頂き有り難うございました。
ヘルプを読みましたが&&に変換するという意味がわかりません。
すみませんが、どのようにするのでしょうか。
よろしくお願いします。


for exsample  2008-10-11 10:23:57  No: 32181

Caption:=Text;

Caption:=StringReplace(Text, '&', '&&', [rfReplaceAll]);


情報はここ  2008-10-11 17:40:23  No: 32182

多分、captionのヘルプ〜&& と言ってもピンと来ないかも知れないので..

Delphi6だったら、フォームを出した状態で、オブジェクトインスペクタ
のcaptionにカーソルを持っていき、キーの「F1」を押す。
後は、Tcontrol.caption VCLリファレンスをクリック。
情報はその中に...


TWebBrowserの勉強中  2008-10-11 19:41:52  No: 32183

for exsample さん、有り難うございました。
解決しました。
最初、どうしてForm1のCaptionが関係するのだろうと考えていろいろやりましたが解りませんでした。

私の書き方が悪かったかもしれません
(Form1.PageControl1.ActivePage as TIETabSheet).Caption:=
と書くべきだったかもしれません。

サイトでも見たことがありませんでした。勉強になりました。


TWebBrowserの勉強中  2008-10-11 19:43:33  No: 32184

すみません。自己レスです。
解決マークを忘れました。


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

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






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