環境は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.
ページのタイトルに「Q&A」とか「Q& A」が含まれているので、そのままCaptionに設定するとAやスペースがアクセスキーになってしまうのが原因。
Captionのヘルプを見ると書いてあると思いますが、&&に変換しましょう。
tttさん、早速教えて頂き有り難うございました。
ヘルプを読みましたが&&に変換するという意味がわかりません。
すみませんが、どのようにするのでしょうか。
よろしくお願いします。
Caption:=Text;
↓
Caption:=StringReplace(Text, '&', '&&', [rfReplaceAll]);
多分、captionのヘルプ〜&& と言ってもピンと来ないかも知れないので..
Delphi6だったら、フォームを出した状態で、オブジェクトインスペクタ
のcaptionにカーソルを持っていき、キーの「F1」を押す。
後は、Tcontrol.caption VCLリファレンスをクリック。
情報はその中に...
for exsample さん、有り難うございました。
解決しました。
最初、どうしてForm1のCaptionが関係するのだろうと考えていろいろやりましたが解りませんでした。
私の書き方が悪かったかもしれません
(Form1.PageControl1.ActivePage as TIETabSheet).Caption:=
と書くべきだったかもしれません。
サイトでも見たことがありませんでした。勉強になりました。
すみません。自己レスです。
解決マークを忘れました。
ツイート | ![]() |