よろしくお願いします。
Delphi6 を使っています。
次のコードで「&」が表示されず、次の文字にアンダーライン(下線)が付きます。
「&」に特別な働きがあるのでしょうか?
代入した文字列のまま表示することができるでしょうか?
var
s: String;
begin
s := 'www.example.com?a=aaa&b=bbb';
showmessage(s); //表示された文字列には「&」が表示されず次の文字「b」にアンダーラインが付く
end;
二つ続ければ御利益あり
ありがとうございます。
代入箇所を次のように修正し、表示上「&」がアンダーラインになる問題を回避できました。
s := 'www.example.com?a=aaa&&b=bbb';
-----
変数に代入した文字を確認する目的で表示していたため、可能なら、変数に代入した文字には手を加えず、表示のときにアンダーラインになるのを抑止したいと思います。
そのような方法もあるでしょうか?
どうぞ、よろしくお願いいたします。
メッセージボックスを表示する関数は他にもいくつかありますが
Application.MessageBoxとかMessageDlgとかは試してみました?
どれがどれだか忘れましたが、APIのMessageBoxを直に呼び出しているものなら
&がアクセスキーと解釈されることはないはずです。
ShowMessage(StringReplace(S, '&', '&&', [rfReplaceAll]));
はいかがですか?
tor さん、ありがとうございます。
Application.MessageBox でうまく表示できました。
期待通り、変数の値をそのまま表示してくれます。
MessageDlg は ShowMessage と同じ結果でした。
igy さん、ありがとうございます。
ご提案のコードで & がアンダーラインになる振る舞いを抑制できました。
テストしたコードを掲載します。
var
s: String;
begin
s := 'www.example.com?a=aaa&b=bbb';
showmessage(s); //表示された文字列には「&」が表示されず次の文字「b」にアンダーラインが付く
showmessage(StringReplace(s, '&', '&&', [rfReplaceAll]));
MessageDlg(s, mtConfirmation, [mbOk], 0); //表示された文字列には「&」が表示されず次の文字「b」にアンダーラインが付く
Application.MessageBox(PChar(s), 'Test-&-Test', MB_OK); //「&」を含め、文字列がそのまま表示される(ウィンドウタイトル内にも表示可)
end;
すでに解決済みですが・・・
ShowMessageも内部で的にMessageDlgを呼んでいるだけなので、MessageDlgを解決してみることに。
function MessageDlgNoAccelChar(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons): Integer;
var
msgCtrl :TComponent;
begin
with CreateMessageDialog(Msg, DlgType, Buttons) do
try
msgCtrl := FindComponent('Message');
if (msgCtrl <> nil) and (msgCtrl is TLabel) then begin
TLabel(msgCtrl).ShowAccelChar := False;
end;
Position := poScreenCenter;
Result := ShowModal;
finally
Free;
end;
end;
procedure ShowMessageNoAccelChar(const Msg: string);
begin
MessageDlgNoAccelChar(Msg, mtCustom, [mbOK]);
end;
使い方は以下の通り
var
s:String;
begin
s := 'www.example.com?a=aaa&b=bbb';
MessageDlgNoAccelChar(s, mtConfirmation, [mbOk]);
ShowMessageNoAccelChar(S);
end;
ポムヌンティウス さん、ありがとうございます。
ShowMessage/MessageDlg の代替になる関数を試作してくださったんですね。
次の2つの関数が、変数をそのまま表示してくれました。
・MessageDlgNoAccelChar
・ShowMessageNoAccelChar
補足します。
先の回答で、ポムヌンティウス さんが TLabel のアクセスキー指定を制御してくださいました。
別の記事でも、現象は TLabel のアクセスキー対応機能に起因すると回答を受けました。
ShowMessage で「&」がアンダーラインになりますが、他にも同様の文字がありますか?
https://www.petitmonte.com/bbs/answers?question_id=6611
※結果的に2重投稿の形となってしまいご不便をおかけします。
ツイート | ![]() |