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


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

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



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

Ссылки:

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

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

       звините, что опоздал... Вчера склепал несколько кодов. Только вот, мне ближе .NET, поэтому сегодня коды касаются программирования под .NET Framework (за исключением первого кода).
    Читайте!


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




    Книги

    Переход на 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 можно найти здесь.

    наверх


    Очистка всех листбоксов на форме

    Процедура, очищающая все листбоксы, распооженные на указанной в параметре frmTarget форме.

    Public Sub ClearListBoxes(frmTarget As Form)
         Dim i As Integer
         Dim j As Integer
         Dim ctrltarget As Object


         For i = 0 To (frmTarget.Controls.count - 1)
             Set ctrltarget = frmTarget.Controls(i)

             If TypeOf ctrltarget Is ListBox Then
                 ctrltarget.clear
             End If
         Next i
    End Sub

    наверх


    Получение текущей строки DataGrid

    Очень часто требуется получить строку (DataRow), выделенную в DataGrid. Можно было бы просто получить строку из коллекции Rows объекта DataTable с индексом равным свойству CurrentRowIndex грида, но это будет работать, только если грид не отсортирован. Иначе индекс строки грида и индекс в коллекции Rows не совпадут.
    Предлагаю вам 2 функции. Вункция GetCurrentRow возвращает текущую строку DataGrid'а, указанного в параметре функции. А функция GetRow позволяет получить строку с произвольным номером.

    Public Function GetCurrentRow(ByVal Grid As DataGrid) As DataRow
         Dim cm As CurrencyManager = CType(Grid.BindingContext(Grid.DataSource, Grid.DataMember), CurrencyManager)
         Dim drv As DataRowView = CType(cm.Current, DataRowView)
         Return drv.Row

    End Function

    Public Function GetRow(ByVal Grid As DataGrid, ByVal ID As Integer) As DataRow
         Dim cm As CurrencyManager = CType(Grid.BindingContext(Grid.DataSource, Grid.DataMember), CurrencyManager)
         Dim dv As DataView = CType(cm.List, DataView)
         Dim drv As DataRowView = dv(ID)
         Return drv.Row

    End Function

    наверх


    Получение объекта Graphics для PictureBox

    Небольшая, но несомненно полезная функция. Заимствована мной из книги Евангелоса Петрусоса "Эффективная работа с Visual Basic .NET". Она создаёт объект Graphics для заданного объекта PictureBox.

    Public Function GetGraphicsObject(ByVal pic As PictureBox) As Graphics
         Dim bmp As Bitmap
         bmp = New Bitmap(pic.Width, pic.Height - 50)
         pic.Image = bmp
         Dim G As Graphics
         G = Graphics.FromImage(bmp)
         Return G
    End Function

    наверх


    Отправка письма средствами TheBat!

    Для своего проекта я когда-то сделал очень полезную процедуру. Она создаёт письмо и закидывает его в папку OutBox почтовика TheBat!. Заодно вы научитесь производить запись файлов и запускать процесс. Писал я этот код для себя, поэтому в некоторых местах требует доработки. Во-первых, следует изменить имя ящика, куда мы закидываем письмо (у меня он называется "Main"). Во-вторых, нужно предварительно проверить, где лежит TheBat.exe.
    Опс... Чуть не забыл: нужно ещё положить рядом с вашим exe файл с именем msg.tpl. Он приведён ниже. Это шаблон файла .msg, который будет импортирован в папку OutBox.

    Процедура отправки письма:

    Private Sub SendMess(ByVal Text As String, ByVal subject As String, ByVal Name As String, ByVal Email As String)
         Dim tpl As String
         Dim mess As String
         Dim fs As IO.FileStream
         Dim sr As IO.StreamReader
         Dim sw As IO.StreamWriter

         fs = New IO.FileStream(System.AppDomain.CurrentDomain.BaseDirectory & "msg.tpl", IO.FileMode.Open, IO.FileAccess.Read)
         sr = New IO.StreamReader(fs, System.Text.Encoding.GetEncoding(1251))
         tpl = sr.ReadToEnd()

         mess = Replace(tpl, "[text]", Text)
         mess = Replace(mess, "[subject]", subject)
         mess = Replace(mess, "[now]", Now.ToString("r"))
         mess = Replace(mess, "[to]", Name & " <" & Email & ">")

         fs = New IO.FileStream("C:\ temp.msg", IO.FileMode.Create, IO.FileAccess.Write)
         sw = New IO.StreamWriter(fs, System.Text.Encoding.GetEncoding(1251))
         sw.Write(mess)
         sw.Close()
         fs.Close()

         Process.Start("C:\Program files\The Bat!\thebat.exe", "/IMPORTF=""\\Main\Outbox"";FILE=C:\temp\temp.msg;READ") 'Здесь следует подправить путь к TheBat.exe и название почтового ящика

    End Sub


    Файл msg.tpl. Тут тоже следует кое-что подправить (поля From и Reply-To).

    Date: [now]
    From: Your name <vasya@pupkin.ru>
    X-Mailer: MyProgram
    Reply-To: Your name <vasya@pupkin.ru>
    X-Priority: 3 (Normal)
    To: [to]
    Subject: [subject]
    MIME-Version: 1.0
    Content-Type: text/plain; charset=Windows-1251
    Content-Transfer-Encoding: 8bit

    [text]

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Написал прогу, но не знаю - будет ли работать на других компах:
    Прога следующего содержания:
    Создал DTHML страницу. При загрузке, страница читает из реестра адрес(getsetting) и грузит по этому адресу ресурс и и-нета в Image.src.
    Страница, как и любой DHTML, работает (правильно работает) только при наличии DLL-шки, путь к которой он запоминает при компиле(куда компилировал - там и ищет). Я скомпилил в "С:\", что значительно расширяет список компов, которым прога становится доступна(лучше, чем не чего). Но осенило: а будет ли этот DHTML ВООБЩЕ работать на других машинах??
    Может кто-нибудь захочет по-узать "Просмотрщик графики в и-нет"??
    Или ответьте пожалуйста на вопрос. Может реестр/ДХТМЛ - это муть, и достаточно WebBrowser.navinate??
    Вообще подскажите, как лучше это дело устроить...
    Даже при помощи той мути, что я на мудрил, нет доступа ко всем ресурсам.
    Например, фоменковские приколы не грузит.
    А я встречал прогу, которая делала это легко, вот я тоже хочу такую сделать.

    Про плохое качество связи с мировой паутиной молчу...


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

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

       Подскажите пожалуйста или пришлите кусочек исходника как считать данные из памяти или записать при помощи VB


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

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

       Где можно найти инфу по всем свойствам и методам winsock!


    Автор вопроса: P@Ssword

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

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


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

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

       Скажите, пожалуйста, как сделать контрол DirListBox в виде проводника?


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

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

       У меня нет функции AdressOf (VBA Office97) Как можно ее заменить и чем?


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

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

       Как можно в проге сделать так, чтобы она была поверх всех окон (как у StatWin 5.5), и запретить или что-то в этом роде доступ к другим программам(меню и др.) кроме этой. И как скрыть её от Ctrl+Alt+Del?

    Если знаете, то киньте мне на мыло или опубликуйте здесь.


    Автор вопроса: Ladyzhenkov Alexander

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

       У меня пара вопросиков:

    1. Возможно ли сделать под VB форму нестандартной геометрии? К примеру, с отверстиями, скруглёнными краями и т.п. В Delphi такая фишка имеется. Если можно, примерчик пжалста...

    2. Как проверить, существует ли такая-то директория или файл в ней?


    Автор вопроса: Bilenko Anatoly

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

       Как работать с объектом MSWord Microsoft Equation ???


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

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

       Как получить список компов локальной сети?


    Автор вопроса: Анатолий

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

       Как определить координаты курсора в TextBox или RichTextBox (т.е. номер текущей строки и номер текущего символа на этой строке) с последующей их передачей в StatusBar.
    Это нужно для контроля при вводе форматированных данных


    Автор вопроса: Роман

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

       Как пользоваться Microsoft Voice Commands?


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

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

       Как получить дескриптор (hwnd) активного окна, которое не принадлежит моему приложению? Т.е. GetActiveWindow не прокатывает.


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

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

       Подскажите как работает API функция и как можно записать про помощи неё новое значение в определённую ячейку памяти. Вот как выглядит функция:

    WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

    Объясните, что значат параметры IpBuffer, nSize и lnNumberOfBytesWritten и в какой из них нужно записывать новое значение. И ещё подскажите как работает ReadProcessMemory и объясните её параметры. Очень нужно.


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

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

       Nuzhen instaler, kotoryj zainstalirujet .exe, .NET Framework a tak zhe Sybase db, t.e. setup, kotoryj zapuskajet drugije setupy. Mozhet uzhe jest gotovyje produkty?


    Автор вопроса: Володя

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

       Некоторые программы, которые я создал,ну не как не хотят запускаться на "компе" моего друга. При запуске выдаётся ошибка о повреждённом файле динамической библиотеки. Кто знает, подскажите в чём дело?


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

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

       Подскажите, кто может зает, как с фотокамеры считать фотографию программно, за любую инфу блогодарен, желательно без DLL/OCX.


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

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

       У меня такой вопрос: я делал проекты на ASP, но ни разу еще не запусал их в ИНЕТ. Подскажите, имеет ли бесплатный хостинг поддержку ASP скриптов?




    Ответы:


    Вопрос:

       Известно, как картинку, которая находится в Picture1.Picture сохранить через диалоговое окно. А как сделать, чтобы в Листбоксе диалогового окна можно было бы выбирать несколько форматов сохранения (BMP,JPG,GIF)?

    Ответ:

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

    CommonDialog1.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly
    CommonDialog1.Filter = "Точечный рисунок (*.bmp)|*.bmp|JPEG (*.jpg)|*JPG|GIF (*.gif)|*.gif|"
    CommonDialog1.ShowOpen


    Вопрос:

       Подскажите, пожалуйста, можно ли восстановить из EXEшника исходник?

    Ответ:

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

    Дисассемблером, например, WinDasm.


    Вопрос:

       Подскажите как пользоваться API функциями OpenProcess, ReadProcessMemory, WriteProcessMemory?

    Ответ:

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

    Api.com или api.net (не помню)


    Вопрос:

       Как сделать так, чтобы программа, прописалась в реестре винды (где нбудь в Run)?

    Ответ:

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

    Добавить в автозагрузку:

    Set reg = CreateObject("wscript.shell")
    reg.regwrite "HKLM\Software\Microsoft\CurrentVersion\Run\" & "Имя файла", "c:\Путь"

    Удалить из автозагрузки:

    Set reg = CreateObject("wscript.shell")
    Reg.Regdelete "HKLM\Software\Microsoft\CurrentVersion\Run\" & "Имя файла"


    Вопрос:

       Как бы мне к серваку подключиться? Есть IP сервака, порт, логин и пароль. После этого на серваке выполнить некоторую команду и "прочитать" его ответ?

    Ответ:

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

    Winsock'ом... Могу кинуть сэмпл для "общения" с e-mail сервером.


    Вопрос:

       Народ, кто-нибудь создавал отчуждаемые приложения Ассеss или может что слышали по этой теме?

    Ответ:

    Автор ответа: Артем Меняйленко

    В Office Developer Edition есть Setup Kit, создающий wizard, инсталлирующий базу и Run-time модуль для ее запуска без Access.


    Вопрос:

       Как сделать, чтобы при клике по метке с "мыльным" адресом открывалась заготовка сообщения?

    Ответ:

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

    Запустить браузер или почтовик по умолчанию:

    Shell "start http://адрес сайта/" - открытие страницы в браузере
    Shell "start mailto:e-mail" - создание сообщения для адресата e-mail



    Ответ:

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

    ShellExecute'ом. В качестве параметра - строка вида "mailto:vassya_pupkin@mail.ru" Откроется стандарный мэйлер и сам создаст новое сообщение на указанный адрес. Можно туда же добавить "?Subject=тема".



    Ответ:

    Автор ответа: Славик

    'Объявление (данный пример для модуля)
    Public Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)
      

    'Этот код вставляешь в событие Label_Click()
    Call ShellExecute(0&, "Open", "mailto:" + "адрес@mail.ru " + "?Subject=" + "Тема письма" + "&body=" + "Письмо", "", "", 1)



    Ответ:

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

    Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal _
    hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters _
    As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)
      
    Private Sub Label1_Click()
    Label1.FontBold = True
    Call ShellExecute(0&, "Open", "mailto:" + "Miki@online.sinor.ru" + "?Subject=" + _
    "Как сделать, чтобы при клике по метке с "мыльным" адресом открывалась заготовка сообщения?" + "&body=" + "Привет, Максим!!!", "", "", 1)
    End Sub


    Вопрос:

       Как сделать help?

    Ответ:

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

    Micosoft Help Workshop. Клепает хелп из RTF файлов. Или html. Есть в комплекте VB.



    Ответ:

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

    У меня есть целая глава электронной(HTML) книги, где рассказывается о хелпе в стиле WinHelp.
    Могу намылить. В архиве весит около 100 кб. Если ты это имел в виду.


    Вопрос:

       Расскажите, как осуществляется в VB передача параметров в программу и прием ей их.

    Ответ:

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

    Параметры передаются так же, как и любой другой проге. А чтобы их узнать, надо воспользоваться ф-ей Command$. Потом ее можно разбить на массив параметров функцией Split. По разделителю "-". Я так делаю.



    Ответ:

    Автор ответа: Артем Меняйленко

    Для этого есть переменная Command$, содержащая ключи командной строки.



    Ответ:

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

    Приём и передачу можно сделать 3 способами: командной строкой, промежуточным файлом, записью в реестре (не рекомендуется).

    1) Передача: Shell "путь и командная строка".
         Приём: w = Command
    2) Передача: пишем файл (к примеру TXT с помощью команд Open и Output) и запускаем приложение.
         Приём: открываем файл (к примеру TXT с помощью команд Open и Input)
    3) не привожу по причине выше



    Ответ:

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

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


    Вопрос:

       Как можно произвести сохранение html-страницы методами VB, при условии, что броузер написан в VB, путем использования стандартных компонентов VB

    Ответ:

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

    А просто стандартными инет контролами открываешь страницу как текстовый файл, заливаешь и сохраняешь с расширением htm.


    Вопрос:

       При написании программы поиска и обработки файла dbf в архиве возникли вопросы
      
    1. как организовать поиск файла по маске
    2. разархивировать Zip без использования WINZip

    Ответ:

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

    Юзай WinAPI!
    FindFirstFile, FindNextFile, FindClose!
    Там указывай путь поиска с маской и организовывай рекурсию по сканированию вложенных папок.
    Если будет напряг - пиши.



    Ответ:

    Автор ответа: Соловьёв Александр

    Цитата с форума RELIB.com:

    http://vbrussian.com/Files/AfileLib.zip - ActiveX DLL для работы с архивами RAR или ZIP. DLL представляет из себя простой интерфейс для работы с консольными версиями указанных архиваторов. Так -же содержит под 50 методов для работы с файлами. Такие как удаление непустого каталога со всем содержимым, копирование непустого каталога, и многое другое (пример включен в архив). Автор Андрей Федоров
      
    От себя - пробовал, все работает!!!
    Если будут проблемы с поиском консольных версий архиваторов, мыль мне ngale@mail.ru - пришлю!!!




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

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

    наверх


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

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