- ベストアンサー
クリックした場所にFormを開く
教えてください! VBでクリックした場所にFormを開くには、どうしたらいいですか? Private Sub Command3_Click() Frm.Show End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、じゃんぬねっと です。 > いわゆるポップアップメニューのように、 > 「ボタンクリックしたとき、そのときマウスがいる場所を基点にフォームを開きたい」 > のです。 なるほど、CommandButton のクリックイベントだったので、少々勘違いしていました。 ポップアップとすると、マウス ポインタの位置を左上基点で開くということになるので、以下のような感じになるでしょう。 Option Explicit Private Declare Function GetCursorPos Lib "USER32.DLL" (ByRef lpPoint As Point) As Long Private Type Point X As Long Y As Long End Type Private Sub Form_Click() Dim lpPoint As Point Call GetCursorPos(lpPoint) Dim frm1 As Form1 Set frm1 = New Form1 frm1.Left = lpPoint.X * Screen.TwipsPerPixelX frm1.Top = lpPoint.Y * Screen.TwipsPerPixelY Call frm1.Show(vbModeless, Me) End Sub
その他の回答 (2)
すみません少し確認させて下さい VBのバージョンはいくつでしょうか? マウスクリックですが、フォーム上でマウスをクリックすると 別のフォームが開く? 若しくはデスクトップなどフォーム以外の場所でマウスを クリックするとフォームが開く? 若しくは両方?
お礼
じゃんぬさまのご回答により解決することができました。 ありがとうございました。
- JeanneNet
- ベストアンサー率48% (100/208)
こんにちは、じゃんぬねっと です。 > VBでクリックした場所にFormを開くには、どうしたらいいですか? 「クリックした場所」だけですと、厳密な場所はわかりません。 よって以下のようなサンプルにしかなりませんでしたが、 これを応用して望む形にできるのではないでしょうか? Private Sub Command1_Click() Dim frm1 As Form1 Set frm1 = New Form1 frm1.Left = Me.Command1.Left + Me.Command1.Width frm1.Top = Me.Command1.Top + Me.Command1.Height Call frm1.Show(vbModal, Me) End Sub
お礼
じゃんぬねっとさま 回答ありがとうございます。言葉足らずで申し訳ありませんでした。 いわゆるポップアップメニューのように、 「ボタンクリックしたとき、そのときマウスがいる場所を基点にフォームを開きたい」 のです。 Windowsの画面上の座標がわかればできそうなので・・・ 「ボタンクリックしたときのWindows画面上の位置」 を取得する方法を探しています。
お礼
まさにやりたい動きが実現できました!! ありがとうございました!!! APIを使うんですね・・・