Pregunta

Tengo una vb6 formulario con un control ocx en él.El control ocx tiene un botón que quiero de prensa desde el código.¿Cómo puedo hacer esto?

Tengo:

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

pero no parece funcionar.

¿Fue útil?

Solución

Creo que el siguiente trabajo:

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

CommandButtons en realidad tiene dos funciones.Uno es el de costumbre, haga clic en el botón y el otro es un botón que actúa de manera similar a un CheckBox.El valor predeterminado de la propiedad de la CommandButton es en realidad el Value propiedad que indica si un botón se activa.Por la configuración de la propiedad, el Click se genera el evento.Esto se hace incluso si el botón no está catalogada como una ToggleButton y por lo tanto no cambia su estado.

Otros consejos

Si usted tiene acceso a la OCX código, puede exponer a los asociados de controlador de eventos y de invocar directamente.
No sé si un equivalente .Net Click() del Botón de método existía de nuevo en VB6 días

De pulsación de tecla también se puede utilizar sendmessage el envío de ambos keydown y keyup:

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

Este:

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

hace el trabajo.Totalmente intuitivo.Me gustaría esperar para lanzar un error ya que un bool no es válido CommandButton, pero es debido a la omisión de la propiedad de la cosa.

WM_LBUTTONDOWN sería un clic de ratón, lo que yo quiero es que haga clic en un botón (botón como en un hwnd botón, no un botón del ratón).

No tengo acceso a la fuente de la ocx (es la 3ª parte de control).Si lo hiciera, me gustaría exponer la función que quería llamar (el escritor original de la ocx debe tener expuesto).

¿Tiene usted acceso a la OCX código?Usted no debe realmente ser invocar directamente el clic de un botón.Es necesario refactorizar el código para que el OCX botón haga clic en el código llama a una función, por ejemplo,

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

Luego de su aplicación VB6, llamar directamente al FooBar método.Si usted no puede llamar directamente a las funciones de VB6 se puede envolver el FooBar() método con un mensaje de windows proc función, por ejemplo,

#define WM_FOOBAR WM_APP + 1

A continuación, utilice SendMessage en el VB6, como SendMessage(WM_FOOBAR, ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top