フォームの右下にグリップを表示するには?

解決


takana  URL  2009-01-10 04:49:23  No: 33088  IP: [192.*.*.*]

フォームの右下にフォームのサイズを変更するための
グリップを表示するにはWin32APIでどうすれば良いですか?

実現したいことは、ExcelのVBAで作成したフォームを
サイズ変更可能にしたいのです。

編集    削除
VCLならTStatusBar.Size  2009-01-10 05:12:58  No: 33089  IP: [192.*.*.*]

それはDelphiの質問でしょうか?

> Win32APIでどうすれば良いですか?
サイズグリップはステータスバーの一部なので
MSDNで該当するスタイルを調べてください。
ウィンドウに水平・垂直両方のスクロールバーを付けるのでも良かったかも。

もっとも、グリップは単に見かけ上の手がかりを与えるもので
実際にウィンドウがサイズ可変かどうかとは無関係ですが。

編集    削除
takana  2009-01-10 06:01:30  No: 33090  IP: [192.*.*.*]

>それはDelphiの質問でしょうか?
実現したいのはDelphiではないのですが、
Delphiのフォームで可能であれば、Delphiのソースを参考にして
何か分かるかと思って質問いたしました。

>もっとも、グリップは単に見かけ上の手がかりを与えるもので
>実際にウィンドウがサイズ可変かどうかとは無関係ですが。
ウィンドウサイズを可変にする方法は分かっています。
Excelの「ファイルを開く」ダイアログのように、ステータスバーを
使わずに、直接フォームにグリップをつけることは出来ないので
しょうか?

編集    削除
monaa  2009-01-10 06:11:08  No: 33091  IP: [192.*.*.*]

DelphiだとVCLライブラリり便利なコンポーネントTStatusBarがあるのでそれを使用します。
クラスから作成するならmsctls_statusbar32ですが、
Delphiユーザーは先ずやらないと思います。
VBAについてはわかりません。

編集    削除
monaa  2009-01-10 06:17:30  No: 33092  IP: [192.*.*.*]

レスついてたんですね
ExcelのダイアログをSpy++でみると
クラス名  ScrollBar
クラススタイル  0000408B
ウィンドウスタイル  56020014
拡張スタイル  00000000
だそうです。ちょっと試してみます

編集    削除
monaa  2009-01-10 06:27:03  No: 33093  IP: [192.*.*.*]

確認しました。
procedure TForm1.Button1Click(Sender: TObject);
var
 hScroll:HWND;
begin
 hScroll :=CreateWindow('SCROLLBAR',
                     '',
                     $56020014,
                     0,0,20,20,
                     Handle,
                     1001,
                     hInstance,
                     nil);
end;

編集    削除
takana  2009-01-10 07:29:15  No: 33094  IP: [192.*.*.*]

やりたいことは、EXCELのアドインで以下のようなツールを作成しようとしています。

セルに長文を入力する時に、ツールを呼び出すと入力支援のエディタが起動して
セルに入力したい文字列をそのエディタを使用して入力させようとしています。

上で述べた入力支援のエディタをVBAのフォームで作成し、VBAのテキストボックスで
入力させようとしています。
つまり、すべてVBAで記述したいのです。

そこで調べた結果フォームのサイズ変更をさせるには、以下のコードで可能だと分かりました。

Private Sub UserForm_Initialize()
    Dim hwnd As Long
    Dim lngOffset As Long
    hwnd = FindWindow("ThunderDFrame", Me.Caption)
    lngOffset = GetWindowLong(hwnd, GWL_STYLE)
    Call SetWindowLong(hwnd, GWL_STYLE, lngOffset Xor WS_THICKFRAME Xor &H30000)
End Sub

その延長で、SetWindowLong()関数の第3引数に何らかのスタイルを渡すと、グリップが出たりは
しないかなぁ?とか思ったのですが。

やりたかったのはこんな感じです
http://www.geocities.jp/teamhasebe/download/compnent/thsizgrp/index.htm
サイトのソースを見るかぎり、無理そうです。。

編集    削除
だから  2009-01-10 08:47:10  No: 33095  IP: [192.*.*.*]

ここはDelphiQ&Aなんだけど?
場違いな質問だってわかってる?

編集    削除
標準的なウィンドウでは  2009-01-10 08:48:02  No: 33096  IP: [192.*.*.*]

上でもちょっと触れましたが、リサイズ可能なオーバーラップウィンドウの場合
水平・垂直両方のスクロールバーがあれば自動的にグリップが付きます。
WS_HSCROLL+WS_VSCROLLは試してみましたか?

スクロールバーは欲しくないということだったら、
後はDrawFrameControlで自前で描くくらいですね。
(引用したソースでやっているのがそれ)

編集    削除
takana  2009-01-10 19:48:06  No: 33097  IP: [192.*.*.*]

スクロールバーもステータスバーもなしで、フォームに直接
やりたかったのですが、自前で描かなきゃならないとなるとお手上げです。

どうもありがとうございました。

編集    削除
Fusa  2009-01-16 06:38:53  No: 33098  IP: [192.*.*.*]

書いてみました。

元質問とはだいぶ違うんですが
たぶんDelphiの普通の質問なら、これで解決すると思う。

Formにサイズグリップを描画する
http://delfusa.main.jp/delfusafloor/technic/technic/092_FormSizeGrip.html

編集    削除