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


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

Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.

Нет тем.

Рассылки Subscribe.Ru
Мир программирования на Visual BASIC 5.0 и HTML.
Новости сайта IgorykSoft и советы по программированию


Рассылки Subscribe.Ru
Старые игры

Доска почёта:

Sergey Y. Tkachev
Кононенко Роман
Kirill

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • Snoozex Design
  • IgorykSoft
  • Господа!!! читайте 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 можно найти
    здесь.

    наверх


    Создание базы данных (*.mdb)

    Прежде всего установите ссылку на Microsoft DAO 2.5/3.51 Compatibility Library через меню Project | References.
    Расположите на форме элемент Microsoft Common Dialog Control 6.0 через меню Project | Components.
    Расположите на форме элемент CommandButton.

    Данный код всего лишь создаст базу в формате mdb с указанным вами именем базы.

    Private Sub Command1_Click()
    On Error GoTo procerror
    Screen.MousePointer = 11
    Dim dbname As String
    dbname = GetDBName()
    If Len(dbname) > 0 Then
    CreateDB dbname
    End If
    procexit:
    Screen.MousePointer = 0
    Exit Sub
    procerror:
    MsgBox Err.Description
    Resume procexit
    End Sub
    Public Function GetDBName() As String
    On Error GoTo procerror
    Dim filename As String
    cd.DefaultExt = "mdb"
    cd.DialogTitle = "Create Database"
    cd.Filter = "VB Databases (*.mdb)|*.mdb"
    cd.FilterIndex = 1
    cd.Flags = cdlOFNHideReadOnly Or cdlOFNOverwritePrompt Or cdlOFNPathMustExist
    cd.CancelError = True
    cd.ShowSave
    filename = cd.filename
    On Error Resume Next
    Kill filename
    procexit:
    GetDBName = filename
    Exit Function
    procerror:
    filename = ""
    Resume procexit
    End Function
    Public Sub CreateDB(dbname As String)
    Dim db As Database
    Set db = DBEngine(0).CreateDatabase(dbname, dbLangGeneral)
    End Sub

    наверх


    Программное сжатие базы данных

    При работе с Базой Данных вы записываете, удаляете, редактируете свои данные и объем вашей БД постепенно растет. Остается он неизменным, даже если вы удалите все данные, т.к. удаленные записи машина Jet превращает в пробелы (грубо говоря). Для удаления этих пробелов время от времени проводят ''сжатие'' БД и она принемает оптимальный объем. Код приводится на примере БД Biblio.mdb

    'Закрываем БД
    Data1.Database.Close
    'Вызываем метод CompactDatabase объекта DBEngine
    'для сжатия, и сжимаем БД переименовывая ее
    DBEngine.CompactDatabase "c:\biblio.mdb", "c:\new.mdb"
    'Уничтоваем старую БД
    Kill "c:\biblio.mdb"
    'Присваиваем полученной, 'сжатой' БД
    'ее прежнее имя
    Dim OldDB
    Dim NewDB
    OldDB = "c:\new.mdb"
    NewDB = "c:\biblio.mdb"
    Name OldDB As NewDB
    'Источник: http://www.relib.com/code.asp?id=402

    наверх


    Вариант решения проблемы NULL

    На одном из русских сайтов, посвященных VB, я наткнулся на целую дискуссию, посвященную тому, что делать и как бороться с Null (в частности, при работе с базами данных). Возможно, я не прав, но я всегда для этих целей пользуюсь маленькой функцией, помещенной где-нибудь в модуле:

    Public Function CheckNull(sCheck as String) as String
    If IsNul(sCheck) Then
    CheckNull = Empty
    Else
    CheckNull=Trim$(sCheck)
    End If
    End Function

    наверх


    Переключение в определенное окно

    Вы набираете в текстовом поле название окна, и если оно присутствует в системе, то вы переключитесь в него. Преимущество/недостаток: вам необходимо знать полное название хэндла окна.

    Разместите на форме CommandButton и TextBox. Набирая в текстовом поле полный заголовок окна и нажимая на кнопку, вы переключитесь в него.

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowsName As String) As Long
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal cCmdShow As Long) As Long
    Private Sub Command1_Click()
    Dim lFoundWindow As Long
    Dim lOK As Long
    Dim lOK1 As Long
    Dim X As Variant
    lFoundWindow = FindWindow(vbNullString, Text1.Text)
    If lFoundWindow = 0 Then
    MsgBox ("Указанное вами окно не запущено")
    Else
    lOK = SetForegroundWindow(lFoundWindow)
    lOK1 = ShowWindow(lFoundWindow, 9)
    lOK1 = ShowWindow(lFoundWindow, 10)
    lFoundWindow = 0
    lOK = 0
    lOK1 = 0
    End If
    End Sub

    наверх


    Изменение заголовка любого окна

    Добавьте на форму 2 TextBox и 1 CommandButton. Напишите внутри TextBox1 наименование окна, которое вы хотите изменить. Напишите внутри TextBox2 новый заголовок окна.

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    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 WM_SETTEXT = &HC
    Private Sub Command1_Click()
    Dim target_hwnd As Long
    Dim target_name As String
    Dim new_caption As String
    target_name = Text1.Text
    target_hwnd = FindWindow(vbNullString, target_name)
    If target_hwnd = 0 Then
    MsgBox "Cannot find target"
    Exit Sub
    End If
    new_caption = Text2.Text
    SendMessage target_hwnd, WM_SETTEXT, 0, ByVal new_caption
    End Sub
    Private Sub Form_Load()
    Text1.Text = "Работа с текстом"
    Text2.Text = "New Caption"
    End Sub

    наверх


    Автоматическое закрытие окна

    Используется пример с автоматическим закрытием диалогового окна MsgBox. Начните новый проект. Добавите модуль в проект. Разместите на форме элемент CommandButton.

    'КОД МОДУЛЯ

    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public Const NV_CLOSEMSGBOX As Long = &H5000&
    Public Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    KillTimer hWnd, idEvent
    Select Case idEvent
    Case NV_CLOSEMSGBOX
    Dim hMessageBox As Long
    hMessageBox = FindWindow("#32770", "MsgBox")
    If hMessageBox Then
    Call SetForegroundWindow(hMessageBox)
    SendKeys "{enter}"
    End If
    End Select
    End Sub

    'КОД ФОРМЫ

    Private Sub Command1_Click()
    Per = 4 * 1000
    'вместо цифры 4 введите любое число, через какое время необходимо закрыть окно (в миллисекундах)
    SetTimer hWnd, NV_CLOSEMSGBOX, Per, AddressOf TimerProc
    'Если хотите изменить заголовок "MsgBox" на что-нибудь другое, то произведите
    'эту замену и в модуле в строке hMessageBox = FindWindow("#32770", "MsgBox")
    MsgBox ("Этот MsgBox Закроется через ") & Per / 1000 & (" секунд"), vbCritical, "MsgBox"
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Можно ли получить свободное пространство и емкость диска используя средства самого VB, а не API - функции?


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

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

       Как работать с TabStrip?


    Автор вопроса: Stamenov Dimitar

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

       Хочу отследить нажимаемые клавиши в любом запущеном редакторе (MS Office....) и при нахождении нужного слова напр. " штраф" в момент его написания выполнять какие нибудь действия(напр.выдать сообщение).
    Хочу озадачить шефа, который часто выписывает штрафы, но знаний VB6 у меня маловато.


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

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

       Как взять пароль пользователя из TextBox, зашифровать его и записать в файл. И как его потом вытащить из файла для сверки?


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

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

       Скажите, а как в VB-редакторе соядать макрос-сортироку для Excel по цвету раяделов?
    Например:
    Раядел1
    Элемент1, Элемент2, Элемент3,Элемент4...
    Раядел2
    Элемент1, Элемент2, Элемент3, Элемент4...
    ............


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

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

       Как вставить клип на Flash(*.swf) в файл ресурсов(*.res) и обратится к нему при необходимости. А так же как вставить в файл ресурсов файл видео (*.avi) > 65 kb и каким образом обратится к нему.


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

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

       Как сохранить рисунок в JPEG или BMP?


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

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

       Можно ли где-то скачать учебник для начинающего програмера. Желательно в формате PDF.


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

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

       Например в файле dog.txt мне надо найти слово "собака" и яаменить его на слово "кошка". Как это сделать?


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

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

       Как вставить в форму поле ввода времени (как в календаре), какой компонент надо использовать. Дату нашел, а время - нет :(


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

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

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


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

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

       Как в VBA скомпилить MDE ия MDB?




    Ответы:


    Вопрос:

       1. Есть код блокировки кнопки "Пуск":

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    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
    Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

    Public Sub EnableStartButton(Optional Enabled As Boolean = True)
    'this will enable/disable any window with a little modifaction
    Dim lHwnd As Long
    'найти hWnd
    lHwnd& = FindWindowEx(FindWindow("Shell_TrayWnd", ""), 0&, "Button", vbNullString)
    'call the enablewindow api and do the what needs to be done
    Call EnableWindow(lHwnd&, CLng(Enabled))
    End Sub

    Private Sub Command1_Click()
    EnableStartButton False 'Кнопка ПУСК заблокирована
    End Sub
    Private Sub Command2_Click()
    EnableStartButton True 'Кнопка ПУСК не заблокирована
    End Sub

    но он не блокирует нажатие кнопки Windows и Ctrl+Esc.
    Подскажите, как это исправить.

    2. Есть две формы, как сделать, что бы первая форма появлялась внутри другой в строго определённом месте.

    Ответ:

    Автор ответа: darknez@mail.kz

    Можно блокировать все системные клавиши таким кодом:

    Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

    Public lReturn As Long
    Public lBool As Long
    lReturn = SystemParametersInfo(97, False, lBool,vbNull)'Менять False/True

    Но тогда нельзя будет пользоваться вообще никакими горячими клавишами


    Вопрос:

       Как создать на форме список, типа Alt-Tab, чтобы в нём были все запущенные программы (не процессы) и по нажатию на какой-либо элемент активной становилась указанная программа?

    Ответ:

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

    Посмотри на http://www.thescarms.com/
    Сайт англоязычный, но 100% там был пример такой проги.


    Вопрос:

       Вопрос 1
    (VB.NET) Видел программу, которая используя dos-овский архиватор, находящийся в том же каталоге, распаковывала файлы, но при этом не видно было окна доса..
    Как это можно сделать?
    И еще.. как использовать DLL-библиотеки, и как узнавать ихние возможности с помошью WinDasm32?

    Вопрос 2
    (VB.NET) Добавил я в проект bmp файл, как ресурс, теперь он появился в окошке с права с верху, как его использовать, как ссылаться на него?

    Ответ:

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

    Ответ на второй вопрос:
    Что бы загрузить .bmp фаил из ресурса нужно использовать функцию picture= LoadResFile(имя картинки в ресурсе,тип рисунка) picture - это объект куда ты хочешь поместить рисунок. тип рисунка может быть: vbResBitmap или vbResCursor или vbResIcon это всё.


    Вопрос:

       Подскажите, для чего испольяуется модуль.

    Ответ:

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

    В основном модуль используют для объявления глобальных переменных, функций, т.е. значения соответствующим образом объявленных переменных будут доступны из любой формы, процедуры и т.д. программы.


    Вопрос:

       Как можно использовать обхекты не стандартные в бейсике 6.0 а те которые используются в системе. допустим в ХР.
    Можно ли подключить обьекты из системы в бейсик?

    Ответ:

    Автор ответа: Иван

    А как же!
    Неужели не заглядывал в Components.../References... в пункте меню Project Всякую нечисть подсоединяют через эти места. Через Components... можно подключать всякие компоненты, (наверное все ActiveX которые есть в системе) (плюс любой ActiveX, который раздобудешь в виде файла) а через References... можно подключить всякие библиотеки (типа ADO, MSOffice...)
    Только учти - все эти прибамбасы в EXE не вставляются, и при переносе проги на другой комп чего-нибудь может не хватить.


    Вопрос:

       Каким образом скопировать файл на vbscript в директорию на IIS-СЕРВЕР?
    создаю объект:
    Set fs = CreateObject "Scripting.FileSystemObject")
    теперь копирую, допустим
    fs.CopyFile "C:\org\gerb3.gif", "C:\Inetpub\wwwroot\gerb3.gif"
    но ведь мне надо указать url?

    Ответ:

    Автор ответа: Иван

    Не уловил суть вопроса: а сервер-то где???
    1) сервер интернетный тут ничего не поможет кроме FTP а это совсем другой вопрос
    2) Сервер сетевой нужен адрес к соответствующей шареной папке, а остальное - как обычно
    3) сервер собственный никакой урл не нужен вообще. просто копируй туда в wwwroot и всё!!!


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

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

    наверх


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

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