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

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


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

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


VBNet VBMania
Ссылки:

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

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

       Это новый выпуск.
    Читайте!


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




    Компакт-диск от VBNet!

       VBNet.RU представляет новый компакт диск "VBNet CD 02 2004".
       На диск помещены новые материалы:
    • Софт
      • .NET Framework 1.1
      • .NET Framework 1.2 Alpha
      • Декомпиляторы
      • Обфускаторы
      • Редакторы кода и среды разработки
      • Браузеры объектов
      • Автоматическое тестирование
      • XML-комментирование
      • И многое другое...

    • Сайты, рассылки, журналы - Популярные сайты, рассылки, электронные журналы о VB.
      • Сайт VBNet.Ru
      • Сайт Hypertech.Ru
      • И многое другое...

    • Коллекция компонент и DLL - Коллекция лицензионных ActiveX и .NET компонентов.
      • ComponentOne Studio .NET
      • SharpZipLib
      • FreeSMTP .NET
      • ChilkatDotNet
      • Контролы от Aspose
      • И многое другое...

    • Книги
      • Переход на VB .NET
      • Учебник по VB .NET
      • Microsoft ADO .Net Step By Step
      • Inside Csharp
      • Programming Microsoft .NET
      • И многое другое...

    • Справочники
      • Справочник по функциям Windows API
      • Microsoft Agent 2.0
      • Объектная модель FileSystemObject
      • Функции Windows API:Сообщения
      • Функции Visual Basic
      • И многое другое...

    • Эксклюзив
      • AddInTechonologySample - Пример реализации технологии подключаемых модулей (Add-in) в вашем .NET приложении.
      • FileSplitter - Приложение для разбития файла на части (и последующего соединения частей).


       В этот раз не стану говорить о том, как вырос VBNet.Ru со времени выхода последнего CD :) Скажу только, что открылся новый раздел: VBA, весь сайт целиком теперь имеет размер 178 Мб, а форум, максимально сжатый архиватором 7Zip "весит" 50 Мб!

       Кроме того, добавлен сайт нашего товарища Алексея Немиро Hypertech.ru.

       В разделе Софт я решил представить полный набор софта для .NET программиста, разбитый на категории: декомпиляторы, обфускаторы, редакторы кода и среды разработки, браузеры объектов, автоматическое тестирование, XML-комментирование. Кроме того, на диске размещена альфа-версия .Net Framework 1.2!

       В разделе Компоненты размещено 20 контролов и библиотек, среди которых вы безусловно найдёте что-нибудь полезное для себя. Большая часть компонентов распространяется как freeware, некоторые представлены с исходниками.
       Полное содержание диска Вы можете скачать здесь.

       Диск распространяется по почте наложенным платежом.
       Цена: 60 рублей + 40 рублей (за почтовые расходы) = 100 рублей. Действует система скидок для постоянных клиентов.
       Заказать диск можно здесь.



    наверх


    Как работать с вкладками TabStrip?

    Вопрос:

    Я поставил на форму Tab Strip, сделал, чтобы он был с двумя вклаками и все нормально, но я не могу разместить элементы на второй вкладке - режиме редактирования нельзя ее активизировать. Т.е., полностью отображается только первая вкладка, на вторуя перейти и разместить пару кнопок не получается. Что делать?

    Ответ:

    TabStrip- всего лишь полоска с закладками, они не являются контейнерами и не могут держать на себе ничего. В МСДН-е рекомендуют сделать несколько панелей и переключать их Visible в зависимости от того, на какой вкладке в субже кликнули. Если не хочется такого - пользуйся Microsoft Tabbed Dialog Control (надо подключить в компонентах проекта). Страшный, но уж какой есть.

    Вот, что сказано в МСДН:

    The TabStrip control is not a container. To contain the actual pages and their objects, you must use Frame controls or other containers that match the size of the internal area which is shared by all Tab objects in the control. If you use a control array for the container, you can associate each item in the array with a specific Tab object, as in the following example:

    Option Explicit
    Private mintCurFrame As Integer' Current Frame visible

    Private Sub Tabstrip1_Click()
        If Tabstrip1.SelectedItem.Index = mintCurFrame _
        Then Exit Sub ' No need to change frame.
        ' Otherwise, hide old frame, show new.
        Frame1(Tabstrip1.SelectedItem.Index).Visible = True
        Frame1(mintCurFrame).Visible = False
        ' Set mintCurFrame to new value.
        mintCurFrame = Tabstrip1.SelectedItem.Index
    End Sub

        Рязанов Андрей

    наверх


    Как в TreeView установить состояние редактиорвания?

    Вопрос:

    Подскажите как програмно можна установить Node TreeView в состояние редактирования как при клике мышью ?

    Ответ:

    Set tvwYourView.SelectedItem = YourNode
    tvwYourView.StartLabelEdit

        Andrey Shchekin

    наверх


    Как выбрать произвольное значение?

    Вопрос:

    Есть ряд значений (например 21, 3, 34, 28, 11... , всего значений 30-40). Как случайным образом выбрать одно из этих значений? И как определить, чётный номер по счёту выпал, или нет? (в данной строке 21, 34, 11 - нечётные; 3, 28 - чётные)

    Ответ:

    Пусть n - количество значений. Сами числа запишим в одномерный массив num(n). Нумерация начинается с нуля, поэтому первое число будет иметь индекс 0, последнее - n-1.

    В VB есть функция RND, при каждом вызове генерирующая случайное число на интервале (0,1). И функция Int, возвращающая целую часть числа. Формула из MSDN для генерации целого числа из диапазона:

    Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

    В нашем случае lowerbound = 0, upperbound =n-1, тогда имеем формулу для случайного индекса

    k=Int (n*Rnd)

    Для определения четности можно использовать операцию mod - остаток от деления целых чисел (Здесь k+1 - номер по порядку числа в последовательности):

    if (k+1) mod 2 = 0 then s="Четное" else s= "Нечетное"

        Mark

    наверх


    Как выбрать случайную букву?

    Вопрос:

    Как из набора букв "а,б,в,г" случайным образом выбрать одну?

    Ответ:

    Const strS as String = "абвг" ' 4 символа в исходной строке
    n=Int(RND*4)+1
    strOut = Mid$(strS, n, 1)

        Mark

    наверх


    Что нужно сделать, чтоб шрифты в VB отображались правильно?

    Вопрос:

    Как обычно запустил ВБ (ничего не трогал, не лазил в настройки), ну и попробовал написать, например, вот так:

    msgbox "Привет Рома"

    а он пишет вместо кирилицы иероглифы. Но, после запуска проги вискакивает нормальний MsgBox, причем в нем все написано как надо!
    Конечно можно переставить ВБ, но ведь это не выход.

    Ответ:

    Tools - Options - Editor Format - Font - Courier New Cyr

        Maksim Knyshow

    Это - проблема на ровном месте, созданная Microsoft. Просто VB по умолчанию использует некириллический шрифт. Попробуй так: Tools -> Options -> [Вторая вкладка]. Там будет списочек шрифтов. По умолчанию стоит Courier. Я поставил Courier New и все заработало.

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

    наверх


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

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

    Вопросы:


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

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

       При запуске программы и обработки строки:

    Set Reg = CreateObject("WScript.Shell")

    выскакивает ошибка 429 "ActiveX component cant create object".
    На других компьютерах работает без проблемм. Подскажите, в чем причина, или какой компонент нужно установить.


    Автор вопроса: Андрей

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

       Существует ли функция перевода значения переменной типа String в обычное функциональное выражение.
    Например:

         A = "cos(x) + 7"
         x = 3.1415926
         B = Функция(A)
         
    Ответ: B = 6 (cos(3.1415926)=-1 - прим.)


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

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

       Я не так давно начал работать с БД через ODBC. Как программно создать новый источник данных? Через DSN?


    Автор вопроса: Макс

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

       Возникает проблема…, вернее нужно: считать все данные из файла и вывести их в PopupMenu, при этом каждая строчка в файле должна соответствовать одной строчке в меню. Задача состоит в том, чтобы при нажатии на строке в меню соответствующий текст появлялся в текстовом поле.


    Автор вопроса: Михаил

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

       Вояможно ли заполнение DBCombo аналогично тегу


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

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

       Что за ошибка 62 Input past end of file
                     (Ввод за меткой конца файла)

    Есть res файл. Ошибка появляется из-за него. В чем суть?


    Автор вопроса: Dmitiy S

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

       Вопрос по ASP.NET DataSet:

    Создаю OleDbDataAdapter1, OleDbConnection1 и наконец DataSet11. Пишу в Private Sub Page_Load ...

    Me.OleDbDataAdapter1.Fill(DataSet11)

    и страница перестает груяиться. (Та же история в VB.Net). Что тут не так? И как перебрать записи в DataSet11? Может у кого примерчики есть.


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

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

       Кто-нибудь знает контрол для перевода mp3 в real audio (cda)?


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

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

       Сделал прогамму для работы с базой данных sql. Данные вывожу в форму в текстовые и др. поля. Проблемы с выводом отчета. Кто знает, можно ли использовать Data Report для вывода информации из текстовых полей, а не соединяться с базой данных через Data environment?




    Ответы:


    Вопрос:

       Хочу попробовать сделать прогу для сына, что-то типа разукрашки картинок. Файлы элементарно скачиваются с детских сайтов. Сами файлы представляют из себя как бы черно-белый чертёж, т.е. только контуры предмета. Хотелось бы, чтобы ребёнок выбрав нужный цвет своей виртуальной кисточки и поднеся её к нужному участку "чертежа" и нажав кнопку мыши, залил выбранным цветом именно этот участок нашего "чертежа"... Что можете посоветовать?

    Ответ:

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

    ' Наверно, это проще сделать через API, но API Viewer'a под рукой нет...
    ' Помниться, еще в GW Basic была функция Paint...
    ' Прошу учесть, что все это писалось в состоянии сильного алкогольного опьянения,
    ' так что за большой и медленный код прошу не ругать :)
    '
    ' Я решил, что для ребенка лучше использовать метод "Карандашной заливки", т.е.
    ' заливка производится только в районе "доступности штриха", не перепрыгивая через контуры.
    ' Это, имхо, должно показать ребенку суть самого рисования.
    ' Если возникнут вопросы - пиши на мыло.
      
    ' Помести на форму объект PictureBox и дай ему название Picture1
    ' Установи у объекта Picture1 свойство ScaleMode=3 (Пиксель)
    ' Загрузи в Picture1 любой рисунок. Например Picture1.Picture=LoadPicture("C:\MyPic.bmp")
      
    ' BrushColor - цвет кисти (заливка)
    ' MaskColor - цвет контурных линий (чтобы случайно их не залить)
      
    '
      

    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
      

    Sub Paint(x, y, BrushColor, MaskColor)
      
    PointColor = GetPixel(Picture1.hdc, x, y)
    If PointColor = LineColor Then Exit Sub
    For h = 1 To Picture1.Height
    c = GetPixel(Picture1.hdc, x, y + h)
    If c <> PointColor Then GoTo n
    For i = 0 To Picture1.Width: c = GetPixel(Picture1.hdc, x + i, y + h): If c <> PointColor Then GoTo n1
    If c = PointColor Or BrushColor Then Picture1.PSet (x + i, y + h), BrushColor
    Next
    n1: For i = 1 To Picture1.Width: c = GetPixel(Picture1.hdc, x - i, y + h): If c <> PointColor Then GoTo n2
    If c = PointColor Or BrushColor Then Picture1.PSet (x - i, y + h), BrushColor
    Next
    n2: Next h
    n: For h = 0 To Picture1.Height
    c = GetPixel(Picture1.hdc, x, y - h)
    If c <> PointColor Then GoTo nn
    For i = 0 To Picture1.Width: c = GetPixel(Picture1.hdc, x + i, y - h): If c <> PointColor Then GoTo n3
    If c = PointColor Or BrushColor Then Picture1.PSet (x + i, y - h), BrushColor
    Next
    n3: For i = 1 To Picture1.Width: c = GetPixel(Picture1.hdc, x - i, y - h): If c <> PointColor Then GoTo n4
    If c = PointColor Or BrushColor Then Picture1.PSet (x - i, y - h), BrushColor
    Next
    n4: Next h
    nn: End Sub
      

    Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Paint x, y, RGB(0, 140, 0), RGB(0, 0, 0)
    End Sub



    Ответ:

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

    Используй API функцию:
      
    Public Declare Function ExtFloodFill Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXStart As Long, ByVal nYStart As Long, ByVal crColor As Long, ByVal fuFillType As Long) As Long
    ' Константа нужная для заливки:
    Public Const FLOODFILLSURFACE = 1
      
    Примерчик:
      
    Private Sub Form_Load()
         Im.ScaleMode = vbPixels
         Im.AutoRedraw = True
    End Sub
      
    Private Sub Im_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
         Im.Fillstyle="Shift"
         Im.FillColor = Button * 1650 ' Это число я взял так, от фонаря...
         ExtFloodFill Im.hdc, X, Y, Im.Point(X, Y), FLOODFILLSURFACE
    End Sub
      
    Попробуй пощёлкать разными кнопками, попробуй во время клика удерживать Alt, Ctrl...
      
    Имеется в виду, что IM - PictureBox.


    Вопрос:

       Подскажите алгоритм перебора сочетаний из множества M по N элементов (без повторений). Пишу генератор ставок в лото 5 из 36.

    Ответ:

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

    Алгоритм писался из головы не в IDE, но должен работать.

    public Mass(4) as byte

    sub XXX()
    dim i,j,k,l,m
    dim Kol_vo as integer
    dim MassStr as string
    for i=1 to 36
         for j=1 to 36
             if Check(1,m) then mass(1)=j
             for k=1 to 36
                 if Check(2,m) then mass(2)=k
                 for l=1 to 36
                     if Check(3,m) then mass(3)=l
                     for m=1 to 36
                         if Check(4,m) then mass(4)=m: Kol_vo=kol_vo+1: Massstr=Massstr & mass(0) & mass(1) & mass(2) & mass(3) & mass(4) & vbcrlf
                     next i
                 next j
             next k
         next l
    next m
    msgbox "Список всех " & Kol_vo & " решений" & vbcrlf & massstr
    end sub

    function Check(Index as byte, Value as byte) as boolean
    dim ii as byte
    for ii=0 to index-1
         if mass(ii)=value then Check=false else Check=true: exit for
    next ii
    end function



    Ответ:

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

    Достаточно открыть справочник по математики Раздел "Комбинаторика". Там нужно использовать расчет факториала (n!). А потом пару-тройку раз умножение-деление.


    Вопрос:

       Как сделать так, чтобы данные считывались с файла не строками (input line), а весь текст сразу?

    Ответ:

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

    open "c:\1.xxx" for binary as #1
    dim strBuffer as string
    strbuffer=space(lof(1))
    get #1,,strbuffer

    В переменной strBuffer будет весь твой файл.



    Ответ:

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

    ' Открытия файла для чтения информации в файле:
    ' Текст из файла записывается в переменную MyText
    Open "C:\Sys.ini" For Input As #1
    MyText = Input(FileLen("C:\Sys.ini"), #1)
    Close



    Ответ:

    Автор ответа: Роман

    Public BinData() As Byte
    open _файл_ for binary as #1
    ReDim BinData(0 To LOF(1) - 1)
    Get #1, , BinData()
    close #1

    Теперь в BinData() у вас весь файл.



    Ответ:

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

    Private Sub Command1_Click()
    Dim txt
    Dim FN As Integer
    FN = FreeFile
    Dim FName As String
    FName = "D:\1.txt"
    'открыть файл
    Open FName For Input As #FN
    'присвоить переменной содержимое файла
    txt = Input(LOF(FN), #FN)
    'закрыть файл
    Close #FN
    'создать нулевой массив
    Dim str1() As String
    'создать отдельные элементы массива
    'вместо постоянной vbCrLf можно использовать любой разделить
    str1 = Split(txt, vbCrLf)
    'перебор элементов массива идет от 0 до n-1
    For i = 0 To UBound(str1()) - 1
    'вот, собстенно, и проверка
    MsgBox str1(i)
    Next
    End Sub


    Вопрос:

       Как определить, на каком диске хранится операционка?

    Ответ:

    Автор ответа: Роман

    Переменная среды - windir

    left$(environ$("windir"),3) - даст, например, "C:\"



    Ответ:

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

    Environ("windir")

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


    Вопрос:

       Как встроить ProgressBar в StatusBar?

    Ответ:

    Автор ответа: Роман

    Можно попробовать так (сам не пробовал):

    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    hwnd=FindWindowEx(Me.hwnd, 0&, "_Класс_статусбара_", vbNullString)

    _Класс_статусбара_ можно узнать через Spy++ (утилита в составе студии). Если класс находится внутри другого класса, то нужно так:

    hwnd=FindWindowEx(Me.hwnd, 0&, "_верхний_класс_", vbNullString)
    hwnd=FindWindowEx(Me.hwnd, 0&, "_подчиненный_класс_", vbNullString)
    ...
    hwnd=FindWindowEx(Me.hwnd, 0&, "_класс_статусбара_", vbNullString)

    Затем с помощью SetParent установить ProgresBar как дочернее к StatusBar'у.


    Вопрос:

       Как мне передать команду в меню "Выполнить"?

    Ответ:

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

    shell "команда"


    Вопрос:

       Как сделать так, чтобы когда форма максимально раскрыта, текстбокс на ней раскрывался вместе с ней, то есть было по 5 пикселей с каждой стороны?

    Ответ:

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

    Всё это надо ручками прописывать. А лучше – мой Вам совет переходите на .NET – там и это делается элементарно (Anchor) да вообще всё намного качественнее получается.



    Ответ:

    Автор ответа: Макс

    Все очень просто:

    Private Sub Form_Resize()
    'Происходит при любом изменении размера формы.
    On Error GoTo 1 'На случай, если размер формы очень маленький.
    Text1.Width = Me.Width - a
    Text1.Height = Me.Height - b
    'Вместо a и b подставь нужные тебе числа.
    'Учти, что a - длина отступа от Text1 слева + отступа справа.
    'b - длина отступа от Text1 сверху + отступа снизу.
    Exit Sub
    1
    End Sub



    Ответ:

    Автор ответа: Роман

    В Form1_Resize добавьте код:

    if Form1.WindowState=2 then
    TextBox1.width=Form1.scalewidth
    TextBox1.height=Form1.scaleheight
    end if



    Ответ:

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

    В событие resize впиши нужный код.

    Combo.left=5
    Combo.wight=me.wight - 10
    Comob.top=5
    Combo.height=me.height-10




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

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

    наверх


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

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


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

    В избранное