枠なしフラットなフォームを作成するには?


ハドキング  2007-10-20 02:02:36  No: 137896

VB6でデスクトップ用の付箋紙アプリを作成したいのですが、
Formのタイトルバーを非表示にし、フォームサイズを可変できるようにし、
且つ、見た目をフラット(枠なし)に表示したいのですが、
実現できますでしょうか?

下記を試してみましたが、いずれも納得のいくようにいきません。

1.フォームのBorderStyleをなし
    →見た目は理想どおりだが、フォームサイズの変更ができない。

2.ControlBoxをFalse  フォームCaptionを空白にする  フォームのBorderStyleを可変
    →タイトルバーは非表示になるが、フォームの枠(?)のようなものが表示されてしまう。

どなたか参考意見をお願いいたします。


魔界の仮面弁士  2007-10-20 02:07:21  No: 137897

枠無しにした場合、サイズ変更機能は自力で実装することになるかと。


通ってみた  2007-10-20 02:08:44  No: 137898

1について
自前でフォームサイズ変更させればできるのでは

2について
リージョンとか調べてみるといいかもしれない


ハドキング  2007-10-20 02:20:19  No: 137899

>サイズ変更機能は自力で実装することになるかと。
>自前でフォームサイズ変更させればできるのでは

実際は、フォームにリッチテキストボックスを貼り付けて、
フォームリサイズイベントでフォームと同じ大きさに変更する処理に
するつもりなのですが、
リッチテキストボックスをユーザーが任意で変更できるようにすることって
可能なのでしょうか?
コマンドボタン押下等のイベントで、HeightとWidthを変更するのは
簡単だと思いますが、
コントロールの端にカーソルが当たると、マウスアイコンが変更し、
サイズが自由に変更できるイメージなのですが・・・。

API等を使用するのでしょうか?


通ってみた  2007-10-20 06:33:42  No: 137900

>フォームリサイズイベントで

>コマンドボタン押下等のイベントで、HeightとWidthを変更するのは
簡単

何が違うんでしょうか?


ハドキング  2007-10-22 21:01:56  No: 137901

フォームのBorderStyleをなしにした場合、フォームリサイズはできないと
認識しております。

>コマンドボタン押下等のイベントで、HeightとWidthを変更するのは簡単
なので、この発言は、あくまでなにかしらのイベントの中で、
Me.Height=YY:Me.Width=XX  と記述するとリサイズはできると思いますが、
PG実行時に自由にリサイズできるというのが理想系です。

そこでですが、フォームのBorderStyleをなしにした場合、
無理やりリサイズ可にするコードを書いてみましたが、
結局Borderを保持するように描画されてしまいます・・・。

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                        (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                        (ByVal hWnd As Long, ByVal nIndex As Long, _
                         ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
                        (ByVal hWnd As Long, _
                         ByVal hWndInsertAfter As Long, _
                         ByVal X As Long, ByVal Y As Long, _
                         ByVal cx As Long, ByVal cy As Long, _
                         ByVal wFlags As Long) As Long
Private Const GWL_STYLE = (-16&)        'ウィンドウスタイルを取得
Private Const SWP_NOSIZE = &H1&         '現在のサイズを維持
Private Const SWP_NOMOVE = &H2&         '現在の位置を維持
Private Const SWP_NOZORDER = &H4&       'Zオーダーを指定しない
Private Const SWP_DRAWFRAME = &H20&     'ウィンドウを囲む枠を描画
Private Const WS_THICKFRAME = &H40000   'リサイズ可能な枠線を持つ

Private Sub Form_Load()

    Dim lngWindowOldStyle     As Long
    Dim lngWindowNewStyle     As Long
    Dim lngWin32APIResultCode As Long
    
    'リサイズ可にする
    With Form1
        ' ウィンドウスタイルを取得
        lngWindowOldStyle = GetWindowLong(.hWnd, GWL_STYLE)
        ' 新しいウィンドウスタイルを指定
        lngWindowNewStyle = lngWindowOldStyle Or WS_THICKFRAME
        ' 新しいウィンドウスタイルを設定
        lngWin32APIResultCode = SetWindowLong(.hWnd, GWL_STYLE, _
                                              lngWindowNewStyle)
        ' 新しいウィンドウスタイルを適用
        lngWin32APIResultCode = SetWindowPos(.hWnd, 0, 0, 0, 0, 0, _
                                             SWP_NOSIZE Or SWP_NOMOVE Or _
                                             SWP_NOZORDER Or SWP_DRAWFRAME)
    End With

End Sub

※参考URL
ttp://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200303/03030010.txt

何か方法はありますでしょうか?

やりたいことを整理しますと、
1.プログラム実行時にフォームサイズの変更は可
2.フォームの見た目はBorderStyle = なし のような感じ

よろしくお願いします。


通ってみた  2007-10-23 06:15:38  No: 137902

ヒント:フォームを掴んでドラッグして、ボタンを離した時にリサイズさせる

そのままコード進行してみては如何でしょう


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

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






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