showmessageではタイトルバーに文字を設定できませんか?

解決


うみ  2006-11-25 12:01:35  No: 24048

畏れ入ります。

色々検索したのですが、わからなかったので、教えてください。

showmessageコマンドで、メッセージボックスを出す場合に
タイトルバーが「project」となってしまい、そっけないです。

これを文字列で指定できないのでしょうか?


HOta  2006-11-25 14:38:21  No: 24049

MessageDlg 関数を使いましょう


うみ  2006-11-26 09:28:00  No: 24050

スイマセン。

MessageDlgも
タイトルバー
の設定値は無いのでは?


うんと  2006-11-26 10:14:11  No: 24051

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
   );


かみづ  2006-11-27 00:12:17  No: 24052

MessageBox APIの場合にShowMessage同様にモーダルにするには、
hWndにHWND_DESKTOPを指定して、
uTypeにMB_TASKMODALを付けないといけなかったような気がするので
ご注意ください。


放浪者  2006-11-27 01:34:02  No: 24053

TApplication.MessageBoxを使えば?


みんみん  2006-12-03 20:43:08  No: 24054

Application.MessageBox('ダイアログ内の文字列',
                       'タイトルバーの文字列',
                        MB_OK);
でどうでしょう?


うみ  2006-12-06 08:25:49  No: 24055

皆さま、お返事遅れてしまい申し訳ありませんでした。
みんみんさんのおしえてくれた
Application.MessageBox
がいちばん簡単に出来ました!

とても助かりました!


バスク  2006-12-13 01:27:34  No: 24056

CreateMessegeDialog のほうがもっといい。


うーむ  2006-12-13 07:30:13  No: 24057

CreateMessegeDialog でどうやってタイトルバーに文字を設定するんですか?


みんみん  2006-12-13 09:28:37  No: 24058

バスクさんご指摘ありがとうございました。
今回の場合こんな感じでしょうか。

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;

これって簡易的なバージョン情報とかに使えそうですよね♪


みんみん  2006-12-13 09:33:35  No: 24059

ソース9行目は
Timage(component0])  ではなく Timage(components[0])
ですね。
確認不足ですみません。


バスク  2006-12-16 02:10:24  No: 24060

アイコンはCreateMessageDialog で メッセージボックスを生成するときに指定するスタイルで決定されるので、後から変更しなくてもOKです。
(mtError = 赤い× など)

また、Component プロパティを使うよりは、
オブジェクト名で指定するほうがわかりやすいかと思います。

オブジェクト名は公開されていて、
以下のように対応しています。

[アイコン] = 'Image'

[ボタン]
mbYes    = 'Yes'
mbNo     = 'No'
mbOk     = 'OK'
mbCancel = 'Cancel'
mbAbort  = 'Abort'
mbRetry  = 'Retry'
mbIgnore = 'Ignore'
mbALL    = 'ALL'
(mbHelp   = 'Help' こいつはボタンを押してもメッセージを閉じない
  ヘルプを表示するイベントをこのボタンの OnClick に仕込むことも可能です)


バスク  2006-12-16 02:14:44  No: 24061

さらに、
ShowModal する前に ActiveControl を指定することで、
初期フォーカスを決定できます。

MessageDlg、MessageBox は デフォルト指定できないでしょ?
さらにボタンの文言も固定になってしまうので、

ぜひ、CreateMessageDialog を使ってカスタマイズしたメッセージボックス
を共通関数化しておくことをお勧めします。


かみづ  2006-12-16 06:16:55  No: 24062

>MessageDlg、MessageBox は デフォルト指定できないでしょ?

MessageDlgについては2006からデフォルト指定が可能です。


みんみん  2006-12-18 02:17:27  No: 24063

質問からは脱線いたしますが、
>アイコンはCreateMessageDialog で メッセージボックスを生成するときに指定するスタイルで決定されるので、後から変更しなくてもOKです。
>(mtError = 赤い× など)

それは知ってはいたのですが、
ダイアログ内のアイコンはTImageとして
任意のビットマップ、アイコンなどを任意のサイズで描画できるようです。
なので...

>Timage(component0]).Picture.Icon.Handle 
>                   :=Application.Icon.Handle;

今回の私の場合は赤い×マークの代わりに
アプリケーションのアイコンを使ってみたのです。


バスク  2006-12-18 18:15:47  No: 24064

>MessageDlgについては2006からデフォルト指定が可能です。
そうなんですか。そらしらんかったですわ。

>今回の私の場合は赤い×マークの代わりに
>アプリケーションのアイコンを使ってみたのです。
なるほど。
それも、CreateMessageDialogの利点ですな。


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

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






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