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


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



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

Ссылки:

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

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

       Свежий выпуск. Извините, что задержался...
    Читайте!


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




    Citycat by Email

       Программа Citycat by Email позволяет работать с сервером Subscribe.ru с помощью электронной почты. Теперь Вам не нужно тратить деньги на работу в online и просматривать мегабайты рекламы для того, чтобы подписаться на нужную рассылку! Вам просто необходимо скачать небольшую базу данных по всем рассылкам каталога с нашего сайта, после чего Вы сможете подписываться и отписываться от рассылок, заказывать архивы прошлых выпусков, выполнять поиск по каталогу рассылок и многое другое.
       Программу Citycat by Email можно бесплатно загрузить с сайта http://sapisoft.h1.ru.

    наверх


    Новости сайта VBNet

    Дата: 02.11.2003 06:01 | Раздел: Полезные программы | Автор: stepans

    Русификатор VB6 v.3 - Новая версия русификатора для VB6 IDE. Переведены все диалоги, меню. Программа при установке требует пароль. Найти его можно на главной странице сайта stepansel.by.ru.



    Последние 20 тем форума на VBNet.Ru:

    05:43 / 9 ноя.  Кто знает! | Хитов: 1 |  Ответов: 0
    03:29 / 9 ноя.  Частота обновления таблицы в EXCEL | Хитов: 0 |  Ответов: 0
    16:07 / 8 ноя.  Клавиатурный шпион | Хитов: 16 |  Ответов: 1
    15:10 / 8 ноя.  ListView&Win32Api | Хитов: 5 |  Ответов: 0
    14:53 / 8 ноя.  ..::Заставка ::.. | Хитов: 44 |  Ответов: 7
    13:33 / 8 ноя.  Как поймть ошибку при выполнении ADODC.Recordes... | Хитов: 7 |  Ответов: 0
    11:58 / 8 ноя.  Самоудаление | Хитов: 20 |  Ответов: 1
    10:59 / 8 ноя.  плеер | Хитов: 11 |  Ответов: 0
    10:55 / 8 ноя.  Словари | Хитов: 17 |  Ответов: 1
    10:53 / 8 ноя.  Сочетание клавиш | Хитов: 13 |  Ответов: 1
    07:56 / 8 ноя.  Вечный вопрос: анализатор звука | Хитов: 132 |  Ответов: 3
    07:32 / 8 ноя.  Новая вкладка в свойствах файла | Хитов: 24 |  Ответов: 1
    06:18 / 8 ноя.  ASTON 1.9 | Хитов: 12 |  Ответов: 1
    04:45 / 8 ноя.  Новое сообщение без темы | Хитов: 1 |  Ответов: 0
    03:03 / 8 ноя.  5 иконок | Хитов: 44 |  Ответов: 7
    02:42 / 8 ноя.  помогите с USB | Хитов: 13 |  Ответов: 1
    02:09 / 8 ноя.  Ocherednoi vopros:) | Хитов: 30 |  Ответов: 4
    01:13 / 8 ноя.  Удаление программы из таска в ВИН 2к\ХР | Хитов: 27 |  Ответов: 7
    01:13 / 8 ноя.  Vkljuchenie kompa | Хитов: 33 |  Ответов: 7
    00:30 / 8 ноя.  Новое сообщение без темы | Хитов: 3 |  Ответов: 0


    Последние поступления в Библиотеку кодов:

    Как получить имена всех дисков (60)


    наверх


    Новости сайта MSDN



    наверх


    Новости сайта GotdotNet



    Новые статьи:



    наверх


    Новости сайта dotSite

    Новые статьи:



    Новые примеры:



    наверх


    Один момент из жизни форума: TreeView в VB.NET

    Вопрос:
    Автор вопроса: .COM

       Есть дерево:

    Предприятие1
    ...........Выручка
    ...........Затраты
    ...........Адрес
    ...........и т.д.
    Предприятие2
    ...........Выручка
    ...........Затраты
    ...........Адрес
    ...........и т.д.
    Предприятие N
    ...........и т.д.

       Короче, предприятий может быть сколько угодно. Свойство Text у всех дочерних нод одинаковое (т.е. по этому свойству невозможно однозначно идентифицировать дочернюю ноду). В свойстве Tag для родительской ноды (Предприятие) записываются названия таблиц в базе данных.
       Таким образом, предположим получаем такую ситуацию...Юзер развернув несколько веток Предприятие1, Предприятие6, Предприятие28, думает чего бы ему посмотреть, а потом щелкает по какой-либо дочерней ноде.
       А вот и собственно вопросы:
       Как, блин, определить к какому родителю относится дочерняя нода, чтоб соответственно считать ее Tag и отправить запрос в базу...?
       Как программно найти/выделить определенную ноду (т.е. есть ли у каждой ноды уникальный идентификатор с точки зрения всего контрола независимо от того родительская она или дочерняя)?
       P.S. Теоретически (хоть и маловероятно) может случится ситуация когда и наименования родителей (Предприятия) будут одинаковыми, поэтому не подходит такой вариант как считать из дочерней ноды путь и вытащить оттуда наименование родителя...В идеале хотелось бы иметь уникальный идентификатор для каждой ноды в контроле. (еще один вопрос)


    Ответы:

    Автор: Svetlana
       Dim pr1 As TreeNode
    Dim pr2 As TreeNode

    pr1 = New TreeNode("predpr1")
    pr2 = New TreeNode("predpr2")

    Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    If e.Node.Parent Is pr1 Then
    'ВЫбрали "predpr1"
    Select Case e.Node.Index
    Case 0

    Case 1

    End Select
    End If
    If e.Node.Parent Is pr2 Then
    'ВЫбрали "predpr2"
    Select Case e.Node.Index
    Case 0

    Case 1

    End Select
    End If

    End Sub



    наверх


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

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

    Вопросы:


    Автор вопроса: Blackday9@mail2000.ru

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

       Как в VBA создать DLL?


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

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

       Друзья! Не могу докопаться до причины! У меня сетка TrueDBGrid подключена к базе через Data-элемент (используется DAO). Она добавляет записи, удаляет, обновляет. Если я делаю отдельно запрос к той же базе через коннект к ней и обыкновенный SQL-запрос (при этом сетка остается подключенной), то не всегда только что введенные записи отображаются в этом стороннем запросе. Т.е. как бы должно пройти время между только что введенными данными и созданием запроса со стороны, а моментально эти данные не попадают в базу. Никакие средства не помогают устранить эту проблему


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

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

       Как запретить пользователю изменять размеры стандартной MDI формы (640*480) и разворачивать ее на весь экран? Изменять размеры после "ресайза" не предлагать.


    Автор вопроса: Мартынова Н. В.

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

         На форме есть CommandButton1 и Label1.
      Необходимо добавить CommandButton2 при нажатии CommandButton1:

    Dim Mycmd as Control
    Private Sub CommandButton1_Click()

         Set Mycmd = Controls.Add("MSForms.CommandButton.1") ', CommandButton2, Visible)
         Mycmd.Left = 18
         Mycmd.Top = 150
         Mycmd.Width = 175
         Mycmd.Height = 20
         Mycmd.Caption = "This is fun." & Mycmd.Name
         
    End Sub

    Private Sub UserForm_AddControl(ByVal Control As _
         MSForms.Control)
         Label1.Caption = "Control was Added."
    End Sub

      Что и как исправить в программе (выдает: несоответствие типов)?


    Автор вопроса: Леонов А.

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

       Как мне можно определить версию Bios?


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

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

       А как программно сделать моё окно активным? Me.SetFocus - не помогает... Пробовал АПИ GetFocus, SetFocus, SetActiveWindow - тоже самое... Может кто подскажет?


    Автор вопроса: Роганов Владимир

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

       Как создавать заставки? Если можно с примерчиком.




    Ответы:


    Вопрос:

       Есть форма на ней TextBox и Кнопка. В TextBox вводим число, например, "1.3", как сделать, чтоб при нажатии на кнопку "1.3" изменился на
      "1,3" и внеся в TextBox?

    Ответ:

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

    textbox.text=replace(textbox.text,".",",")


    Вопрос:

       Я написал незамысловатую программу на VB .Net (у меня стоит VS .Net 2003) мне надо, что бы она работала под любой Windows. Как это сделать?

    Ответ:

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

    Переписать программу, например, под VB 6.
    .NET - специально только для современных "замысловатых" NT-клонов.


    Вопрос:

       Как, с помощью VB6, отправить файл (через интернет) с удалённого компьютора, на мой. Желательно, чтобы на другом компьюторе передача файла была незаметной.

    Ответ:

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

    Посадить за другой "компьютотор" лоха, которого лично обучить, которому лично передать и настроить свою же программу на указанную функцию и указанный адрес. Иначе такого рода "вирусы" отлавливаются а) антивирусом, б) файерволом. У меня на компьютере, как и у моих приятелей такие штуки стоят у всех. У меня eTrust EZ Antivirus + Zonealarm. Сейчас, "после 11-го сентября" без таких презервативов мало-мальски обученный или ведомый опытным куратором пользователь выходить в интернет просто не должен, о чём я рассказываю всем своим - да и чужим тоже - абонентам. Тем более, Win XP уже содержит в себе файервол, который активизируется всего-то галочкой "защитить моё интернет-соединение".


    Вопрос:

       Как сделать так, чтобы при нажатии на кнопку программа копировала сама себя в другую директорию? И из новой директории яапускала себя.

    Ответ:

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

    filecopy "откуда и что", "куда"
    shell "что"


    Вопрос:

       Установил пакет исправлений для Win2k - KB823980 (якобы помогает от вируса Blaster). После этого во фрагменте кода
    .........
    Set obExcel = New Excel.Application
    obExcel.SheetsInNewWorkbook = 1
    Set obBook = obExcel.Workbooks.Add
    .........
    на второй строке происходит Automation error. Удаляю пакет обновлений - и всё работает, как часы. Как установить пакет обновлений и чтобы работал приведенный фрагмент кода?

    Ответ:

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

    У меня стоит этот пакет, а ошибки такой не выдает.


    Вопрос:

       Как в VB отсортировать массив чисел?

    Ответ:

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

    Держи свежеслеплено:

    'Сортировка по возростанию
         Dim a() As Variant
         Dim i As Integer
         Dim j As Integer
         Dim sWP As Double 'Aey iaiaia
         a = Array(2, 4, 5, 1, -1, 7, 6)
         For i = 0 To UBound(a)
             For j = i To UBound(a)
                 If a(j) < a(i) Then
                     sWP = a(i)
                     a(i) = a(j)
                     a(j) = sWP
                 End If
             Next j
         Next i
         For i = 0 To UBound(a)
             Debug.Print i; "|"; a(i)
         Next i



    Ответ:

    Автор ответа: Данила

    Предлагаю следующее:

    'Добавь на форму Список1, Комманда1, Комманда2, Комманда3

    Private Sub Комманда1_Click()
    Список1.Clear
    For i = 0 To 1000
         Список1.AddItem Rnd(100) * 100
    Next
    End Sub

    Private Sub Комманда2_Click()
    Dim флаг As Boolean 'флаг показывает, были изменения или нет
    Do
    флаг = False 'если изменений небыло, то сортировка закончина
    For i = 0 To Список1.ListCount - 2 'проходим по всему списку
         If CDec(Список1.List(i)) < CDec(Список1.List(i + 1)) Then 'само
    сравнение
             a = Список1.List(i + 1) 'дальше идут действия
             Список1.RemoveItem (i + 1) 'если числа нужно поменять местами
             Список1.AddItem a, i
             флаг = True 'фиксируем изменение
         End If
    Next
    DoEvents 'чтоб успевало отоблазиться
    Loop While (флаг = True) 'проверяем флаг
    MsgBox "Готово!"
    End Sub

    Private Sub Комманда3_Click()
    i = 0 'указывает строку, на которой остановились
    Do Until i >= Список1.ListCount
         Max = CDec(Список1.List(i)) 'содержит максимально-найденное число
         Index = i 'содержит его положение
         For j = i To Список1.ListCount - 1 'поиск максимального числа по всему
    списку
             If CDec(Список1.List(j)) > Max Then
                 Max = CDec(Список1.List(j))
                 Index = j
             End If
         Next
         If i <> Index Then
             a = Список1.List(Index) 'дальше идут действия
             Список1.RemoveItem (Index) 'если числа нужно поменять местами
             Список1.AddItem a, i
         End If
         i = i + 1
         DoEvents 'чтоб успевало отоблазиться
    Loop
    MsgBox "Готово!"
    End Sub


    Вопрос:

       Как средствами VB зарегистрировать в Windows библиотеку DLL и проверить, что она зарегистрирована?

    Ответ:

    Автор ответа: Сан Саныч

    Можно использовать такую ф-ию:

    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function CreateThread Lib "kernel32" (anyThread As Any, ByVal lngSize As Long, ByVal lngStart As Long, ByVal lngValue As Long, ByVal lngFlags As Long, lngThread As Long) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal lngModule As Long, ByVal strName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal lngModule As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal lngHandle As Long) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal lngHandle As Long, ByVal lngTime As Long) As Long

    Public Sub Reg(ByVal DLLforRegistre As String, Optional ByVal RegorUnreg As Boolean = True)
    Dim hNd As Long, HnnD As Long

         HnnD = LoadLibraryA(DLLforRegistre)
         hNd = CreateThread(ByVal 0, 0, ByVal GetProcAddress(HnnD, IIf(RegorUnreg, "DllRegisterServer", "DllUnregisterServer")), ByVal 0, 0, 0)
         WaitForSingleObject hNd, 10000
         CloseHandle hNd
         FreeLibrary HnnD
    End Sub

    Ппроверяем зарегистрирована библиотека или нет:

         Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
         Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

    Public Function isDLLReg(ByVal TM As String)As Boolean
    Dim hModule As Long

         hModule = LoadLibrary(TM) 'attempt to load DLL
         If hModule > 32 Then
             FreeLibrary hModule 'decrement the DLL usage counter
             isDLLReg = True 'Return true
         Else
             isDLLReg = False 'Return False
         End If
    End Function



    Ответ:

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

    Зарегестрировать - Shell "RegSvr PathToDLL".


    Вопрос:

       Для программирования баз данных Майкрософт предлагает вб-программистам такие гриды как:

    MSFlexGrid
    MSHFlexGrid
    Grid
      
    К сожалению ни один из них (по многим причинам) меня не устраивает (они мне кажутся какими-то не представительными).
    Я видел много баз данных, где используются очень симпатичные, с невероятными возможностями, гриды.
    Будьте добры, подскажите, где можно скачать или приобрести, например, такой грид как в программе Телефонный справочник (Semantica)?

    Ответ:

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

    Раньше тоже мучала такая же проблема. Сейчас уже проблем нет: или VSFlexGrid 8.0 или TrueDBGrid 7.0. Возможностей море. Если програмишь под .NET, то у Infragistics много красивых таблиц.


    Вопрос:

       Прошу прошения, если вопросы покажутся банальными. Просто я только начинаю изучать VB.
    Как сделать так, чтобы объекты Сombo в которых отображаются, шрифт и размер шрифта работали так же как и в Worde. Т.Е. если ставлю курсор на любое место в тексте, а в объектах Combo должно отражаться использованный шрифт и размер шрифта.

    Ответ:

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

    Для того, чтоб отобразить в ComboBox'e размер шрифта и тип шрифта, надо использовать RichTextBox и два ComboBox'a.
    Например:

    Private Sub RichTextBox_Click()
    Combo1.Text = RichTextBox1.SelFontName 'Показывает тип шрифта
    Combo2.Text = RichTextBox2.SelFontSize 'Показывает размер шрифта
    End Sub

    А при перемещения курсора клавиатурой или ввода символов:

    Private Sub RichTextBox_Change()
    Combo1.Text = RichTextBox1.SelFontName 'Показывает тип шрифта
    Combo2.Text = RichTextBox2.SelFontSize 'Показывает размер шрифта
    End Sub

    Тут Combo1 и Combo2 - ComboBox'ы, имена могут быть другие, а RichTextBox1 - RichTextBox.



    Ответ:

    Автор ответа: Александр Юрьевич

       Например, чтобы установить название шрифта можно сделать так (код разместить в процедурах Change и Click текстового поля):

         ...
         Combo1.Text = Text1.FontName
         ...

       Соответственно для получения размера шрифта используй свойство FontSize



    Ответ:

    Автор ответа: Vladimir [PRC]

    Предполагается, что в cmdFont загружены имена всех шрифтов в системе, а в cmdSize все размеры шрифтов, а текст хранится в txtText типа RichTextBox. Для обычного TextBox меняются .Font.Size на .FontSize и Font.Name на .FontName. Обрабатываются изменение положения курсора в тексте: Click, DoubleClick, KeyDowm
      
    Private Sub txtText_KeyDown(KeyCode As Integer, Shift As Integer)
    ' Можно было бы отслеживать нажатие именно курсорных клавиш, но проще каждый раз вызывать подпрограмму
    ' смены имени шрифта и размера.
    txtText_Click
    End Sub
    Private Sub txtText_DoubleClick()
    txtText_Click
    End Sub
    Private Sub txtText_Click()
    Dim sFont As String, iSize As Integer
    Dim i As Integer
    sFont = txtText.Font.Name ' Получение названия шрифта
    For i = 0 To cmdFont.ListCount - 1
    If sFont = cmdFont.List(i) Then GoTo ExitFont 'Поиск названия шрифта
    Next i
    ' На такой редкий случай, что шрифт был добавлен в систему после запуска программы и именно он используется
    ' добавляем в ListBox новое название и устанавливаем индекс
    cmdFont.AddItem sFont
    i = cmdFont.ListCount - 1
    ExitFont:
    ' Шрифт найден
    ' Устанавливаем индекс на шрифт
    cmdFont.ListIndex = i
    ' Для размера шрифта поступаем точно также
    iSize = txtText.Font.Size
    For i = 0 To cmdSize.ListCount - 1
    If iSize = cmdSize.List(i) Then GoTo ExitSize
    Next i
    cmdSize.AddItem iSize
    i = cmdSize.ListCount - 1
    ExitSize:
    cmdSize.ListIndex = i
    End Sub

    И на всякий случай, получение всех шрифтов установленных в системе:
      
    Dim i As Integer
    For i = 0 To Screen.FontCount - 1
    cmdFont.AddItem Screen.Fonts(i)
    Next i
    cmdFont.ListIndex = 0


    Вопрос:

       Основная форма моей программы должна находится у правого края экрана, в таймере я пишу:

    Me.Left = Screen.Width - Me.Width.

    Но когда я запускаю какую-нибудь игрушку/прогу, работающую в полноэкранном режиме с расширением меньше моего, она опять настраивается по краю экрана, но вот когда я вырубаю эту игрушку/прогу форма обратно уже не идёт, стоит где-то ближе к середине. Как это исправить?

    Ответ:

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

    Эту строку нужно писать в свойстве Resize или GotFocus формы, а вы, наверное, в Load.



    Ответ:

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

    Вся проблема в том, что значение св-в Screen.Width и Screen.Height вычитывается во время запуска программы и потом не меняется даже если разрешение изменилось.
    Для таких случаев нужно юзать API.GetSystemMetrics с параметрами SM_CXFULLSCREEN, SM_CYFULLSCREEN



    Ответ:

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

    Интересно, а обработка в Form_Activate не помогает?


    Вопрос:

       Пишу курсовую работу по "Базам данных" нужны справки, коды. Если у кого есть готовые коды по созданию базы данных для библиотеки, вышлите, очень прошу.

    Ответ:

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

    Готовых библиотек много. Полагаю, будет дано много адресов. Для ответа на вопросы по БД я высоко ценю, например, http://vbaccelerator.com/. Он на американском языке.


    Вопрос:

       Имеется ряд компьютеров в локальной сети. На одном из них находится некая программа. Каким образом можно с этого компа запустить эту прогу на любом компе в сети?

    Ответ:

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

    Универсального рецепта не дам. Зависит от архитектуры конкретной программы. Если вы знаете, какие COM-ресурсы ей нужны, то обеспечьте доступ к этим ресурсам. Если же ей нужны DLL, то вопрос усложняется. Зависит от характеристик затребованного компонента. Примерно также обстоят дела с различными ActiveX. Возможно, в скором будущем программа будет продаваться в виде какой-либо электронной коробочки. И тогда не нужно ломать голову: взял и купил, если есть за что и есть для чего :-) Т.е. более-менее проблема легче решается, если вы сами написали эту программу и знаете, как она работает:)




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

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

    наверх


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

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