Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Информационный Канал Subscribe.Ru

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


VBNet VBMania
Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Хрестоматия VB
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Обратите внимание на раздел "Конкурс!".
    Читайте!


    Содержание выпуска




    Конкурс!

    Здравствуйте, уважаемые VBNet-чики! Сайт VBNet объявляет о двух новых конкурсах "Лето 2004", проходящих  с 1 июня по 31 августа 2004 года. Итак, мы предлагаем вам принять участие в конкурсе на лучший пример, написанный на VB и в конкурсе на лучшую статью о программировании на VB.NET.

    Как обычно, нашими спонсорами выступают:
    - Компьютерный журнал Hard'n'Soft (www.hardnsoft.ru)
    - Компания 9Rays (www.9rays.net)

    Ну и новый спонсор конкурса на лучшую статью о программировании на VB.NET:
    - Корпорация Microsoft (www.microsoft.ru)

     

    Правила участия в конкурсах простые:
    - пример должен быть написан на Visual Basic (естественно с исходными текстами) и быть полезным другим
    - статья, присланная на конкурс, должна быть авторской работой (переводные работы принимаются, но оцениваются ниже, чем авторские), подробно раскрывать рассматриваемую в ней тему и освещать вопросы, связанные с платформой Microsoft .Net
    - статья должна иметь не менее 12 000 знаков
    - в случае, если в работе используются цитаты из других источников, то их указание обязательно

     

    Работы принимаются по электронной почте: ivan@vbnet.ru, pavel@vbnet.ru

    Ах, да... призы... призы будут как обычно! Это и  декомпиляторы и обфускаторы Spices .Net от компании 9Rays и подписки на журнал Hard'n'Soft и книги от Microsoft Press.

    Всем участникам - Успехов!



    наверх


    Как на VB определить путь к системной папке?

    Вопрос:

    Как на VB определить путь к системной папке?

    Ответ:

    Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    'Получение директории C:\WINDOWS\SYSTEM

    Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    'Директория "C:\WINDOWS"
    Private Function GetSysDir() As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       lngRet = GetSystemDirectory(szBuffer, 50)
       GetSysDir = Left$(szBuffer, lngRet)
       If Right(GetSysDir, 1) <> "\" Then GetSysDir = GetSysDir & "\"
    End Function

    Private Function GetWinDir() As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       lngRet = GetWindowsDirectory(szBuffer, 50)
       GetWinDir = Left$(szBuffer, lngRet)
       If Right(GetWinDir, 1) <> "\" Then GetWinDir = GetWinDir & "\"
    End Function

    'Использование
    Private Sub Form_Load()
        MsgBox GetWinDir
        MsgBox GetSysDir
    End Sub

    или объединяем наши 2 функции:

    Private Function GetDirectory(szDirName As String) As String
       Dim szBuffer As String * 50
       Dim lngRet As Long
       
       If LCase(szDirName) = "sys" then
          lngRet = GetSystemDirectory(szBuffer, 50)
       ElseIf LCase(szDirName) = "win" then
          lngRet = GetWindowsDirectory(szBuffer, 50)
       End If
       GetDirectory = Left$(szBuffer, lngRet)
       If Right(GetDirectory, 1) <> "\" Then GetDirectory = GetDirectory & "\"
    End Function

    'Использование
    Private Sub Form_Load()
        MsgBox GetDirectory("win")
        MsgBox GetDirectory("sys")
    End Sub

    SC

    наверх


    Как програмно найти процесс и поставить ему приоритет (например, высокий)

    Вопрос:

    Как програмно найти процесс и поставить ему приоритет (например, высокий)

    Ответ:

    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As
    Long, ByVal dwPriorityClass As Long) As Long
    Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As
    Long) As Long

    Public Enum Priority
       IDLE_PRIORITY_CLASS = &H40
       NORMAL_PRIORITY_CLASS = &H20
       HIGH_PRIORITY_CLASS = &H80
       REALTIME_PRIORITY_CLASS = &H100
    End Enum

    Public Sub SetPriority(pParam As Priority)
       SetPriorityClass GetCurrentProcess(), pParam
    End Sub

        .::Savenger::.

    наверх


    Как сделать, чтобы дейстие происходило при нажатии трёх кнопок?

    Вопрос:

    Подскажите, пожалуйста, как сделать так, что бы событие возникало при нажатие трех клавиш. Например: shift+ctrl+m.

    Ответ:

    Создаешь процедуру MouseDown (мышь) или KeyDown (клава) для нужного объекта Например для формы (свойство формы "KeyPreview" должно быть "True") :
     
      Мышь :
      Sub Form_MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single)
       ' Button это код нажатой на мышке клавиши
       ' 1 - левая кнопка
       ' 2 - правая кнопка
       ' 4 - средняя кнопка
       ' Shift это код нажатой на клавиатуре клавиши
       ' 1 - Shift
       ' 2 - Ctrl
       ' 4 - Alt
      If Button = 2 And Shift = 6 Then frmAbout.Show vbModal
       ' Если над формой нажать правую мышки , Ctrl и Alt ( 2+4=6), то откроется форма
      End sub

      Клава :
      Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
      ' KeyCode это код нажатой клавиши
      ' vbKeyF1 - "F1"
      ' vbKeyF2 - "F2"
      ' vbKeyM - "M"
      ' vbKeyX - "X"
      ' и так далее
      ' Shift это код нажатой на клавиатуре клавиши
      ' 1 - Shift
      ' 2 - Ctrl
      ' 4 - Alt
      If KeyCode= vbKeyM And Shift = 6 Then frmAbout.Show vbModal
      ' Если над формой нажать "M" , Ctrl и Alt ( 2+4=6), то откроется форма
       End Sub

    Vamp

    наверх


    Как удалить элементы из середины массива?

    Вопрос:

    Есть массив Arrray(100). Как можно удалить срез массива, например, с 40 по 70 элементы.

    Ответ:

    Нужно просто переписать элементы с 70 на 100 на место удаляемых и изменить размер массива:

    For lIdx = 71 To 100
      Arrray(lIdx-31)= Arrray(lIdx)
    Next
    redim preserve Arrray(69)

    Sergey Morenets

    наверх


    Как внедрить Word2000 на форму Access2000?

    Вопрос:

    Как внедрить Word2000 на форму Access2000? Вместо поля Edit я хотел бы поместить Ворд на форму Access'а для редактирования текста.

    Ответ:

    Создай на форме контрол "Свободная рамка объекта" из панели элементов управления (или "Связанная....", если нужно присоединить к таблице - тогда там должно быть поле с типом "Объект OLE"). А потом вставляй туда любые объекты, в том числе и страницу Word2000.

    Михаил Ю. Белодед



    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Владимир Филатов

    Ответ ожидается по этому адресу

       Как из программы на VB6 построчно прочитать документ Word, в котором вставлена картинка? Как определить часть строки, содержащую картинку? Мне это надо для перекодировки символов в 127 таблицу и отправки всей строки (с картинкой) в COM порт для печати на принтере Robotron K6312 картинки в графическом режиме, а текст в символьном. Input и Line input файлы *.doc не читают. В окне отладки появляется несколько спецсимволов. Напишите подробнее. Я начинающий.


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как мне обвести несколько textbox'ов и получить их индексы?


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как избавится от моргания Frame и picturebox при перемещении курсора с одного элемента, который находится на этом Frame (если используется manifest)?


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как ускорить передачу данных в Excel (может есть какие либо параметры вроде xlCalculate)?


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как подсчитать c=(12^121) mod 247, я все перепробовал, кроме цикличного вычитания 247.


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как заставить класс (ActiveX Dll или ActivX EXE) работать в другом потоке, чтобы он не вешал своими расчетами остальную программу?


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Как можно быстро, не перебирая все элементы, сделать такую операцию?

    type aa
          aa(50) as string*20
    end type
    type bb
          bb(50) as string
    end type
    dim xx as aa
    dim cc as bb
    cc=xx 'Выполнить невозможно,
    'А так слишком долго
    for i=0 to 50
    cc.bb(i)=xx.aa(i)
    next

    Может кто знает, как это дело ускорить.


    Автор вопроса: C...R...a...S...H

    Ответ ожидается по этому адресу

       Напишите код, как lock'ить listBox перед заполнением, если не трудно.


    Автор вопроса: Ruslan

    Ответ ожидается по этому адресу

       Как можно использовать dll, написанную в .net, в vb6 проекте? Через CreateObject не получается, через Reference тоже :(


    Автор вопроса: monitoring

    Ответ ожидается по этому адресу

       Как в visual basic 6.0 определить процент загрузки процессора? И чтобы результат выдавался не в progress bar'е, а в обыкновенном label'е.




    Ответы:


    Вопрос:

       В Access необходимо открыть отчет. Если в нем нет данных, то в поле count([поле]) выдается #Ошибка. Как узнать, что текстовое поле имеет это значение и скрыть его?

    Ответ:

    Автор ответа: Владимир

    IIF(IsNull([поле]);"0";count([поле]))


    Вопрос:

       Где можно найти или скачать программу, чтоб создать и скомпилировать справочный фаил chm?

    Ответ:

    Автор ответа: i-sof

    Прога называется chm4you!. Вот ссылка http://supex.by.ru.


    Вопрос:

       Как вставить свою программу в панель уведомлений (радом с часами), с функцией например разворачивания окна программы?

    Ответ:

    Автор ответа: Антон Лозовский

    Для того, чтобы значек твоей программы появлялся в трэе - либо используй АПИ (ShellNotifyIcon по-моему называлась одна из нужных функций, посмотри в MSDN), либо посмотри на сайте VBNet мой OCX для работы с трэем (trayicon.ocx)
      
    А чтобы появлялось меню, в котором будет Развернуть - я использую вышеуказанный свой OCX, а он генерит события смотря как кликать по нем. А показать меню - примерно form1.popupmenu <меню>.
      
    В общем, скачай мой OCX и почитай к нему описание, с примерами


    Вопрос:

       Кто-нибудь писал библиотеки на VB? Я создал библиотеку с функцией

    Public Function проверка_ввода(ByVal строка As String, Optional ByVal разделитель_на_выходе As String) As String

    Откомпилил в файл function.dll, зарегистрировал regsvr32.exe Function.dll. Создал программу в которой в модуле записал

    Public Declare Function проверка_ввода Lib "Function.dll" (ByVal строка As String, Optional ByVal разделитель_на_выходе As String) As String

    И вызываю её

    MsgBox проверка_ввода("10.05", -1)

    На это он мне пишет "Ошибка 453: Невозможно найти допуск в DLL проверка_ввода in function.dll

    Пробывал менять названия на латиницу - не помогает.
    Подключение библиотеки через ссылки недопустимо (требование заказчика, хотя так работает)

    Ответ:

    Автор ответа: Антон Лозовский

    Дело в том, что на VB6 можно создавать _ТОЛЬКО_ ActiveX DLL, так что указание ссылки на нее при дальнейшем использовании обязательно. И никак не через декларирование. Это не C++.



    Ответ:

    Автор ответа: Евгений Смоляков

    Бибилиотеки на vb используют COM-технологию, и работают через COM-регистрацию. Перепиши свою функцию на С/C++.



    Ответ:

    Автор ответа: C...R...a...S...H

    Это невозможно на VB6. На нем можно писать только ActiveX Dll.



    Ответ:

    Автор ответа: Артем Кривокрисенко

    VB-шные библиотеки являются библиотеками ActiveX, их можно вызвать только подключив эту библиотеку и т.д.

    Если надо вызывать через декларацию, то пиши на Си.


    Вопрос:

       Мой компьютер подсоединён к Интернет черея локальную сеть. Модема, как устройство на компьютере нет. Как мне определить, в каком режиме находится мой компьютер: "on line" или "off line" ?

    Ответ:

    Автор ответа: Антон Лозовский

    1) Можно спросить админа :)
    2) Можно пропинговать любой компьютер в Инете, например microsoft.com
    3) Можно научиться работать с компонентом mswinsck.ocx, и писать сетевые приложения под TCP/IP и UDP
    4) Если у тебя Win2000 или XP - посмотреть свойства соединения локальной сети, которое имеет выход в Интернет.



    Ответ:

    Автор ответа: C...R...a...S...H

    Попробуй скачать с интернета какой-либо файл (www.ya.ru\index.htm). Если окачивание прошло успешно, то ты online


    Вопрос:

       Как пользоваться "OnError GOTO"? В общем обьясните, как он работает?

    Ответ:

    Автор ответа: Антон Лозовский

    Элементарно, Ватсон:
    1) on error goto - если произойдет какая ошибка, то программа не вывалится с msgbox'ом ошибки, а перейдет на нужную метку
    2) on error resume next - если ошибка - то же самое, но продолжит выполнение со следующей строки



    Ответ:

    Автор ответа: Александр IV

         Примерно так.

    On Error goto 10
         For i = -1 To 1
             a = 5 / i
             Form1.Caption = Form1.Caption & " " & a
         Next i
    10 MsgBox ("5 не делится на " & i )
      
    В этом случае цикл прекратится выдав только значение а=-5. И показывать месаджбокс.
      
    On Error goto resume
         For i = -1 To 1
             a = 5 / i
             Form1.Caption = Form1.Caption & " " & a
         Next i

    В этом случае цикл прекратится выдав только значение а=-5 -5 5.




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


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

    Сурменок Павел


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу


    В избранное