畏れ入ります。
色々検索したのですが、わからなかったので、教えてください。
showmessageコマンドで、メッセージボックスを出す場合に
タイトルバーが「project」となってしまい、そっけないです。
これを文字列で指定できないのでしょうか?
MessageDlg 関数を使いましょう
スイマセン。
MessageDlgも
タイトルバー
の設定値は無いのでは?
MessageBox API ならできそうですね。
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
MessageBox APIの場合にShowMessage同様にモーダルにするには、
hWndにHWND_DESKTOPを指定して、
uTypeにMB_TASKMODALを付けないといけなかったような気がするので
ご注意ください。
TApplication.MessageBoxを使えば?
Application.MessageBox('ダイアログ内の文字列',
'タイトルバーの文字列',
MB_OK);
でどうでしょう?
皆さま、お返事遅れてしまい申し訳ありませんでした。
みんみんさんのおしえてくれた
Application.MessageBox
がいちばん簡単に出来ました!
とても助かりました!
CreateMessegeDialog のほうがもっといい。
CreateMessegeDialog でどうやってタイトルバーに文字を設定するんですか?
バスクさんご指摘ありがとうございました。
今回の場合こんな感じでしょうか。
function CustomMsgDlg(const msg: string):integer;
var
MDlg :Tform;
begin
MDlg :=CreateMessageDialog(msg,MTERROR,[MBOK]);
with MDlg do begin
try
Caption :='タイトルバーの文字列';
Timage(component0]).Picture.Icon.Handle
:=Application.Icon.Handle;
TButton(components[2]).Caption :='ボタンの文字';
Result :=ShowModal;
finally Free; end;
end; //with
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if CustomMsgDlg('これはテストです。') =mrOK then
showmessage('OKが押されました。')
else
showmessage('キャンセルされました。')
end;
これって簡易的なバージョン情報とかに使えそうですよね♪
ソース9行目は
Timage(component0]) ではなく Timage(components[0])
ですね。
確認不足ですみません。
アイコンはCreateMessageDialog で メッセージボックスを生成するときに指定するスタイルで決定されるので、後から変更しなくてもOKです。
(mtError = 赤い× など)
また、Component プロパティを使うよりは、
オブジェクト名で指定するほうがわかりやすいかと思います。
オブジェクト名は公開されていて、
以下のように対応しています。
[アイコン] = 'Image'
[ボタン]
mbYes = 'Yes'
mbNo = 'No'
mbOk = 'OK'
mbCancel = 'Cancel'
mbAbort = 'Abort'
mbRetry = 'Retry'
mbIgnore = 'Ignore'
mbALL = 'ALL'
(mbHelp = 'Help' こいつはボタンを押してもメッセージを閉じない
ヘルプを表示するイベントをこのボタンの OnClick に仕込むことも可能です)
さらに、
ShowModal する前に ActiveControl を指定することで、
初期フォーカスを決定できます。
MessageDlg、MessageBox は デフォルト指定できないでしょ?
さらにボタンの文言も固定になってしまうので、
ぜひ、CreateMessageDialog を使ってカスタマイズしたメッセージボックス
を共通関数化しておくことをお勧めします。
>MessageDlg、MessageBox は デフォルト指定できないでしょ?
MessageDlgについては2006からデフォルト指定が可能です。
質問からは脱線いたしますが、
>アイコンはCreateMessageDialog で メッセージボックスを生成するときに指定するスタイルで決定されるので、後から変更しなくてもOKです。
>(mtError = 赤い× など)
それは知ってはいたのですが、
ダイアログ内のアイコンはTImageとして
任意のビットマップ、アイコンなどを任意のサイズで描画できるようです。
なので...
>Timage(component0]).Picture.Icon.Handle
> :=Application.Icon.Handle;
今回の私の場合は赤い×マークの代わりに
アプリケーションのアイコンを使ってみたのです。
>MessageDlgについては2006からデフォルト指定が可能です。
そうなんですか。そらしらんかったですわ。
>今回の私の場合は赤い×マークの代わりに
>アプリケーションのアイコンを使ってみたのです。
なるほど。
それも、CreateMessageDialogの利点ですな。
ツイート | ![]() |