Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > подпрограммы и модули


Автор: Wedi 17.3.2019, 19:34
привет друзья!
есть код который я хочу "спрятать" в модуль
Код

'Module1:
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub ReleaseCapture Lib "User32" ()
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
 
Public Sub g_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
   Dim ReturnValue As Long
   If Button = 1 Then
      ReleaseCapture
      ReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
   End If
End Sub

можно ли и как вызвать подпрограмму g_MouseDown в Form1
не могу понять что делать с аргументами. как их указать?

Автор: _zorn_ 17.3.2019, 21:28
Видимо вы не туда обратились. Да и вообще VB - серьезно ? Беги от него, дорогой  smile 

Автор: Akina 18.3.2019, 08:31
Цитата(Wedi @  17.3.2019,  20:34 Найти цитируемый пост)
можно ли и как вызвать подпрограмму g_MouseDown в Form1

Код

Call g_MouseDown(передать правильные параметры)

Автор: Wedi 18.3.2019, 17:16
Akina, спасибо! мне уже объяснили что процедуры получающие события не могут переноситься в модуль
и "передать правильные параметры" не получится поскольку они постоянно меняются: координаты мыши, состояние кнопок и т.д.

Автор: Akina 19.3.2019, 07:26
Цитата(Wedi @  18.3.2019,  18:16 Найти цитируемый пост)
мне уже объяснили что процедуры получающие события не могут переноситься в модуль

Обработчики - да, не могут. А вот процедуры, которые этот обработчик вызывает - запросто.
Т.е. в модуле формы
Код

Public Sub g_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Call MySub(Button, Me.hwnd)
End Sub


а в обычном модуле
Код

Public Sub MySub(Button As Integer, hwnd As Long)
   If Button = 1 Then
      ReleaseCapture
      Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
   End If
End Sub

Дефиниции, поскольку Public, формально можно размещать и там, и там, хотя правильнее - там, где они используются, т.е. в обычном модуле (я лично вообще предпочитаю под Public-дефиниции делать отдельный модуль).
Цитата(Wedi @  18.3.2019,  18:16 Найти цитируемый пост)
"передать правильные параметры" не получится поскольку они постоянно меняются: координаты мыши, состояние кнопок и т.д.

То есть это - обработчик события MouseDown некоего контрола с именем "g"? но тогда при этом событии вызов процедуры выполняется автоматически, и с подстановкой правильных параметров - и я не понимаю, почему вообще мог возникнуть этот вопрос...

Автор: Wedi 19.3.2019, 14:00
Akina, "почему вообще мог возникнуть этот вопрос..."

потому что я думал что может быть есть лазейка
что-то вроде указателя который подскажет компилятору
что динамические аргументы можно не указывать и он передаст
управление системе в модуль. это же просто

Автор: Akina 19.3.2019, 15:40
Wedi, форма - это класс. Обработчик события класса, как и любой другой его компонент, обязан быть в модуле класса, ну хотя бы потому, что в противном случае утрачивается доступ к приватным определениям, константам и переменным уровня класса.

Хотя формальная лазейка есть - класс можно сабклассить...

Автор: Wedi 20.3.2019, 09:48
Akina,  в любом случае эта тема исчерпала себя и спасибо за помощь

а _zorn_ у, я отвечу что для моих целей vb6 хватает поскольку я не
программист а исследователь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)