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


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!!!

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

       Новый выпуск! Присылайте коды!!!!!!
    Читайте!


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




    Книги

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

    наверх


    Эксперт

    - Привет, Серый.
    - Угу, привет. Ты проходи, садись, я щас, с функцией тут разберусь...
    - Да я на момент. Вопросец имеется.
    - Вопросец, вопросец... Так, тут переменная не объявлена... Вопросец... С вопросами в систему, к экспертам... А тут точку не поставил! Вот она где, соб-бака!!
    - Ты че, какая система? Ты о чем?
    - О! Все, работает... Чего ты говоришь?
    - Ты про каких это экспертов тут заикаешься?
    - А-а. А ты что, первый раз слышишь, что ли? Ты на СообЧа бывал?
    - Где?!!
    - Да вот, гляди. Щас соединимся... Во! http://soobcha.ru, зришь?
    - М-да... Занятно. Так я с вопросом к тебе...
    - А я вот и говорю: туда иди, в систему "Эксперт", там ответят.
    - Это чайники, что ли, ответят?
    - Не сомневайся, ответят. Там у них такое наворочено... Короче, ты по почте вопрос свой задаешь - и все:)))))) Больше не изволь беспокоиться, там они сами будут искать ответ на твой вопрос. А через некоторое время вывалят тебе на ящик не один, а несколько ответов. Пользуйся и радуйся:)
    - А чего это они там такие добрые да услужливые? У них чего, своих проблем нет? Сколько я должен платить за такое трогательное беспокойство?
    - Ну, это немного. Меньше, чем ты думаешь:) Тебе достаточно только подтвердить правильный ответ. Давишь на соответствующую ссылку, дескать, вот этот ответ мне понравился, помог, и я доволен. Просто пустое письмо засылаешь к ним, и вся оплата. А если хочешь у них экспертом стать, то пожалуйста, регистрируйся и отвечай на вопросы.
    - Кем? Экспертом?
    - А что? Что-то ты ведь знаешь, не вчера за комп сел.
    - А на фига мне это надо? Разбираться с чужими проблемами... У меня своих - хоть отбавляй...
    - Ага. Вот ты только что спрашивал: а сколько? И если уж ты со своими проблемами обращаешься к людям, то ведь надеешься, что тебе помогут. А сам-то что, влом, что ли, помочь кому-то? Да ладно! Тебя, вобщем-то, никто и не тянет, не заставляет. А вот те, кому интересно, кому не жаль поделиться, те там и работают. Я, между прочим, давно уже с ними.
    - В смысле, экспертом, что ли, заделался? И сколько тебе платят?
    - А ты не прикалывай. Там никто никому не платит. А вот конкурсы, между прочим, проводят, и не хилые. Представляешь, за лучший ответ дают бесплатно три месяца платного хостинга, да еще домен регистрируют. За просто так. А вот тебе, если ты задашь самый лучший вопрос, тоже приз может выгореть.
    - Это как: лучший? На который никто ответить, что ли, не сможет? Так я щас таких вопро...
    - Причем тут это? Просто ты, если вопрос пишешь к ним, так сподобься хоть запятые в нужных местах поставить, там, грамотно, короче, обрисуй свой трабл.
    - Ну ладно, въехал. Ты мне вот лучше помоги с моим траблом. Мой Фотошоп не хочет по русски работать...
    - Ха, так этот трабл там уже сколько раз появлялся. У них на сайте и ответ есть... Вот, любуйся: Заходим в редактор реестра (regedit.exe). Находим ключ HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\Codepage В нем изменяем значение параметра 1252 с cp_1252.nls на cp_1251.nls. Перезагружаемся...
    - Понял... погоди, запишу...
    - Да чего записывать? Шагай домой, входи на сайт и копируй...
    - Да я ссылку запишу... Слушай, а как там в эту систему вопрос задать? Вообще, как она работает?
    - Так тут же, на сайте, все есть. А вообще, можешь по почте пустое письмо загнать на mailto:reply.infoexpert@soobcha.ru, и получишь всю необходимую инфу. А вообще, ты лучше в следующий раз с вопросами не ко мне, а туда. Может, я и отвечу там.
    - А не проше тебе здесь ответить?
    - Э-э-э... Там я баллы зарабатываю...
    - А это еще зачем?
    - Ладно, мотай. Дома почитаешь, все о них узнаешь. У меня тут халтурка... Давай, пока.
    - Пока. А как ты экспертом там зарегился?
    - Иди, иди! Инфу читай...

    наверх


    Диалог завершения работы

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


    Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal YourGuess As Long) As Long

    Private Sub Form_Load()
         SHShutDownDialog 0
    End Sub

    наверх


    txt To exe

    Довольно интересная штуковина... Создаёт exe из текстового файла. Поулчается консольное приложение, в котором печатается заданный текст.


    Option Explicit

    Public Function HiByte(ByVal wParam As Integer)
         HiByte = wParam \ &H100 And &HFF&
    End Function

    Public Function LoByte(ByVal wParam As Integer)
         LoByte = wParam And &HFF&
    End Function


    Private Sub Command1_Click()
    Dim a(14) As Byte
    Dim i As Integer
    Dim s As String
    Dim tmp As String

         a(0) = 190
         a(1) = 15
         a(2) = 1
         a(3) = 185
         a(6) = 252
         a(7) = 172
         a(8) = 205
         a(9) = 41
         a(10) = 73
         a(11) = 117
         a(12) = 250
         a(13) = 205
         a(14) = 32
         
         Open "C:\1.txt" For Binary As #1
         a(4) = LoByte(LOF(1))
         a(5) = HiByte(LOF(1))
         s = Space$(LOF(1))
         Get #1, , s
         Close #1
         
         For i = 0 To 14
             tmp = tmp & Chr(a(i))
         Next
         s = tmp & s
         
         Open "C:\1.exe" For Binary As #1
         Put #1, , s
         Close #1
    End Sub

    наверх


    Получение CRC

    Функция для подсчёта CRC.


    Public Function GetCRCFromString(strInput As String) As Long
        Dim lngCRC As Long
        Dim abytInput() As Byte
        Dim lngCounter As Long
        Dim lngInputLength As Long
        Const cintUpdateBytes As Integer = 4096
        
        abytInput = strInput
        lngInputLength = UBound(abytInput)
        
        ' Construct the CRC table
        ConstructCRCTable
        
        lngCRC = &HFFFFFFFF
        
        For lngCounter = 0 To lngInputLength
           lngCRC = UpdateCRC32(lngCRC, abytInput(lngCounter))
        Next lngCounter
        
        GetCRCFromString = Not lngCRC
    End Function

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Программа подставляет значения в формулу. Исходные данные и результаты расчёта должны быть выведены в виде таблицы: Васик открывает мой "Блокнотик" (в него больше влезает :-) - шлёт в него всё, что надо вывести в таблицу, попутно вставляя HTML тэги - сохраняет в *.html - открывает этот *.html (в перспективе, пока только в ручную) и показывает мне, что у него получилось. Но я не могу столько ждать. Таблица очень большая и грузится долго, а пересчитывать приходиться по нескольку раз. Неужели он сразу не может представить отчёт в HTML без напрасного сохранения?
    И научите его, пожалуйста, как можно открыть HTML файл в Internet Exploreрe. В моей макулатуре почему-то ПРО ЭТО ни слова не сказано. Даже в Интернете этой заветной строчки кода не нашёл.


    Автор вопроса: i-sof@mail.ru

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

       Как с помощью нашего любимого VB сделать скриншот и записать его в jpg?


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

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

       А как в этой функции реализовать циклический сдвиг по кругу?
    Т.е. последний бит передвинуть на место первого ?
      
      
    Небольшая функция. Осуществляет сдвиг на n-ное число бит. Параметры функции:
    lValue - Исходное значение
    lNumberOfBitsToShift - Количество бит, на которые нужно сдвинуть число
    lDirectionToShift - Направление сдвига (вправо или влево).


    Public Enum dcShiftDirection
          Left = -1
          Right = 0
    End Enum

    Public Function Shift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long, ByVal lDirectionToShift As dcShiftDirection) As Long
          If lDirectionToShift Then
              Shift = lValue * (2 ^ lNumberOfBitsToShift)
          Else
              Shift = lValue \ (2 ^ lNumberOfBitsToShift)
          End If
    End Function


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

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

       У меня в VBA нет свойства hwnd.
    По GetCapture или GetFocus у контролов у всех одинаковый hwnd, а у ComboBox и др. он равен 0. По коллекции контролов дает только имя, а по нему как найти hwnd? Как же найти DC без hwnd?
    А без него SendMessage не работает.
    А как по классу найти, по "BUTTON" FindWindow дает 0.


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

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

       Как поместить на элемент управления (Button, PictureBox, Image) 32-битную иконку?


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

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

       Никак не могу понять принцип работы с коллекциями классов, помогите разобраться!!!!
    Есть класс работающий с базой данных. Он имет свойства для получения значений: DBName - название БД(путь), Rset - источник записей (запрос), TName - название команды; свойства для чтения: Win - кол-во побед, ..., PTS - кол-во набранных очков; процедура TotalCount - обрабатывающая записи таблицы.
    В код класса добавлена переменная типа collеction и процедуры свойств (Add, Delete, Count, Item, Clear):

    Public Function Add(dValue As clsTeam) As Boolean
    On Error GoTo AddError
    ColTeams.Add dValue
    Add = True
    Exit Function
    AddError:
    Add = False
    End Function
    Public Function Item(index As Long) As clsTeam
    If index < 0 Or index > ColTeams.Count Then
    Err.Raise vbObjectError + 1, "clsTeam", "Индекс вышел за пределы массива"
    Else
    Item = ColTeams.Item(index)
    End If
    End Function

    Задача: Нужно занести в коллекцию(?) класс каждой команды с её свойствами TName, Win, ..., PTS; затем отсортировать по значению PTS (в коллекции?) и вывести результат в Grid.
    И как к обращаться к конкретному классу коллекции с помощью метода Class.Item - у меня ругается что переменная не определена (Item = ColTeams.Item(index))
    Опишите пжлста общий принцип как это сделать.


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

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

       Видел я тут в Дельфях контрол StringGrid. Имеет ли VB нечто похожее. Если да, то какой компонент надо подключить, а если нет, то как можно яаписывать данные в DataGrid в нужный столбец и строку и при этом не свяяываться с БД?


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

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

       А есть в VB 6.0 какой-нибудь контрол, чтобы при передачи в него данных из TextBox он их отображал в HTML?


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

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

       Как в текстовое окно вставить картинку, точнее как сделать как в чате смайлики
    между текстом?


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

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

       Каким обраяом можно отлавливать обращения к сетевому принтеру и узнавать имя компа, который чего-то шлёт на печать? Есть ли пример подобной задачи?


    Автор вопроса: Сергей Перехода

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

       Как нажать "Alt" + "TAB" програмно при помощи VB 6.0.


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

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

           Как програмно соядать контрол PictureBox, и поставить его в нужном месте на форме, намыльте примерчик.


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

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

       Люди у кого есть талмут по VB-6, буду преянателе если кто нибудь поделиться такой книжонцией.


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

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

           Как можно иябавится от такого глюка: если на child-форме есть меню, даже невидимое, то при открытии этой формы в MDIForm происходит замена исходного меню на меню child-формы.


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

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

       В паскале есть тип данных Real который занимает 6 байт памяти, каким образом в VB6 (именно на VB , а не Delphi) можно сделать так, чтобы сохранять числовые данные в файл и они занимали по 6 байт (соответствували Real).




    Ответы:


    Вопрос:

       Люди, ПРОГРАММИСТЫ, скиньте пожалуйста на E – mail (map@buzuluk.esoo.ru) какие-нибудь электронные книги (справки, коды) по VB6 для начинающих.

    Ответ:

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

    ftp://ftp.avtograd.ru/users/books/vb6.rar


    Вопрос:

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

    Ответ:

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

        Можно сделать php сайт, где регистрируются пользователи. В проге делаешь конект к Инету и грузишь определённую страцицу с числом (количество использований проги). При заходе на страницу число уменьшается.


    Вопрос:

       Все видели как изменяется, например, размер рисунка в Word'е. А как сделать подобный контрол (или группу)? Мне удалось сделать только самое простое - увеличивать или уменьшать число кликами по стрелкам. Но еще хочется увеличивать это число с клавиатуры (клавишами управления курсором) и быстрое увеличение (уменьшение) числа - держишь кнопку, оно ияменяется, отпустил - остановилось...

    Ответ:

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

    Кидаешь на форму контрол Label.
    Ставишь свойство формы KeyPreview (это свойство разрешает форме принимать сигналы от клавиатуры в первую очередь).

    Dim i As Integer 'Переменная, которая будет хранить размер числа
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 38 Then 'Стрелка ВВЕРХ
         i = i + 1
         Label1 = i
    ElseIf KeyCode = 40 Then 'Стрелка ВНИЗ
         i = i - 1
         Label1 = i
    End If
    End Sub
      
    Если что-то не понял пиши boris_uk@ltk.com.ua


    Вопрос:

       При установке MSDN ия Visual Studio 6.0 в конце установки, после копирования файлов выдается сообщение об ошибке:
    "CloseCollection g_ccolCollection.Open(collectionname) dwError=7"
    Что делать?

    Ответ:

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

    Если немножко внимательно прочитывать прилагаемые документы, например, к Visual Studio "Readme"-файлы, то найдём ответ. Точное название файла не помню, найти его можно, если указать строку поиска, например, "g_ccolCollection.Open". Хотите - верьте, хотите - нет, но совет там следующий: удалить файл "hhcolreg.dat" в каталоге WINDOWS\HELP, затем повторить инсталляцию. Помогает!


    Вопрос:

           Как можно запретить гриду изменять подписи к полям?
        На форме контрол DataGrid связанный с ADODC и TreeView. Есть элемент TabStrip с кучей вкладок. Когда кликаешь на вкладке TabStrip, ADODC принимает новый рекордсет из другой таблицы DataGrid, перестраивается на другую таблицу. Фрагменты кода инициализации Грида.

    'здесь привязываю грид к новому источнику
    Adodc1.RecordSource = strsql
    Adodc1.Refresh
    Set DataGrid1.DataSource = Adodc1
    'а здесь выставляю подписи к столбцам из другой таблицы
    rst.Source = "select * from t_filds where table_name='" & curTable & "'"
    rst.Open
    Do Until rst.EOF
             DataGrid1.Columns(rst.Fields(1).Value).Caption = rst.Fields(2).Value
              rst.MoveNext
    Loop

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

    Ответ:

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

    Дописать где-то в Form_Load, например,

         DataGrid1.HoldFields


    Вопрос:

       У меня в VBA нет свойства hwnd.
    По GetCapture или GetFocus у контролов у всех одинаковый hwnd, а у ComboBox и др. он равен 0. По коллекции контролов дает только имя, а по нему как найти hwnd? Как же найти DC без hwnd?
    А без него SendMessage не работает.
    А как по классу найти, по "BUTTON" FindWindow дает 0.

    Ответ:

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

    Дописать где-то в Form_Load, например,

         DataGrid1.HoldFields




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

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

    наверх


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

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