
No.2ベストアンサー
- 回答日時:
Resizerについては分かりませんが
ResizerにEnabledプロパティはありますか?
あれば下記のようにResizeされた時に
Enabled=Falseされても改善されませんか?
Private Sub Form_Resize()
If Not Me.WindowState = vbMinimized Then
If Me.Width < '最小値' Then
Resizer.Enabled = False
Me.Width = '最小値'
End If
End If
End Sub
Resizerでサイズ制限が出来るのならその方が良いのですが。
ありがとうございます。
Resizerでは出来なかったのですが、
Me.enabled = false
を入れてできました。
ただし、他の方が作成した実現できているソースを見ると、
Form_Resizerには何も書かれていません。
でも、最小値でぴたりと止ります。
比較しても、、ResizerのHelpを見てもわかりませんでした…。
今回はこれで対応しました。
No.3
- 回答日時:
> Resizerでは出来なかったのですが、
> Me.enabled = false
> を入れてできました。
Me.Enabled = False にして、その後どうやってフォームを操作するので
しょうか? 何か技があるんですか?
ともあれ解決したなら良かったですね^^
> Form_Resizerには何も書かれていません。
サブクラス化によるサイズ制限のサンプルがありましたので、蛇足になり
ますが一応提示しておきます。お試しになる場合は不意に終了しない様に
くれぐれもご注意下さい。
' // 標準モジュール ------------------------------------------------------------
Option Explicit
' フォームのサイズ制限
Private Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" ( _
ByRef pDest As Any, _
ByRef pSrc As Any, _
ByVal iSize As Long)
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long
Private Const WM_GETMINMAXINFO = &H24
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Const GWL_WNDPROC = (-4)
Private PreWndProcAddress As Long
Private Limit_hWnd As Long
Private LimitSize As POINTAPI
Public Function WndProc( _
ByVal hwnd As Long, _
ByVal iMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim ret As Long
Dim MINMAX As MINMAXINFO
If iMsg = WM_GETMINMAXINFO And Limit_hWnd = hwnd Then
memcpy MINMAX, ByVal lParam, LenB(MINMAX)
With MINMAX
.ptMinTrackSize.x = LimitSize.x
.ptMinTrackSize.y = LimitSize.y
End With
memcpy ByVal lParam, MINMAX, LenB(MINMAX)
ret = 0&
Else
ret = CallWindowProc(PreWndProcAddress, hwnd, iMsg, wParam, lParam)
End If
WndProc = ret
End Function
Public Sub LimitStart( _
ByVal hwnd As Long, _
ByVal MinX As Long, _
ByVal MinY As Long)
LimitEnd
If hwnd <> 0 Then
LimitSize.x = MinX
LimitSize.y = MinY
Limit_hWnd = hwnd
PreWndProcAddress = GetWindowLong(hwnd, GWL_WNDPROC)
SetWindowLong hwnd, GWL_WNDPROC, AddressOf WndProc
End If
End Sub
Public Sub LimitEnd()
If Limit_hWnd <> 0 Then
SetWindowLong Limit_hWnd, GWL_WNDPROC, PreWndProcAddress
Limit_hWnd = 0
End If
End Sub
' // フォームモジュール ------------------------------------------------------
Private Sub Form_Load()
Dim MinX As Long, MaxX As Long
MinX = Me.Width / Screen.TwipsPerPixelX
MinY = Me.Height / Screen.TwipsPerPixelY
Call LimitStart(Me.hwnd, MinX, MinY)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
' 必ず最後に呼び出して下さい。
Call LimitEnd
End Sub
ありがとうございます。
Me.Enabled = False
にして、最小値を設定したらすぐにTrueに戻しています。
これで、ちらつきはなくなりました。
今回、サブクラス化は試していませんが、
時間が取れるときに、絶対試してみます。
今後のためにも。
ありがとうございました。
No.1
- 回答日時:
こんにちは。
Resizer というのは使ったことがありませんので分かりませんが、ドキュメントを
読めば少なくともその OCX で可能かどうかぐらいはわかるのでは?
VB では通常ご質問文にあるようなコードでフォームのサイズ制限をしますけど、
チラツキがどうしても気になるのであれば、サブクラス化するしかないと思います。
WM_GETMINMAXINFO + VB 辺りで ウェブ検索すればサンプルが見つかると思います。
あまりお勧めできませんが...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ユーザーフォームのテキストボ...
-
クリックイベントなのに、2回ク...
-
ACCESSのフォーム、開くんです...
-
ExcelVBAのユーザーフォームの...
-
(Excel+VBA)ユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
フォームウィンドウを最前面に...
-
タスクバーへアプリの常駐
-
ブックをCloseまたはQuitで閉じ...
-
C#で起動時のフォームを非表示...
-
Form_Load と Form_Activate の...
-
テキストボックス入力データの...
-
フォームの位置を取得したい
-
ACCESSキャンセル時の確認メッ...
-
C# 2010 printPreviewDialogの...
-
EXCEL ユーザーフォームのタイ...
-
Excel VBAで別のブックからユ...
-
Microsoft Formsの「個人情報や...
-
任意のフォームが表示されてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
エクセルVBAのフォームを最...
-
モーダルフォームとモードレス...
-
フォームウィンドウを最前面に...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
Hideについて(.NET)
-
Form_Load と Form_Activate の...
-
VBA(エクセル)のユーザー...
-
Accessで、一つのフォーム画面...
-
Excel VBA ユーザーフォーム 複...
-
コントロールの存在確認
-
VB.NETでフォームロード中のエ...
-
フォームを画面のど真ん中に表...
-
(Excel+VBA)ユーザーフォームの...
おすすめ情報