VB6でデスクトップ用の付箋紙アプリを作成したいのですが、
Formのタイトルバーを非表示にし、フォームサイズを可変できるようにし、
且つ、見た目をフラット(枠なし)に表示したいのですが、
実現できますでしょうか?
下記を試してみましたが、いずれも納得のいくようにいきません。
1.フォームのBorderStyleをなし
→見た目は理想どおりだが、フォームサイズの変更ができない。
2.ControlBoxをFalse フォームCaptionを空白にする フォームのBorderStyleを可変
→タイトルバーは非表示になるが、フォームの枠(?)のようなものが表示されてしまう。
どなたか参考意見をお願いいたします。
枠無しにした場合、サイズ変更機能は自力で実装することになるかと。
1について
自前でフォームサイズ変更させればできるのでは
2について
リージョンとか調べてみるといいかもしれない
>サイズ変更機能は自力で実装することになるかと。
>自前でフォームサイズ変更させればできるのでは
実際は、フォームにリッチテキストボックスを貼り付けて、
フォームリサイズイベントでフォームと同じ大きさに変更する処理に
するつもりなのですが、
リッチテキストボックスをユーザーが任意で変更できるようにすることって
可能なのでしょうか?
コマンドボタン押下等のイベントで、HeightとWidthを変更するのは
簡単だと思いますが、
コントロールの端にカーソルが当たると、マウスアイコンが変更し、
サイズが自由に変更できるイメージなのですが・・・。
API等を使用するのでしょうか?
>フォームリサイズイベントで
>コマンドボタン押下等のイベントで、HeightとWidthを変更するのは
簡単
何が違うんでしょうか?
フォームの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 = なし のような感じ
よろしくお願いします。
ヒント:フォームを掴んでドラッグして、ボタンを離した時にリサイズさせる
そのままコード進行してみては如何でしょう
ツイート | ![]() |