• ベストアンサー

VB6でマウス位置の取得

VB6でマウス位置の取得 VisualBasic6(SP6)でソフトを作ってますが、以下のことは可能でしょうか。 テキストボックス(MaitiLine=True)の時、マウス位置が何行目にあるか判定したい。 やり方を教授願えないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Formの中にText1とLabel1が必要です。 Option Explicit Private Type POINTAPI   X As Long   Y As Long End Type Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Private Const EM_GETFIRSTVISIBLELINE  As Long = &HCE Private Const EM_GETLINECOUNT      As Long = &HBA '一文字の高さ Private m_lngChrH  As Long Private Sub Form_Load()   '画面単位をピクセルとする   Me.ScaleMode = vbPixels   'ダミーラベル   With Me.Label1     .Visible = False     .AutoSize = True          'テキストボックスと書式を統一     .FontName = Me.Text1.FontName     .FontBold = Me.Text1.FontBold     .FontItalic = Me.Text1.FontItalic     .FontSize = Me.Text1.FontSize          '1文字の高さを取得する     .Caption = "あ"     m_lngChrH = .Height   End With End Sub Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)   Dim l_strMsg  As String   Dim l_pnt  As POINTAPI      'カーソル座標の取得   Call GetCursorPos(l_pnt)   Call ScreenToClient(Me.Text1.hwnd, l_pnt)   l_strMsg = "X:[" & l_pnt.X & "] Y:[" & l_pnt.Y & "] "      '行数を取得   Dim l_lngRowCount As Long   l_lngRowCount = SendMessage(ByVal Me.Text1.hwnd, ByVal EM_GETLINECOUNT, 0, 0)        'スクロール行数の取得   Dim l_lngScroll As Long   l_lngScroll = SendMessage(ByVal Me.Text1.hwnd, ByVal EM_GETFIRSTVISIBLELINE, 0, 0)      '表示上の高さ   Dim l_lngDispH As Long   l_lngDispH = (l_lngRowCount - l_lngScroll) * m_lngChrH      '行の存在しないY座標であれば未処理   If l_lngDispH < l_pnt.Y Then     l_strMsg = l_strMsg & " 該当なし"          Me.Caption = l_strMsg     Exit Sub   End If      '画面上の行番号   Dim l_lngRowDisp As Long   l_lngRowDisp = ((l_pnt.Y - 1) \ m_lngChrH + 1)      'スクロール分を加算   Dim l_lngRow  As Long   l_lngRow = l_lngRowDisp + l_lngScroll      l_strMsg = l_strMsg & " " & l_lngRow & "行目"   Me.Caption = l_strMsg End Sub

cad_bigin
質問者

お礼

早速の回答をありがとうございます。 うまくいきました。 今後ともお願いします。

関連するQ&A

  • テキストボックスのカーソル位置の取得・設定方法

    VisualBasic Ver.6 SP5 を使用しています。 質問タイトルのとおり、テキストボックスコントロールのカーソル位置を取得したり、設定したりすることは可能でしょうか? 調べてもわかりませんでした。 どなたかご教授ください。 よろしくお願い申し上げます。

  • テキスト表示位置を取得するには

    JavaScriptでテキストファイルの表示位置を取得する方法はあるのでしょうか? 行いたい事は以下の通りです。 テキストA  ・・・ 【説明画像】 ※テキストAをクリックすると同じ行に説明画像が出るようにしたいと思っています。 <div id="textA">テキストA</div> でid="textA"の「absoluteでの高さ」を取得できれば幸いです。(テキストA以外に色々な場所にテキストを配置していますので、そのテキストからも同様の事を行いたいと考えています) 色々考えたのですが、マウスでのイベントが発生したときの位置から取得すると微妙にテキストAの位置と説明画像の高さがあわなくなってしまいますので、このような質問をさせていただいています。 ご存知の方、ご教授ください。

  • VBからエクセルのテキストボックスの名称を取得したい

    VB6.0 SP5 WIN2000 で開発しています。 エクセルのシートに複数のテキストボックスがあります。 そのテキストボックスの名称や数は解らない前提で そのテキストボックスの名称(”テキスト 1”などの)を すべてVBから取得したいのですが、 解る方がいましたら教えてほしいのですが よろしくお願いします。

  • [VB6]指定されたファイルまでのパスを取得

    Microsoft VisualBasic 6.0(SP6)を使用しています。 例えばテキストボックスに、ユーザが任意のファイル名を入力します。 そこで入力されたファイルまでのパスを取得して、 変数「test」に代入しFunctionに引き渡すというような処理をしたく思っています。 実際にこのような処理は可能でしょうか? なにか良い知恵があればご教授お願い致します。

  • VBのグリッドにてマウスクリックでセル位置を正確に取得したい

    Visual BASIC でアクティブコンポーネントのグリッド(表)を使用しています。 ●グリッドのセルをマウスでクリックした時に、そのセルの列と行の位置番号を 正確に取得したいのですが、1列ある見出し列(行)をクリックしても 1(本来は 0)が、最初のデータ列(行)をクリックしても 1が返り、同じため正しく処理できません。(データのセルは正しく番号が取得できます。) どうしたら、クリックしたセルが見出し列(行)かどうか判別できますか? ●また、マウスをドラッグして複数のセルの範囲を取得したいのですがマウスDown と マウスUp イベントで列(行)番号を取得してもどちらも、マウスDown 時の値が返り、範囲となっていません。どうしたら、範囲を認識できますか。 分かるかたがおられたら教えてください。 (片方でも結構です。) Visual BASIC は Version 5 です。

  • テキストボックスに表示された行の番号を取得したい

    VB.NETで簡単なテキストエディタを作っています。 テキストボックスをフォームに張り付けることにより、画面表示及び入力は出来るようになりました。それで、ほかのエディタ(秀丸など)のように、カーソルが、ある行にきたとき、その行番号を画面の下のほうに表示しようと考えています。そのため、まず、カーソルが位置づけられている行の行番号を取得したいのですが、その方法がわかりません。テキストボックスのプロパティ、メソッドを探したのですが、そのようなものは見あたりませんでした。どなたかご存じの方おりましたら、ご教授ください。

  • VB で、テキストボックスをコピーする方法 {至急お願いいたします}

    VB で、テキストボックスをコピーする方法 {至急お願いいたします} 今、VisualBasic(以下、VB) で、ソフトを作っていますが、テキストボックスの中身をクリップボードにコピーしたいです コピーしたいのは、 textbox9です。 clip.SetDataObject(TextBox1.Text) でやってみるとエラーを起こしてしまいます・・・ どうすると、テキストボックスの中身をコピーできるでしょうか? 尚、現在、VBの2008無料版と2010の無料版でやっています メインは、2010ですので・・・

  • VB2008で曜日を取得する方法

    VB2008初心者ですがよろしいでしょうか 曜日の取得方法について教えて下さい ユーザーフォーム上の テキストボックスに、任意の生年月日を 入力し、ボタンをクリックした時に、生年月日 の曜日を取得したいのですが、可能でしょうか WeekdayName関数を使えばできるような感じですが 使い方が分かりません よろしくお願いします 1.テキストボックスに   2009-08-13   と入力しボタンをクリックする 2.メッセージボックスに   曜日を表示する

  • ピクチャボックス内の線を選択(VB6)

    VisualBasic6.0に関する質問です. ピクチャボックス内にグラフィック描画を行い, ある線や丸のみをマウスで選択できるようにしたいと考えています. そのグラフィックがピクチャボックス内に位置する領域を記憶しておき マウスの位置がそこにきたときのみイベントを起こすという 流れで出来そうな気はしているのですが,もしやもっと 簡単な方法がVBの機能で備わっているのでは,と考えていたりします. (領域計算が面倒くさいなぁと・・・) もし,そういった機能,もしくはより簡単な方法をご存知の方が おられましたら,どうぞお教えください. よろしくお願いいたします.

  • VBで他のアプリケーションを操作する

    VBを使って、たとえばブラウザや適当なアプリケーションのテキストボックスに文字を書いて検索ボタンを押すことはできますか。 ブラウザなどは立ち上げておいて、最大化してテキストボックスの位置がわかっているものとして構いません。 マウスの位置を動かして、ウインドウをクリックして(VBのフォーカスは失われる)、文字列を送り込んで、ボタンを押すということができるのでしょうか。 もちろんVBのFormの中では個々の操作ができることはわかっています。 まるで人が操作しているかのように他のアプリケーションを間接的に操作できるかどうかを教えてください。

専門家に質問してみよう