Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Повторяющийся код программы Добавлено: 06.03.08 19:21  

Автор вопроса:  Яр
Здравствуйте, люди добрые!
Это опять мы - неместные - просим у вас помощи: "Поможите кто чем может!"
У меня в программе постоянно дублируется один кусок кода, необходимого для перемещения формы за любое место. Из-за этого размер кода вырос о-го-го (код внизу). Как можно эту заразу оптимизировать, чтобы она не повторялась? Спасибочки всем огромное.

Код формы

Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = 1 Then
   ReleaseCapture
   SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
 End If
End Sub

Private Sub Label2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = 1 Then
   ReleaseCapture
   SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
 End If
End Sub

... и т.д.

Код модуля

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 Function ReleaseCapture Lib "user32" () As Long
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 GeniX



ICQ: 418811267 

Вопросов: 40
Ответов: 243
 Web-сайт: porrygatter.zx6.ru
 Профиль | | #1
Добавлено: 06.03.08 19:24
Вынести в модуль. Или прописать в sub xxx, которую можно вызвать call xxx.

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 06.03.08 19:41
Public Function F1 (ByVal bttn As Integer, ByVal wnd As Long)
   If bttn = 1 Then
      Call ReleaseCapture
      SendMessage (wnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&;)
   End If
End Function

Ответить

Номер ответа: 3
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #3 Добавлено: 06.03.08 21:46
Как вариант:
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = 1 Then
   ReleaseCapture
   SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
 End If
End Sub

Private Sub Label2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Label1_MouseDown(Button, Shift, X, Y)
End Sub

=D

Ответить

Номер ответа: 4
Автор ответа:
 Яр



Вопросов: 18
Ответов: 24
 Профиль | | #4 Добавлено: 06.03.08 21:58
Ребята, или я что-то не так делаю, или я такой тупой (в VB я не много понимаю), или не работают ваши предложения. Растолкуйте, пожалуйста!!!!

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 06.03.08 23:14
Кароче я предложил засунуть в модуль функцию(процедуру - правильнее) F1 и вызывать её везде где надо (Label1_MouseDown, Label2_MouseDown)
А ZagZag предложил код записать в Label1_MouseDown и вызывать эту процедуру.
Суть одна и та же (что интереснно я как-то раз пользовался вариантом именно ZagZag)

Ответить

Номер ответа: 6
Автор ответа:
 Яр



Вопросов: 18
Ответов: 24
 Профиль | | #6 Добавлено: 07.03.08 00:32
Всем-всем-всем спасибо!!!!!!!!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам