Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 1.


VB Студия VB Line Содержание выпуска




Новости сайта VB Студия

  • 31 июля 2001 года - Обновлён FAQ.
    Добавилась рубрика Вопрос/Ответ. Там Вы можете задать вопрос или ответить на уже имеющиеся вопросы.
    Добавилась рубрика Хитрости. Там собраны всевозможные хитрости и трюки.
  • 15 июля 2001 года - Большое обновление. Раздел статьи пополнился статьями Михаила Эскина "Как написать игрушку на VB", Климина Сергея "Досадная ошибка в Package & Deployment Wizard" и Шатрыкина Ивана "Информация о файлах в Visual Basic и Win32 Api".
    В раздел исходники загрузил ещё 15 примеров. Теперь их количество составляет 21.
    Добавил 2 контрола в раздел контролы.
    В библиотеку кодов загнал 2 кода.
    Раздел FAQ пополнился ответами на 2 вопроса.
    И главное - добавил 3-х мегобайтных архив с 680 примерами с сайта VB Helper.

    наверх


    Новости сайта VB Line

        03 августа 2001 г. Новое обновление. В Статьи помещена статья Михаила Эскина Опыт создания линейки прокрутки. Читайте. В разделе Советы появились новые советы.

        30 июня 2001 г. На сайте большое обновление! Много интересного. В Статьи помещена серия статей Михаила Эскина посвященных работе с реестром. Обязательно почитайте, в его статьях всегда можно найти интересные находки. В ActiveX тоже много новых контролов. Прежде всего для Вас постарался Marco Bellinaso и сделал очень интересные контролы. Отмечу два из них: Spliter и Progress Bar. Таких OCX, а они очень качественно сделаны и имеют большие возможности, очень мало, так что скачивайте. Там же Вы найдете еще несколько приятных OCX.



    наверх


    Преобразование строки из одной кодировки в другую

    Option Explicit

    '===================Перекодировка символов===========
    Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
    ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
    Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long

    Public Const MB_PRECOMPOSED = &H1 ' use precomposed chars

    '=============Функция перекодировки===================
    Public Function Convert(ByVal strSrc As String, ByVal nFromCP As Long, ByVal nToCP As Long) As String
    Dim nLen As Long
    Dim strDst As String
    Dim strRet As String
    Dim nRet As Long
    nLen = Len(strSrc)
    strDst = String(nLen * 2, Chr(0))
    strRet = String(nLen * 2, Chr(0))
    nRet = MultiByteToWideChar(nFromCP, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen)
    nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
    Convert = Left(strRet, nRet)
    End Function

    Пример

    Имеем, допустим, TextBox. В нем текст в кодировке KOI, надо получить в Windows. Запускаешь:
    TextBox = StringConvert(TextBox, 20866, 1251)

    Значения для часто используемых кодировок:

    Central European (DOS)852
    Central European Alphabet (Windows)1250
    Central European Alphabet (ISO)28592
    Cyrillic Alphabet (DOS)866
    Cyrillic Alphabet (Windows)1251
    Cyrillic Alphabet (ISO)28595
    Cyrillic Alphabet (KOI8-R)20866
    Ukrainian Alphabet (KOI8-RU)21866
    Latin 3 Alphabet (ISO)28593
    Western Alphabet1252
    Baltic Alphabet (Windows)1257
    Baltic Alphabet (ISO)28594
    Greek Alphabet (Windows)1253
    Greek Alphabet (ISO)28597
    Turkish Alphabet1254
    Arabic Alphabet (Windows)1256
    Arabic Alphabet (ISO)28596
    Hebrew (DOS)862
    Hebrew Alphabet (Windows)1255


    наверх


    Восстановление положения окна Вашей программы на рабочем столе Windows

    Наверное, у каждого программиста на VB рано или поздно появляется необходимость восстановления положения окна на рабочем столе при старте приложения и сохранения их при завершении приложения. Для этого удобно (и нужно!) использовать реестр Windows. Ниже приведены процедуры, которые делают эту работу.

    'Процедура служит для восстановления позиции окна из
    'системного реестра Windows, в случае неудачи берем
    'значения по - умолчанию (100, 100, 10600, 5900)
    'второй параметр указывает на то, что нужно восстановить
    'только положение окна без его размеров
    Public Sub RestoreWindowsPos(frm As Form, Optional whNo As Boolean = False)
    Dim KEY_STRING As String

        KEY_STRING = APP_NAME & "\" & KEY_SETWINDOW
    'Восстанавливаем позицию окна на рабочем столе Windows
        frm.WindowState = GetSetting(KEY_STRING, frm.Name, CUR_STATE, 0)
    'если "нормальное" положение, то считать остальные параметры
        If GetSetting(KEY_STRING, frm.Name, CUR_STATE, 0) = 0 Then
            frm.Left = GetSetting(KEY_STRING, frm.Name, CUR_X, 100)
            frm.Top = GetSetting(KEY_STRING, frm.Name, CUR_Y, 100)
            If whNo Then Exit Sub
            frm.Width = GetSetting(KEY_STRING, frm.Name, CUR_dX, 10600)
            frm.Height = GetSetting(KEY_STRING, frm.Name, CUR_dY, 5900)
        End If
        End Sub

    'Процедура служит для сохранения позиции окна в
    'системном реестре Windows
    Public Sub SaveWindowsPos(frm As Form)
    Dim KEY_STRING As String

        KEY_STRING = APP_NAME & "\" & KEY_SETWINDOW
    'Сохраняем позицию окна на рабочем столе Windows
        SaveSetting KEY_STRING, frm.Name, CUR_STATE, frm.WindowState
        SaveSetting KEY_STRING, frm.Name, CUR_X, frm.Left
        SaveSetting KEY_STRING, frm.Name, CUR_Y, frm.Top
        SaveSetting KEY_STRING, frm.Name, CUR_dX, frm.Width
        SaveSetting KEY_STRING, frm.Name, CUR_dY, frm.Height
    End Sub

        Для работы этих процедур необходимы объявленные на уровне приложения (или модуля) константы APP_NAME, KEY_SETWINDOW, CUR_STATE, CUR_X, CUR_Y, CUR_dX, CUR_dY

    наверх



    Как проверить, доступен ли принтер в системе?
    Для этого воспользуйтесь приведенным ниже кодом:

    'Проверяем доступен ли принтер в системе
    Public Function TestPrinter() As Boolean
    Dim PrtName As String
        On Error Resume Next 'не останавливаться при ошибке
        PrtName = Printer.DeviceName 'попробовать прочитать название принтера
        If PrtName <> vbNull Then 'если получилось то принтер доступен
            TestPrinter = True
        Else 'иначе принтер недоступен
            TestPrinter = False
        End If
        Err.Clear
    End Function

        А в этом примере найти номер принтера в системе и возвратить его номер для дальнейшего использования:

    'ищем указаный принтер в коллекции Windows
    'и возвращаем его номер
    Public Function SetPrn(sName As String) As Long
    Dim i As Integer

    'на случай если принтер не найден
        SetPrn = -1
        If Printers.Count = 0 Then Exit Function
        For i = 0 To Printers.Count - 1
            If UCase(Printers(i).DeviceName) = UCase(sName) Then
            'то что нужно, возвратить номер принтера
                SetPrn = i
                Exit Function
           End If
        Next i
    End Function



    наверх


  • Выпуск подготовили:

    Сурменок Павел и Шатрыкин Иван