Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2247 / 13645 ツリー ←次へ | 前へ→

【69027】メッセージボックスの文字サイズ 悩める老人 11/5/11(水) 7:59 質問[未読]
【69028】Re:メッセージボックスの文字サイズ とおりすがり 11/5/11(水) 9:09 回答[未読]
【69036】Re:メッセージボックスの文字サイズ 悩める老人 11/5/11(水) 17:34 お礼[未読]
【69030】Re:メッセージボックスの文字サイズ neptune 11/5/11(水) 10:41 回答[未読]
【69035】Re:メッセージボックスの文字サイズ Yuki 11/5/11(水) 16:07 発言[未読]
【69042】Re:メッセージボックスの文字サイズ neptune 11/5/11(水) 23:11 発言[未読]
【69119】Re:メッセージボックスの文字サイズ neptune 11/5/18(水) 22:42 発言[未読]
【69122】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 9:44 発言[未読]
【69124】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 10:29 発言[未読]
【69127】Re:メッセージボックスの文字サイズ neptune 11/5/19(木) 13:48 発言[未読]
【69164】Re:メッセージボックスの文字サイズ kumataka 11/5/22(日) 7:16 お礼[未読]
【69128】Re:メッセージボックスの文字サイズ neptune 11/5/19(木) 14:08 発言[未読]
【69129】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 15:33 発言[未読]
【69125】Re:メッセージボックスの文字サイズ 角田 11/5/19(木) 11:48 回答[未読]

【69027】メッセージボックスの文字サイズ
質問  悩める老人  - 11/5/11(水) 7:59 -

引用なし
パスワード
   早速ですが メッセージボックスの文字サイズの変更はどのようにするのでしょうか? ご教示ください。

【69028】Re:メッセージボックスの文字サイズ
回答  とおりすがり  - 11/5/11(水) 9:09 -

引用なし
パスワード
   デスクトップの何も無いところで、右クリックメニューのプロパティ、
デザインタブのところで変更できる。
しかし、ExcelのみならずOS全体が変更される。

それがいやなら、UserFormでMsgBox風の物を作成するか、出来合いの
アドインを利用するか。
ktMsgboxとかで検索。

【69030】Re:メッセージボックスの文字サイズ
回答  neptune  - 11/5/11(水) 10:41 -

引用なし
パスワード
   ▼悩める老人 さん:
>早速ですが メッセージボックスの文字サイズの変更はどのようにするのでしょうか? ご教示ください。
出来る出来ないを言えば、CBTフックを使えば恐らくできますが、
それはもうVBAの範疇を超えていて使うのはテスト、ご自分だけが使う
(要するにご自分で責任の終える範囲)以外ではで使うべきではないと私は思っています。

以下のソースにbuttonを取得して、buttonの文字列の大きさを変更してやる
ソースを追加することで出来るとは思います。・・・全部APIで、です。
なので結構なの知識とスキルが必要になります。

・・・buttonの取得はspy++、若しくはそれに類するもので見る事も出来たと思います。

Windows フック プロシージャを使用してメッセージ ボックスの位置をする方法
ht tp://support.microsoft.com/kb/180936/ja

なので、結論としてuserformで自作した方がよっぽど早いし簡単です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ちなみに紹介したサイトのソースを実験するなら、

万一WinProc2の中でエラーが出たらExcelは落ちるし、下手すればOSさえ
もこける可能性は否定できません。
下記をお読みください。
[VB] AddressOf を使用したウィンドウ メッセージのフック処理
ht tp://support.microsoft.com/kb/168795/ja

【69035】Re:メッセージボックスの文字サイズ
発言  Yuki  - 11/5/11(水) 16:07 -

引用なし
パスワード
   ▼neptune さん:
>
>以下のソースにbuttonを取得して、buttonの文字列の大きさを変更してやる
>ソースを追加することで出来るとは思います。・・・全部APIで、です。
>なので結構なの知識とスキルが必要になります。
>
>・・・buttonの取得はspy++、若しくはそれに類するもので見る事も出来たと思います。
>
>Windows フック プロシージャを使用してメッセージ ボックスの位置をする方法
>ht tp://support.microsoft.com/kb/180936/ja
>
>[VB] AddressOf を使用したウィンドウ メッセージのフック処理
>ht tp://support.microsoft.com/kb/168795/ja

こんにちは。neptune さん:
過去にトライして挫折しました。
いいところまでいくのですが思い通りにならなくて
位置とかフォントの色は割合簡単でしたが文字の大きさは駄目でした。
暇があったらサイド挑戦したいです。

悩める老人 さん横から失礼しました。

【69036】Re:メッセージボックスの文字サイズ
お礼  悩める老人  - 11/5/11(水) 17:34 -

引用なし
パスワード
   とおりすがり さん
Neptuneさん Yuki さん
早速のご回答ありがとうございました。御礼申し上げます。

【69042】Re:メッセージボックスの文字サイズ
発言  neptune  - 11/5/11(水) 23:11 -

引用なし
パスワード
   ▼Yuki さん:
解決後ですがお邪魔します。

>過去にトライして挫折しました。
私もMessageBoxでは位置くらいしかやったことありません。
で、好きなようにカスタマイズするにはあまりにも手間がかかる(スキル
不足のせいですけど)のでバカらしくなって結局自作した事があります。

今は知りませんけど昔はプロもVB6の時代にはカスタムActiveXを作って
使いまわせるようにする方もいたようですね。

>位置とかフォントの色は割合簡単でしたが文字の大きさは駄目でした。
>暇があったらサイド挑戦したいです。
コントロールの文字の大きさは昔やったことがあるのですが、完全に
忘れています。・・・いつまでたっても初心者のCですけど。。
私も根性が出たらやってみようかな。Cで出来たらVBでも出来るでしょ。

お邪魔しました。

【69119】Re:メッセージボックスの文字サイズ
発言  neptune  - 11/5/18(水) 22:42 -

引用なし
パスワード
   ▼Yuki さん:
>いいところまでいくのですが思い通りにならなくて
>位置とかフォントの色は割合簡単でしたが文字の大きさは駄目でした。
>暇があったらサイド挑戦したいです。
Cでですが、文字の大きさやってみました。文字の大きさは出来るみたいです。
良かったらUP出来ますよ。

背景色についてはオーナードローしなくてはならないようでものすごく
面倒なので背景色もやるならやはりuserformで自作ですね。

【69122】Re:メッセージボックスの文字サイズ
発言  Yuki E-MAIL  - 11/5/19(木) 9:44 -

引用なし
パスワード
   ▼neptune さん:
>Cでですが、文字の大きさやってみました。文字の大きさは出来るみたいです。
>良かったらUP出来ますよ。
>
>背景色についてはオーナードローしなくてはならないようでものすごく
>面倒なので背景色もやるならやはりuserformで自作ですね。
こんにちは。
私も再度挑戦中です。
でも、文字そのものは大きく出来るんですが
MsgBoxの大きさがまだ確定できないです。
>良かったらUP出来ますよ。
お願いします。

【69124】Re:メッセージボックスの文字サイズ
発言  Yuki E-MAIL  - 11/5/19(木) 10:29 -

引用なし
パスワード
   ▼neptune さん:
>>位置とかフォントの色は割合簡単でしたが文字の大きさは駄目でした。
>>暇があったらサイド挑戦したいです。
>Cでですが、文字の大きさやってみました。文字の大きさは出来るみたいです。
>良かったらUP出来ますよ。
>
>背景色についてはオーナードローしなくてはならないようでものすごく
>面倒なので背景色もやるならやはりuserformで自作ですね。
 ://www.kami.cocona.jp/Support/MsgBoxExA.xls
にUPしておきます。
作成中なので汚いですが宜しかったら見て下さい。

【69125】Re:メッセージボックスの文字サイズ
回答  角田  - 11/5/19(木) 11:48 -

引用なし
パスワード
   とおりすがりさんのレスで紹介してくれてますけど、
私の ktMsgBoxAddin でできますよ。

文字色でも、文字サイズでも、背景色でも何でもアリ!
ウィンドウサイズも自動調整されます。

単体アドイン
://www.h3.dion.ne.jp/~sakatsu/ktMsgBox_Series.htm

kt関数アドインにも組み込まれてます。
://www.h3.dion.ne.jp/~sakatsu/ktfunc_main.htm

【69127】Re:メッセージボックスの文字サイズ
発言  neptune  - 11/5/19(木) 13:48 -

引用なし
パスワード
   ▼Yuki さん:
参考になるかならないかはわかりませんが、全部は長くなるので
関係部分だけUPしておきます。
なお、中央表示の部分はどこかから拾ってきました。(どこか忘れました^ ^)

///////////////CALLBACK WndProcの該当部分だけ///////////////
    case WM_COMMAND:
        wmId  = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // 選択されたメニューの解析:

        switch (wmId)
        {
        case IDC_BUTTON1:
            int iret;
            iret = ShowMessageBox(hWnd);

            if (iret == IDOK){
                MessageBox(hOwner,L"OKが押されました。",L"文字列の大きさ変更テスト",MB_OK | MB_ICONEXCLAMATION);
            }
            break;
/////////////////////////////////////////////////////////////////

////////////////////ShowMessageBox 関数////////////////////////////////
INT ShowMessageBox(HWND hWnd){
    INT iRet;
    
    hHook = SetWindowsHookEx(WH_CBT,&CBTHookProc,hInst,GetCurrentThreadId());
    iRet = MessageBox(hWnd,L"移動テスト",L"MessageBoxSample",MB_OK);
    return iRet;
}
////////////////////////////////////////////////////////

////////////////CBTHook/////////////////////////////////////
//hFont ,hOwner は広域変数としている。
LRESULT CALLBACK CBTHookProc(INT nCode, WPARAM wParam, LPARAM lParam)
{
    RECT rc,rectMsg;
    HWND hbutton;

    switch (nCode)
    {
        case HCBT_ACTIVATE:
            {
          //'Get the coordinates of the form and the message box so that
      //'you can determine where the center of the form is located
      GetWindowRect(hOwner, &rc);
      GetWindowRect(HWND(wParam), &rectMsg);

            int x,y;
      x = (rc.left + (rc.right - rc.left) / 2) -
        ((rectMsg.right - rectMsg.left) / 2);
      y = (rc.top + (rc.bottom - rc.top) / 2) -
        ((rectMsg.bottom - rectMsg.top) / 2);
      //Position the msgbox
      SetWindowPos(HWND(wParam), 0, x, y, 0, 0,
             SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);

            ///テキストの変更(OKボタンのみのテスト)///
            //ボタンの取得
            hbutton = FindWindowEx(HWND(wParam),NULL,L"BUTTON",L"OK");
            if (hbutton!=NULL)
            {
                SendMessage(hbutton,WM_SETTEXT,NULL,(LPARAM)L"良し");

                //フォントを変更してみる
                //CreateNewFontSize(hbutton,12,L"MS明朝");
                CreateNewFontSize(hbutton,12,L"HG行書体");

                //背景色も変更してみる。 オーナードロー?・・・面倒なのでこれは止めた。

            }
      //Release the CBT hook
      UnhookWindowsHookEx(hHook);
          break;
            }
        case HCBT_DESTROYWND:
            {
                DeleteObject( hFont );  // 作成した論理フォントを削除する
            }
        default:
            {
                CallNextHookEx(hHook, nCode, wParam, lParam);
                break;
            }        
    }
    return FALSE;
}

//////////////////////////////////////////////////////
//-------------------------------------------------
//関数名:CreateNewFontSize
//--------------------------------------------------
//新しいフォントサイズを作成してコントロールのフォントサイズを変更する
//フォント名の変更はまだしてない。
//---------------------------------------------------
//引数
//hbutton(HWND)    :ボタンのHWND
//PointSize        :フォントサイズ。単位はポイント
//fname       :フォント名
//////////////////////////////////////////////////////////
BOOL CreateNewFontSize(HWND hbutton,int PointSize,WCHAR *fname)
{
    LOGFONT lf;
    HGDIOBJ hGdiobj;
    int objsize;
    int iHeight;
    HFONT hFont;

    HDC hDC = GetDC(hbutton);
    iHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
    //フォントのハンドル取得
    hGdiobj = GetCurrentObject(hDC,OBJ_FONT);
    ReleaseDC(hbutton,hDC);

    //初期化
    ZeroMemory( &lf, sizeof(lf) ); 

    //LOGFONT構造体の取得、変更
    objsize = GetObject(hGdiobj,sizeof(lf),(LPVOID)&lf);    //LOGFONT構造体の取得
    lf.lfHeight = iHeight;            //フォントの大きさ変更    
    lf.lfWidth = 0;
    wcscpy(lf.lfFaceName,fname);    //フォント変更
    //フォント作成    
    hFont = CreateFontIndirect(&lf);

   int iret = SendMessage(hbutton, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);
    
    return TRUE;
}

【69128】Re:メッセージボックスの文字サイズ
発言  neptune  - 11/5/19(木) 14:08 -

引用なし
パスワード
   ▼Yuki さん:

すみません。
1行の字数制限があるみたいで、インデントが変になってしまいました。

>作成中なので汚いですが宜しかったら見て下さい。
頑張ってますね。
で、報告です。
まぁボタンを押しても害はないだろうと思って
最初に立ち上がってくるformの左上ボタンをclickしたら、新たに表示
されたmsgbox?が画面からはみ出て閉じることが出来ず、往生しました。
作成途中という事をすっかり忘れてました。^ ^;;

ちなみにディスプレイは昔からの1280*1024で横長の奴ではありません。
ついでに書くとwin7 32bit Office2007です。

で、話は元に戻りますが、やってることは殆ど同じなので参考にはならない
とは思いますが、フォントサイズの算出方法は違いますね。

【69129】Re:メッセージボックスの文字サイズ
発言  Yuki E-MAIL  - 11/5/19(木) 15:33 -

引用なし
パスワード
   ▼neptune さん:
>1行の字数制限があるみたいで、インデントが変になってしまいました。
>まぁボタンを押しても害はないだろうと思って
>最初に立ち上がってくるformの左上ボタンをclickしたら、新たに表示
>されたmsgbox?が画面からはみ出て閉じることが出来ず、往生しました。
>作成途中という事をすっかり忘れてました。^ ^;;
>ちなみにディスプレイは昔からの1280*1024で横長の奴ではありません。
>ついでに書くとwin7 32bit Office2007です。

解像度が 1400 X 1050 だったことをすっかり忘れていました。

>で、話は元に戻りますが、やってることは殆ど同じなので参考にはならない
>とは思いますが、フォントサイズの算出方法は違いますね。

C言語はあんまり得意ではないのですがなんとか解読してみます。
有難う御座います。

【69164】Re:メッセージボックスの文字サイズ
お礼  kumataka  - 11/5/22(日) 7:16 -

引用なし
パスワード
   ▼neptune さん:

Win64阪Detoursは高価なので、
64bit環境に移行したら、他アプリのフォント変更に活用させて頂きたいと思います。
ありがとうございました。

※ フックでなくて、WriteProcessMemory案で考えています。
ht tp://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/bf121232-1499-49bb-993f-ccc37b4d9401/

2247 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free