| Visual Basic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Прием сообщений в версиях до VB6 был вовсе невозможен с помощью стандартных средств языка. Дело в том, что для этого нужна API-функция SetWindowLong, являющаяся callback-функцией (т.е. она требует передачи ей в качестве одного из параметров указателя на другую функцию), а в Visual Basic невозможно было получить указатель на функцию. С приходом новой версии Visual Basic 6 все изменилось. Теперь VB имеет в своем арсенале оператор AddressOf для получения указателей, но с большими ограничениями: можно получить указатель на функцию расположенную только в стандартном модуле, Вы никогда не сможете получить указатель на объект и т.д. Меня, да и многих других программистов, этот оператор не вполне устраивает, ввиду этих ограничений, а также проблем, связанных с отладкой программы, но лучше такой оператор, чем ничего. Public OldWndProc as Long 'переменная для хранения указателя на старую оконную процедуру Собственная же процедура WindowProc может, в общем случае, выглядеть так (поместите этот код в стандартный модуль!): Private Const WM_MENUSELECT = &H11F |
|
|
|
см. http://www.entechtaiwan.com/tools.htm О работе с LPT-портами и другой аппаратурой в Visual Basic статья |
|
|
|
|
Config.vb Imports System.Xml.Serialization Public Class Config Public text1 As String = "" Public text2 As String = "" End Class 'экземпляр класса настроек программы
Dim myConfig As New Config
'путь к файлу настроек
Dim myConfigFileName As String = Application.StartupPath & "\config.xml"
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
myConfig.text1 = TextBox1.Text
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
myConfig.text2 = TextBox2.Text
End Sub
Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
'сохраняем текущие настройки
Dim mySerializer As New XmlSerializer(GetType(Config))
Dim myWriter As New IO.StreamWriter(myConfigFileName)
mySerializer.Serialize(myWriter, myConfig)
myWriter.Close()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'загрузка настроек, если есть
Dim FI As New IO.FileInfo(myConfigFileName)
If FI.Exists Then 'если файл существует, читаем его
Dim mySerializer As New XmlSerializer(GetType(Config))
Dim myReader As New IO.StreamReader(myConfigFileName)
myConfig = mySerializer.Deserialize(myReader)
myReader.Close()
End If
'применяем настройки
TextBox1.Text = myConfig.text1
TextBox2.Text = myConfig.text2
End Sub
|