32ビットアプリケーションを作成するWin 7 64ビット版Delphi XE2を使用しています...タブ文字はDelphi XE2のメッセージダイアログでは機能しなくなりました。
Delphi 6では、メッセージ内でタブ文字を使用して、見栄えのよい複数行のダブルカラムダイアログを作成しました。
str := 'Left item:' + #9#9 + 'Right Item' + #13#10 +
'Next left item: + #9 + 'Next Right Item' + ...
if MessageDlg(str, mtConfirmation,[mbYes,mbNo],0) = mrYES then...
これは、ユーザがこの特定の質問をするだけのカスタムフォームを必要とせずに見えるように、うまく並べられたデータリストを作成します。右の列はうまく整列されており、データをはっきりと見ることができます。
Delphi XE2では、文字列に埋め込まれたタブ文字(#9)は完全に無視され、空白はまったくありません。 #32を使用するとスペースが作成されますが、タブ文字(#9)のようにうまく並んでいません。私はいくつかのUnicodeの問題にぶつかっていますか?
このフォームをカスタムフォームを使用する以外に戻すための提案はありますか?
乾杯!
編集:私は質問を投稿した後
はもちろん、私は夫婦別の回避策を見つけ出します。
まず、Application.MessageBox()を使用すると、タブ文字の間隔が維持されます。
次のコードは、次のように動作し、タブ文字で適切な空白を維持します。
procedure TForm1.Button1Click(Sender: TObject);
var AMsgDialog : TForm;
var str : string;
begin
str := 'Left item:' + #9#9 + 'Right Item' + #13#10 +
'Next left item:' + #9#9 + 'Next Right Item';
AMsgDialog := CreateMessageDialog(str, mtConfirmation,[mbYes,mbNo],0);
try
if AMsgDialog.ShowModal = mrYES then begin
//do something
end;
finally
AMsgDialog.Release;
end;
end;
この方法でメッセージダイアログを作成すると、古い方法ではタブ文字の間隔が維持されないのはなぜか分かりません。
MessageDlg()を呼び出すと、同じCreateMessageDialog関数がヒットしているので、タブ文字を取り除く間に何かが存在するはずです。私はコードにタブ文字を取り除いていたものを見つけることができませんでした。
これは他の人に役立つことを望みます。
私は単純に 'Applicationを使うことを提案していました。MessageBox'であるが、その悪い点は 'str'の代わりに' PChar(str) 'が必要なことです。 –