Visual Basic |
Visual Basic Programming Standards |
Объектная модель MSWord |
Программирования сложных окон в Visual Basic |
Автоматизация приложений Microsoft Office в примерах |
Ссылки |
RichTextBox |
Быстрая сортировка |
Двоичный поиск |
Прием сообщений |
Прием сообщений в версиях до 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 |