vb6 フォーム上のボタンをクリックするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/41089

  •  09-06-2019
  •  | 
  •  

質問

ocx コントロールを含む vb6 フォームがあります。ocx コントロールには、コードから押したいボタンがあります。どうすればいいでしょうか?

私は持っている:

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
SendMessage ocx.hwnd, WM_COMMAND, GetWindowLong(b.hwnd, GWL_ID), b.hwnd

しかし、うまくいかないようです。

役に立ちましたか?

解決

次のことがうまくいくと思います。

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True

CommandButtons には実際には 2 つの機能があります。1 つは通常のクリック ボタンで、もう 1 つはトグル ボタンで、 CheckBox. 。のデフォルトのプロパティ CommandButton 実際には Value ボタンが切り替わるかどうかを示すプロパティ。プロパティを設定することで、 Click イベントが発生します。これは、ボタンがスタイルされていない場合でも行われます。 ToggleButton したがって、その状態は変わりません。

他のヒント

OCX コードにアクセスできる場合は、関連するイベント ハンドラーを公開して、それを直接呼び出すことができます。
.Net Button の Click() メソッドと同等のメソッドが VB6 の時代に存在したかどうかはわかりません

キーを押す場合は、キーダウンとキーアップの両方を送信する sendmessage を使用することもできます。

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101
Const VK_SPACE = &H20

Private Sub cmdCommand1_Click()
    Dim b As CommandButton
    Set b = ocx.GetButton("btnPrint")
    SendMessage b.hWnd, WM_KEYDOWN, VK_SPACE, 0&
    SendMessage b.hWnd, WM_KEYUP, VK_SPACE, 0&
End Sub

これ:

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True

機能します。まったく直感的ではありません。ブール値は有効なコマンドボタンではないため、エラーがスローされることが予想されますが、これはデフォルトのプロパティによるものです。

WM_LBUTTONDOWN マウスクリックになりますが、私が欲しいのはボタンクリックです(マウスボタンではなく、hwndボタンのようなボタン)。

ocx のソースにアクセスできません (サードパーティのコントロールです)。そうした場合、呼び出したい関数を公開することになります (ocx の元の作成者がそれを公開するはずでした)。

OCX コードにアクセスできますか?実際には、ボタンのクリックを直接呼び出すべきではありません。OCX ボタンのクリック コードが関数を呼び出すようにコードをリファクタリングする必要があります。

CMyWindow::OnLButtonDown()
{
  this->FooBar();
}

次に、VB6 アプリから FooBar メソッドを直接呼び出します。VB6 から関数を直接呼び出すことができない場合は、FooBar() メソッドを Windows メッセージ proc 関数でラップできます。

#define WM_FOOBAR WM_APP + 1

次に、使用します SendMessage VB6では、次のように SendMessage(WM_FOOBAR, ...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top