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


VBNet VBMania
Голосование:

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

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

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

       Новый выпуск. Ничего нового в рассылке и на сайте не происходит...
    Читайте!


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




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    Описание элемента TabStrip

    Контрол TabStrip представляет из себя несколько вложенных страниц, которые расположены в одной и той же области окна или диалогового окна в вашем приложении.

    Синтаксис

    TabStrip

    Примечания

    Контрол Tab состоит из коллкций отдельных вкладок (Tabs). Во время выполнения и во время проектирования программы вы можете менять количество вкладок, используя страницу свойств. Свойство Style устанавливает внешний вид отдельных вкладок (к примеру, в виде кнопок).

    Контрол TabStrip - не контейнер. Чтобы содержать фактические страницы и другие объекты, вы должны использовать контрол Frame или другие контейнеры, размеры которых соответствуют размерам каждой вкладки элемента Tab. Используйте следующий пример для связывания каждой вкладки элемента Tab с контейнером Frame:

    Private mintCurFrame As Integer 'текущая видимая вкладка
    Private Sub Form_Load()
    Tabstrip1_Click 'необходимо активизировать первый контейнер
    End Sub
    Private Sub Tabstrip1_Click()
    If TabStrip1.SelectedItem.Index = mintCurFrame Then Exit Sub
    'если выбрана та же вкладка, осуществляется выход из подпрограммы
    Frame1(TabStrip1.SelectedItem.Index).Visible = True 'показать текущий контейнер
    On Error Resume Next
    Frame1(mintCurFrame).Visible = False 'спрятать предыдущий контейнер
    mintCurFrame = TabStrip1.SelectedItem.Index 'определить текущий контейнер
    End Sub


    Основные свойства
    • Получить номер вкладки
      Dim n As Integer: n = TabStrip1.SelectedItem.Index




    наверх


    Описание элемента ListBox

    Элемент ListBox предоставляют пользователю выбрать значение из списка данных. Отдельные пункты элемента ListBox выбираются с помощью мыши. Добавлять пункты в элемент ListBox можно с помощью программного кода, либо устанавливая значение свойство List в окне свойств. Каждый пункт следует вводить отдельной строкой, нажимая комбинацию клавиш Ctrl + Enter. Завершив ввод пунктов, нажмите клавишу Enter, и они отобразятся в элементе ListBox на форме.В этой статье будут рассмотрены свойства и методы элемента ListBox.

    Основные свойства

    Некоторые свойства элементов ListBox можно установить только в режиме проектирования. Именно они определяют функциональные возможности элемента, которые нельзя изменять во время работы приложения.

    Свойство MultiSelect

    Определяет метод выборки пунктов списка. Его значение задается при конструировании. Во время работы приложения значение свойства доступно только для чтения. Значение свойства MultiSelect определяет, может ли пользователь выбрать несколько пунктов списка и метод выборки.

    Значение - Описание

    0 - Выбор нескольких пунктов запрещен (по умолчанию)

    1 - Простой выбор нескольких пунктов. Щелчок кнопкой мыши (или нажатие клавиши пробела) выбирает или отменяет пункт списка. Для перемещения фокуса на другой пункт используйте клавиши со стрелкой

    2 - Расширенный выбор нескольких пунктов. Для выбора нескольких пунктов подряд нажмите клавишу Shift, а затем щелкайте на пунктах мышью (или нажимайте клавиши со стрелкой). Все пункты списка между ранее выбранным и текущим пунктами подсветятся. Чтобы выбрать произвольно расположенные элементы списка (или отменить выбор), нажмите клавишу Ctrl и щелкните на пункте кнопкой мыши

    Свойство Sorted

    С помощью приложения в списки элементов ListBox можно вставлять новые пункты, но программист тоже должен позаботиться об этом. Если необходимо, чтобы пункты всегда были отсортированы, установите значение свойства Sorted равным True. Сделать это можно только во время проектирования: во время выполнения оно доступно только для чтения. Элемент ListBox является текстовым элементом, т. е. сортировать числовые данные он не может. Чтобы использовать элемент ListBox для сортировки чисел, прежде всего, отформатируйте их, добавив нули в начале каждого числа. Так, число 10 всегда будет отображаться перед числом 5, поскольку строка "10" меньше строки "5" (она начинается с единицы). Если же числа форматировать как "010" и "005", то сортировка будет корректна. Пункты в элементе ListBox сортируются по возрастанию с учетом регистра. Более того, стандартные установки изменить невозможно. Элементы "aa", "aA", "AA, "Aa", "Ba" и "BA" сортируются следующим образом. "AA" "Aa" "aA" "aa" "BA "Ba" Как видите, символы верхнего регистра появляются впереди тех же символов нижнего. Все слова, начинающиеся с буквы В, появляются после слов, начинающихся с А, но перед словами, начинающимися с буквы С. В пределах группы слов, начинающихся с буквы В, сначала отображаются слова, начинающихся с буквы В, а вслед за ними идут слова, начинающиеся с буквы b.

    Свойство Style

    Определяет внешний вид элемента. Имеет два значения: 1 - Standard и 2 — Checkbox. Обратите внимание: левый список не отсортирован, а правый — отсортирован.

    Методы элемента ListBox

    Для управления элементом ListBox из приложения необходимо иметь возможность:
    • добавлять пункты в список;
    • удалять пункты из списка;
    • выбирать отдельные пункты списка.

    Метод Additem

    Чтобы добавлять пункты в список, используется метод Additem. Он имеет следующий синтаксис:

    List1.Additem item, index

    Параметр item - это строка, добавляемая в список, a index - ее порядковый номер. Порядковый номер первого элемента списка равен нулю. Аргумент index необязателен. Если его опустить, строка добавляется в конец списка. Если значение свойства Sorted элемента установлено равным True, то пункт вставляется в соответствующее место списка, независимо от значения аргумента index.

    Метод RemoveItem

    Чтобы удалить пункт из списка, найдите его положение (index) в списке: index необходим методу RemoveItem.

    List1.Removeltem Index

    Параметр index указывает на порядковый номер удаляемого пункта и является обязательным. Следующий оператор удаляет пункт из начала списка. List1.Removeltem ()

    Метод Clear

    Удаляет из списка элемента все пункты. Синтаксис метода несложен. List1.Clear Чтобы получить доступ к отдельным пунктам, можно использовать несколько свойств элемента ListBox. Для удаления пункта из списка необходимо знать его порядковый номер, но в данном случае этот аргумент метода RemoveItem используется редко. Как правило, удаляемый пункт выбирает пользователь либо удаляемые пункты выбирают из программного кода по их значениям. Некоторые свойства элемента ListBox позволяют считывать пункты из программного кода (эти свойства рассматриваются).

    Другие свойства

    Свойство ListCount

    Возвращает число пунктов списка. Доступ к ним можно получить с помощью значений индексов в диапазоне от 0 до ListCount-1.

    Свойство List()

    Это массив пунктов списка. Элемент массива List(0) содержит первый пункт списка, элемент List(1) - второй и т.д., вплоть до последнего элемента - List(ListCount-1), содержащего последний пункт списка. Массив List() часто используют для просмотра пунктов списка. Для просмотра всех пунктов элемента управления List1 с целью отыскания и удаления пустых строк применяйте следующий цикл.

    For item = List1.ListCount – 1 to 0 Step – 1
    If List1.List(item) = "" Then
    List1.RemoveItem item
    End If
    Next

    Обратите внимание: данный цикл сканирует элементы массива List() с конца. Понимаете, почему? При удалении каждого пункта длина списка уменьшается на 1. Если сканировать список с начала, число итераций превысит число пунктов списка, что ведет к ошибке исполнения. Если же сканировать список с конца, эта ошибка исключается.

    Свойство ListIndex

    ListIndex представляет собой индекс выбранного пункта списка. При выборке нескольких пунктов ListIndex представляет индекс последнего выбранного пункта. Если не выбран ни один элемент, значение .ListIndex = -1. Это свойство можно использовать для выбора или удаления конкретных пунктов. Так, следующий оператор удаляет выбранный пункт элемента List 1: List1.RemoveItem List1.ListIndex Для выделения определенного элемента используйте List1.ListIndex = 2 Если при вызове метода RemoveItem ни один пункт списка не выбран, значение свойства ListIndex отрицательно. Попытки удалить пункт с отрицательным индексом приводят к ошибке исполнения. Чтобы избежать этого, проверьте значение свойства ListIndex.

    If List1.ListIndex >= 0 Then
    List1.RemoveItem List1.ListIndex
    End If

    После удаления пункта индексы последующих пунктов соответственно перестраиваются.

    Свойство Selected

    Selected представляет собой массив, подобный свойству List. Его элементы могут иметь значения True или False в зависимости от состояния соответствующего пункта списка. Если пункт списка выбран, значение свойства Selected данного пункта равно True. В противном случае значение свойства равно False. Поскольку отсутствуют средства, позволяющие получить сразу все индексы при выборке нескольких пунктов, необходимо проверить все элементы массива Selected (чуть позже будет приведен соответствующий пример).

    Свойство SelCount

    Отображает число выбранных пунктов элемента ListBox, если значение свойства MultSelect установлено равным 1 (Simple) или 2 (Extended). Обычно это свойство используют вместе с массивом Selected для работы с выбранными пунктами элемента. Если элемент ListBox допускает выборку множества пунктов, рекомендуем применить в списке стиль Checkbox (Флажок). Чтобы пункты списка отмечались флажками (рис. 5.6), установите значение свойства Style равным 1.

    Свойство NewIndex

    Возвращает индекс последнего пункта включенного в список элемента ListBox. Обычно это свойство используют вместе со свойством ItemData, который рассматривается в параграфе "Индексирование с помощью элемента ListBox".

    Индексирование с помощью элемента ListBox

    Ключевым свойством элемента ListBox является свойство ItemData — массив, подобный массиву List. Однако вместо строк, появляющихся в элементе, он содержит числа. Каждый пункт, отображаемый элементом ListBox, состоите двух частей: строки (задаваемой свойством List(i)) и числа, задаваемого свойством ItemData(i) (здесь i — индекс пункта списка). Свойство ItemData — это значение типа Long, которое может сохранять числовую информацию любого типа, относящуюся к пункту списка, но не отображаемую в списке. Так, в массиве List() можно сохранять список имен сотрудников, а в массиве ItemData() - данные об их зарплате. Доступ к записям о каждом сотруднике можно получать по имени, а зарплату отображать в элементе TextBox, помещенном на ту же форму. Однако истинная ценность свойства ItemData состоит не в хранении дополнительной информации, относящейся к пункту. Действительно, единственного числа явно недостаточно для хранения существенной дополнительной информации. Предположим, необходимо поддерживать список имен и адресов. Хранить все эти записи в элементе ListBox непрактично: элемент должен быть слишком широким, чтобы вместить всю строку с именем, адресом, городом, номером телефона и т.д. Практичнее хранить в элементе ListBox имена, используя их как ключи для доступа к элементам массива, в котором хранится остальная информация. Каждая запись хранится в элементе массива, соответствующем одному из пунктов элемента ListBox. Если установить значение свойства ItemData равным индексу соответствующего элемента массива данных, то при необходимости можно получить немедленный доступ к записям массива. Этот подход применим и к файлам с произвольным доступом (значение свойства ItemData равно числу совпадающих записей).

    наверх


    Как автоматически скролить элемент ListBox вниз

    Данный пример покажет, как можно автоматически уходить в конец списка элемента ListBox при добавлении новых элементов. Расположите на форме элемент ListBox и элемент CommandButton. Добавьте код. Как вы понимаете, за автоматический уход в конец списка отвечают строчки List1.Selected(List1.NewIndex) = True/False. Первая строчка выделяет последний (NewIndex) элемент списка, вторая - снимает выделение.

    Dim a
    Private Sub Command1_Click()
    a = a + 1
    List1.AddItem a
    List1.Selected(List1.NewIndex) = True
    List1.Selected(List1.NewIndex) = False
    End Sub

    наверх


    Как выравнять элементы ListBox'а вправо

    Как вы знаете, по умолчанию элементы ListBox'а выравнены по левой кромке. Следующий пример покажет, как можно выравнять элементы ListBox'а по правой кромке. Элементы ListBox'а выраниваются в зависимости от ширины ListBox'а.

    Private Const LB_SETTABSTOPS = &H192
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Dim i
    Private Sub Command1_Click()
    List1.Clear
    List1.AddItem "Азбука Visual Basic"
    List1.AddItem "Ресурс AVB"
    List1.AddItem "www.azbuakvb.narod.ru"
    End Sub
    Private Sub Command2_Click()
    Dim mTabs(0) As Long
    mTabs(0) = -List1.Width * 44 / 1000 + 2
    SendMessage List1.hwnd, LB_SETTABSTOPS, 1, mTabs(0)
    List1.Clear
    List1.AddItem vbTab & "Азбука Visual Basic"
    List1.AddItem vbTab & "Ресурс AVB"
    List1.AddItem vbTab & "www.azbuakvb.narod.ru"
    'List1.Refresh
    End Sub
    Private Sub Form_Load()
    Command1_Click
    End Sub

    наверх


    Выделение всех элементов в ListBox'е

    Расположите на форме элемент ListBox и 2 элемента CommandButton. Установите свойство MultiSelect элемента ListBox в 1 или 2

    Пример 1 основан на функции SendMessageBynum, Пример 2 - на функции SendMessage

    'Пример 1

    Private Declare Function SendMessageBynum Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const LB_SELITEMRANGE = &H19B
    Private Sub Form_Load()
    List1.AddItem "11"
    List1.AddItem "22"
    List1.AddItem "33"
    End Sub
    Private Sub Command1_Click()
    Call SendMessageBynum(List1.hWnd, LB_SELITEMRANGE, 1, (List1.ListCount - 1))
    End Sub
    Private Sub Command2_Click()
    Call SendMessageBynum(List1.hWnd, LB_SELITEMRANGE, 0, (List1.ListCount - 1))
    End Sub

    'Пример 2

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Const LB_SETSEL = &H185
    Private Sub Form_Load()
    List1.AddItem "111"
    List1.AddItem "222"
    List1.AddItem "333"
    End Sub
    Private Sub Command1_Click()
    SendMessage List1.hwnd, LB_SETSEL, True, ByVal True
    End Sub
    Private Sub Command2_Click()
    If List1.SelCount Then
    SendMessage List1.hwnd, LB_SETSEL, False, ByVal True
    Else
    Command1_Click
    End If
    End Sub

    наверх


    Выделение элемента в ListBox'е при нажатии на правую клавишу мыши

    Добавьте на форму элемент ListBox

    'Пример 1

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const LB_ITEMFROMPOINT = &H1A9
    Private Sub Form_Load()
    List1.AddItem "11"
    List1.AddItem "22"
    List1.AddItem "33"
    End Sub
    Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim indeX As Long
    Dim XPosition As Long, YPosition As Long
    XPosition = CLng(X / Screen.TwipsPerPixelX)
    YPosition = CLng(Y / Screen.TwipsPerPixelY)
    indeX = SendMessage(List1.hWnd, LB_ITEMFROMPOINT, 0, ByVal ((YPosition * 65536) + XPosition))
    If indeX < List1.ListCount Then
    List1.Selected(indeX) = True
    End If
    End Sub

    'Пример 2

    Private Sub Form_Load()
    List1.AddItem "11"
    List1.AddItem "22"
    List1.AddItem "33"
    End Sub
    Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim iTemp As Integer
    If Button = vbRightButton Then
    With List1
    iTemp = ((Y / Screen.TwipsPerPixelY) \ (TextHeight("A") / Screen.TwipsPerPixelY)) + .TopIndex
    If iTemp > .ListCount - 1 Then iTemp = -1
    .ListIndex = iTemp
    .SetFocus
    End With
    End If
    End Sub

    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

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

    наверх


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

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

    Вопросы:


    Автор вопроса: Dr.Max

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

       Кто-нить скажите как подключить ресурс к проэкту???


    Автор вопроса: Илья

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

       Как для Windows 98/XP на форме запустить avi-файл?


    Автор вопроса: Жорж

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

       у меня имеется рисунок, очень большого размера (3000 х 4000), мне надо его разместить на форме, в маленьком размере (300 х 400), а также кнопку по нажитии, которой картинка бы увеличивалась, причем что бы она не залазила за форму, а появлялись ползунки, которыми можно было просмотреть невидимую часть рисунка.


    Автор вопроса: Миша

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

       Необходимо создать контрольную сумму к строке текста, строка состоит из русских символов.
    Подскажите как это можно сделать CRC и после проверить ее.


    Автор вопроса: Karov Alexey

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

       На вход COM порта подаются бинарные сигналы определенной длины, но MsCommControl не может их определить, а выдает как либо пустые строки, либо символы ??, ну как в настройкакх настроины неизвестные. Ну так вот, может кто-нибудь знает как мне получить получить эти данные в нормальном виде, ну что бы в программе в цикле If применять можно было бы?


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

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

       Скачал исходник ричтекстбокса, добавил его в проект, все отлично работает,но когда попытался скомпилить проект мне сказали что нужна двоичная совместимость. Я ставил совместимость и со скачанным контролом и с тем который сам скомпилил(отдельно от моего проекта контрол компилится без вопросов), все равно выдается сообщение что нужна двоичная совместимость.


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

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

       Подскажите АПИ (с описанием) или ссылочку штоб юзера от сетевой папки отшибить


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

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

       Можно ли сделать так, чтобы при старте программы данные из определённого файла записывальсь в событие, например cmd1_click ()
    И как это сделать?


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

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

       Может кто из Вас знает, как замерять время меньше 1 мс?? Пробовал через Sleep - и замерял его через timeGetTime - то он даже 1 мс не держит если указать "Sleep 1" (а гдето 2-5 мс выходит), а если Sleep 0.5 - то уже ближе к 1 мс, но всё равно он как-то глючит. Его мининимум может быть только 0.1 или 0.5, а если больше чем 0.6 - то около 2-6 мс!
    Может кто подскажет, как тут быть?
    В Свойствах системы откопал ресурсы системного таймера (там 4 регистра - от &H40 до &H43). Подключился к ним - но вот закономерность нарастания немогу никак вдуплить!
    Может есть ещё какито АПИ ф-ции или какието счётчики или таймера?????


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

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

       Подскажите пожалуйста,как сделать плавную и неплавную прокрутку текста в RichTextBox.


    Автор вопроса: Alec Perle

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

       Вопрос по VBA (Excel). К объектам Shape на листе можно приделать макрос (OnAction). У меня порядка двух-трех сотен элементов. Как программно определить, на каком именно элементе была нажата мышка?


    Автор вопроса: Ксения

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

       Может кто-нибудь знает как в MSChart сделать гладкий график?


    Автор вопроса: Dr.Max

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

       Нашел исходник гоночного симулятора на ВБ.
    Но он не запускается, говорит:<< Run-time error '429' ActiveX component can't create object >> .
    Что это значит и как узнать ,что это за компанент????
    Если кто-нибудь скачивал это с vbstreets.da.ru из download ,то скажите, какой нужно подключить (если не стандартный ,то где скачать) актив ???


    Автор вопроса: Алексей

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

       У меня 4 вопроса:
      - Кто может сказать где взять информацию о структурах файлов разных типов. Например EXE-файла.
      - Кто знает как без всяких API-функций сделать выделение методом наведения. т.е. реакцию на наведение мышей на объект. Слышал, что используется свойство Tag...
      - Подскажите, где в инете можно достать иконки или BMP-шки для тулбаров (панелей, как в крутых программах, типа Word и др), только очень качественные - с градиентацией. Или какой программой они рисуются? Буду очень благодарен! Если можно дайте прямые ссылки на zip фрхивы.
      - Кто работал со Speech API??? Пожалуйста помогите: дайте примерчик на VB или код. Также важен принцип работы на VB. Взаимную помощь гарантирую!


    Автор вопроса: Евгений

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

       Как подсоединится к удаленному MS SQL Server.


    Автор вопроса: Евгений

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

       Как средствами Win API отправить сообщение по электронной почте?




    Ответы:


    Вопрос:

       1.Как сделать так,чтобы при очередном клике по label для ввода символов в text, курсор распологался справа от введенго символа?
    Я пишу так:
      
    Private Sub Label1_Click()
    Dim strExp As String
       strExp = Left(Text1.Text, Text1.SelStart)
       strExp = strExp & " " & Label1 & ""
       strExp = strExp & Mid(Text1.Text, Text1.SelStart + 1)
       Text1 = strExp
    End Sub

    2.Что значит 6 ошибка-Overflow(переполнение)

    Ответ:

    Автор ответа: Dr.Max

    Overflow -так и значит - переполнение!
    Если ты используешь переменную ,например, Byte и она принимает значение >
    255, то она переполнена !
    Короче, она умеет считать только до 255,примерно так же как первоклашки до 10 :)))
    Рикомендую не игнорировать такие нудные название как "Виды переменных в ВБ", а хоть что -нибуть прочитать на эту тему (одного раза на хватает:))!


    Вопрос:

       Подскажите, пожалуйста, как в Visual Basic сделать гладкий график без углов. Очень надо. И еще не подскажете как на гафике раскрасить области разными цветами (естественно в зависимости от значений).

    Ответ:

    Автор ответа: P@Ssword

    Инструкция по использованию нижележащего кода:
             1) Покласть на форму PictureBox.
             2) ---//--- CommandButton.
             3) Вставить код :-)
             4) Запустить.
             5) Потыкать по пикчебоксу.
             6) Нажать на кнопку.
             7) Любоваться закатом 8<>()...

    Option Explicit
    Option Base 1

    Dim M() As Single, X() As Single, Y() As Single
    Dim TempArr() As Single

    Private Function PrepareSpline(inpArr() As Single) As Boolean
    Dim n As Integer, i As Integer
    Dim L() As Single, R() As Single, S() As Single
    Dim D As Single, E As Single, F As Single, H As Single, P As Single

         PrepareSpline = False
         On Error Resume Next
         n = UBound(inpArr, 2)
         On Error GoTo 0
         If n < 2 Then Exit Function

         ReDim M(n), X(n), Y(n), L(n), R(n), S(n)
         For i = 1 To n
             X(i) = inpArr(1, i)
             Y(i) = inpArr(2, i)
         Next i

         D = X(2) - X(1)
         E = (Y(2) - Y(1)) / D
         For i = 2 To n - 1
             H = D
             D = X(i + 1) - X(i)
             If D = 0 Then D = 0.0001
             F = E
             E = (Y(i + 1) - Y(i)) / D
             L(i) = D / (D + H)
             R(i) = 1 - L(i)
             S(i) = 6 * (E - F) / (D + H)
         Next i

         For i = 2 To n - 1
             P = 1 / (R(i) * L(i - 1) + 2)
             L(i) = -L(i) * P
             S(i) = (S(i) - R(i) * S(i - 1)) * P
         Next i

         M(n) = 0
         L(n - 1) = S(n - 1)
         M(n - 1) = L(n - 1)
         For i = n - 2 To 1 Step -1
             L(i) = L(i) * L(i + 1) + S(i)
             M(i) = L(i)
         Next i
         PrepareSpline = True
    End Function

    Private Function CalcValue(arg As Single) As Single
    Dim ret As Single, i As Integer, n As Integer
    Dim D As Single, H As Single, P As Single, R As Single

         n = UBound(X)
         For i = 1 To n
             If arg < X(i) Then Exit For
         Next i

         Select Case i
            Case 1 ' arg меньше x(1) -> экстраполируем
              D = X(2) - X(1)
              If D = 0 Then D = 0.0001
              ret = -D * M(2) / 6 + (Y(2) - Y(1)) / D
              ret = ret * (arg - X(1)) + Y(1)

            Case n + 1 ' arg больше x(n) -> экстраполируем
              D = X(n) - X(n - 1)
              If D = 0 Then D = 0.0001
              ret = D * M(n - 1) / 6 + (Y(n) - Y(n - 1)) / D
              ret = ret * (arg - X(n)) + Y(n)

            Case Else ' интерполируем
              D = X(i) - X(i - 1): H = arg - X(i - 1)
              R = X(i) - arg: P = D * D / 6
              ret = (M(i - 1) * R ^ 3 + M(i) * H ^ 3) / (6 * D)
              ret = ret + ((Y(i - 1) - M(i - 1) * P) * R + (Y(i) - M(i) * P) * H)
    / D
         End Select
         CalcValue = ret
    End Function

    Private Sub Command1_Click()
       If PrepareSpline(TempArr) Then
          DrawCurve
       Else
          MsgBox "Золотые руки, но растут не из того места", vbOKOnly +
    vbCritical
       End If
    End Sub

    Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As
    Single, Y As Single)
    Dim i As Integer
    Static n As Integer

         n = n + 1
         ReDim Preserve TempArr(2, n)
         TempArr(1, n) = X
         TempArr(2, n) = Y
         Picture1.Circle (X, Y), 60
    End Sub

    Private Sub DrawCurve()
    Dim i As Integer

         Picture1.PSet (X(LBound(X)), CalcValue(X(LBound(X))))
         For i = 0 To Picture1.ScaleWidth
             Picture1.Line -(i, CalcValue(CSng(i)))
         Next i
    End Sub


    Вопрос:

       Кто знает как програмно добавить запись в реестр?
    Путь:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    Мне нужно чтобы прога была в автозагрузке... Но нинаю как это зделать програмно. ПОМОГИТЕ........

    Ответ:

    Автор ответа: Dr.Max

    Это не совсем то ,что нужно(работает только с одной веткой) ,но может понадобится ...

    Оболочка

    Public Enum constTypeOptions
    GetOption = 0
    SaveOption = 1
    End Enum
    Public Enum constKeyOptions
    Имя1 = 0'Добавляем сколько нужно и назначаем номер Имени в реестре
    Имя2 = 1
    End Enum

    Обертка

    Public Function Options(ByVal TypeOptions As constTypeOptions, _
         ByVal Key As constKeyOptions, Optional Setting As String) As String
    Select Case TypeOptions
    Case GetOption 'считывание
         Options = GetSetting(App.EXEName, "Options", Key)
    Case SaveOption 'запись
         SaveSetting App.EXEName, "Options", Key, Setting
    End Select
    End Function

    Первый запуск

    If Options(GetOption, Time) = vbNullString Then 'если таких имен в реестре нет ,то
         Options SaveOption, Имя1, 10 ' создать их ,и записать их первые значения
         Options SaveOption, Имя2, 9
    End If

    После первого запуска нажмите <пуск> => <выполнить> ,введите ,нажми ОК.
    Откройте ветку HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings
    Найдите имя своего проекта. И в должны увидеть

    Параметр Значение
    0 10
    1 9

    Записывать : Options SaveOption, Имя, Значение
    Читать : Options(GetOption, Имя)


    Вопрос:

       Подскажите - есть таблицы в HTML формате и их нужно "перевести" в xls формат.
    Проблема в том, что в ячейках HTML находятся десятичные числа (например 1.52) в одних ячейках и текст в других ячейках. Когда копируешь в ексель, то ексель числа воспринимает (формат ячейки - все форматы) как январь.52.
    Мне же нужно для обработки, чтобы текст в таблице оставался текстом, а числа 1.52 в 1,52 а не 1.52. Как это возможно решить с помощью макросов VBA.

    Ответ:

    Автор ответа: Эд

    Вот примерчик, если вот правильно понял:

    В листе добавляешь кнопу, а в коде пиши вот это:(должно получиться!!!)

    Option Explicit
    Public x, y, n As Integer
    Public z As String


    Private Sub CommandButton1_Click()
       Range("A1").Select ' ячейка в которую надо циферки вводить, ну типа: 1,23

        x = ActiveCell.FormulaR1C1
         For n = 1 To Len(x)
          If Mid(x, n, 1) = "," Then
           z = Trim(Str(Left(x, n - 1))) + Trim(".") + Trim(Str(Right(x, (Len(x) - n))))
          End If
         Next n
          Range("A2").Select' ячейка в которую скинет циферки, в том виде, который тябе нужен, ну типа: 1.23
         ActiveCell.FormulaR1C1 = Val(z)
    End Sub

    Формат ячеек ставь общий(али текстовый) ...:)


    Вопрос:

       Я скачал конвектор *.х файлов ,но как им пользоватся??
    Я запускаю ехе"шник ,он быстренько пробежался сверху вниз и выгружается !!
    На 100% уверен ,что это я не умею им пользоватся!!

    Ответ:

    Автор ответа: Vir

    Какие команды надо вводить я незнаю так как таких конвертеров много. Наверняка он DOS'овский и просмотреть то что там прокручивается если сначала запустить MS-DOS (или в XP командную строку) и от туда запустить его. все ключи должны быть там описаны или в крайнем случае запустить с ключом /?



    Ответ:

    Автор ответа: crash.smolensk@fbi.net

    Просто запусти command.com и в нем запусти этот exe файл



    Ответ:

    Автор ответа: P@Ssword

    Этот конвертёр - консольное приложение, а Windows 2000 грешит тем, что автоматически закрывает консоли после завершения приложения (в Win9* обычно окно остаётся, с заголовком "Сеанс завершён"). Во избежание этого надо просто открыть консоль ручками (в W98 это "Сеанс MS-DOS", в 2000 - "Командная строка"), а в ней уже запускать приложение.


    Вопрос:

       А как создаются виртуальные диски? мне надо создать образ файловой системы, а сами файлы хранить не надо. Т.е. на моем диске система будет видеть теже файлы, что и на CD (к примеру), но при попытке доступа - из содержимое будет единым.

    Ответ:

    Автор ответа: Vitaly O. Pois

    Subst

    Устанавливает соответствие пути в файловой системе заданному диску. Вызванная без параметров, команда subst выводит имена виртуальных дисков, созданных предыдущими вызовами команды.

    Синтаксис

    subst [диск: [диск2:]путь]

    subst диск1: /d

    Параметры

       диск1:
       Задает диск, которому будет поставлен в соответствие заданный путь
       диск2:
       Задает физический диск, на который ссылается заданный путь (если не совпадает с текущим диском).
       путь
       Задает путь, который ставится в соответствие диску.
       /d
       Удаляет виртуальный диск.
       /?
       Отображает справку в командной строке.

    Примечания

       a.. Следующие команды не будут работать и не должны быть использованы с дисками, созданными командой subst:
         a.. chkdsk
         b.. diskcomp
         c.. diskcopy
         d.. format
         e.. label
         f.. recover
       b.. Параметр диск1 должен лежать в диапазоне, задаваемом командой lastdrive. В противном случае subst выведет следующее сообщение об ошибке:
       Недопустимый параметр - диск1:

    Примеры

    Чтобы создать виртуальный диск Z на пути B:\User\Betty\Forms, введите следующую команду:

    subst z: b:\user\betty\forms

    Теперь, вместо ввода полного имени, можно получить доступ к каталогу, обращаясь к диску, как показано ниже:

    z:


    Вопрос:

       Я пишу программу на подобии ICQ, но он не работает (программа не отсылает и не получает сообщения), когда включен какой-нибудь Firewall(Zone Alarm, например), можно ли firewall как-нибудь убедить, что этот порт, используемый программой, перекрывать не надо?

    Ответ:

    Автор ответа: Мунгалов Андрей

    Можно нужно смотреть правила разрешений или запретов в самом ФаирВоле просто нужно разрешить твой порт.


    Вопрос:

       Как в VB работать с ресурсами (хорошо было бы, если мне кто-нибудь прислал ссылочку на какую-нибудь статью в инете), и вообще, как вшить музыкальный файл в свою прогу?

    Ответ:

    Автор ответа: Vir

    В Samples должны быть примеры, ищи файлы .RES .RC соответственно ресурс и описание ресурсов. Описание нужно для его создания, создается с помощью проги вроде RC.EXE где то в папке VB


    Вопрос:

       Написал прогу на VB.net. Подскажите, как мне ее теперь распространять? А именно, какие файлы включать в комплект поставки? Я не использовал никаких дополнительных контролов.

    Ответ:

    Автор ответа: Vir

    В VB.net все намного сложнее чем в VB6. Во первых просто переносом файлов не отделыешся. Чтобы создать установочный пакет нужно к текушему проекту добавить еше один который будет отвечать за него, называется вроде Setup или что то в этом роде. Но даже если и создаш его то перенести на другой Win9x-Me неудастся потребует FrontPage, Internet Explorer X.X.X и т.д. вобщем нужно очень долго разбиратся.



    Ответ:

    Автор ответа: Loki

    Ну типа ты приобламался с распространением прог. Если нет на машине VB NET или Microsoft .NET Framework она не будет работать.
    А эти элементы занимают не ниеже 100МБ.
    Какой человек незная VB будет ставить себе эти компоненты. Только зря место тратить.


    Вопрос:

       Как из программы на VB проверить, установлен в WIN архиватор RAR или ZIP ? И как узнать в какой каталог он установлен.

    Ответ:

    Автор ответа: Севостьянов Игорь

    Для этого достаточно посмотреть информацию в реестре...
    И в соответствии с полученной информацией проверить наличие файлов на диске...
    А вообще-то не понятно зачем это надо ?...
    Я думаю это неверный подход к решению проблемы, но может я и оишбаюсь - все зависит от поставленной задачи (а она и не описана в вопросе)



    Ответ:

    Автор ответа: Eugene

    Я думаю, что узнать куда установлен RAR, лучше всего из реестра, в разделе:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver]

    Там есть параметр "UninstallString". Вот если этот параметр не равен пустой строке, то туда и установлен RAR. Правда нужно отсекать в этой строке имя файла.



    Ответ:

    Автор ответа: Nechaev Sergey

    Проверь в реестре ключ HKEY_CLASSESS_ROOT\.rar Посмотри на что ссылается этот ключ (параметр по умолчанию) - у меня на WinRar.Потом смотришь, что записано по адресу HKEY_CLASSES_ROOT\WinRAR(или то что у тебя нашлось на предыдущим шаге)\shell\open\command\. В параметр по-умолчанию путь к архиватору. Откинь последние символы (%1 и все такое) и получишь путь к WinRar.exe. С винзип аналогично, но ничего конкретного сказать не могу, т.к зип не установлен.


    Вопрос:

       Вот такая есть у мня трабла: надо считать с порта (ЛПТ) инфу и преобразовать её в двоичную инфу. Пример: если на порту 255 то чтобы оно дало строку 11111111 или в массив (0 то 7). Считать данные с порта я знаю, а вот как оптимальным способом преобразовать енто в двоичную систему? Пробовал через оператор InStr отслеживать запятую и т. д. - работает - но МЕДЛЕННО! скорость чтения порта упала с 400000 операций считывания до 40000 в секунду! Это очень большая потеря!

    Ответ:

    Автор ответа: Андрей Щёкин

    Интересная задача. Я полагаю, что это должно сработать:

    ' Выдаёт 0 или 1 - состояние указаного бита в передаваемом байте
    ' Нумерация битов
    ' Байт: 215 = 1 1 0 1 0 1 1 1
    ' Биты (номера): 8 7 6 5 4 3 2 1

    Public Function GetBit(ByVal Value As Byte, ByVal BitNum As Byte) As Byte
       Dim tPower As Long

       tPower = 2^(BitNum-1) ' сэкономим одно вычисление

       GetBits = CByte((Value Or tPower) \ tPower)
    End Function



    Ответ:

    Автор ответа: P@Ssword

    Function BIN(bByte As Byte) As String
    Dim Pos As Integer

         ' ї P@Ssword, 2k2

         BIN = String$(8, "0")
         Pos = 8
         While bByte
             Mid$(BIN, Pos, 1) = IIf(bByte Mod 2 = 0, "0", "1")
             bByte = bByte \ 2
             Pos = Pos - 1
         Wend


    End Function




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

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

    наверх


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

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