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


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

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

       Обратите внимание на раздел "VBNet CD '06 2003"!
    Читайте!


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




    Книги

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

    наверх


    Citycat by Email

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

    наверх


    VBNet CD '06 2003

       VBNet.Ru представляет новый компакт диск "VBNet CD '06 2003"!
       CD содержит только новые материалы, почти всё, содержавшееся на предыдущих CD было удалено! Что же нового на CD?
       Добавлено 19 программ в раздел "Софт". Главная программа на этом CD - DirectX 9 SDK. Это пакет для разработки мультимедийных приложений (графика, 3D, звук и т.д.). Имеются примеры, в том числе и на VB .NET.
       Другие программы:
    • .NET Framework 1.1 - новая версия .NET Framework
    • Internet Explorer Web Controls - пакет бесплатных контролов для ASP .NET с исходным кодом
    • Crystall Reports .NET 10 Service Pack 1 - Пакет обновления для Crystall Reports .NET 10.
    • WMI Core Components для Win 9x - ядро WMI (Windows Management Instrumentation) для Win 9x.
    • Terrarium Client - Игра Terrarium.
    • Test Recorder - Программа для автоматизации процесса тестирования .NET приложений.
    • TierDeveloper 2.0
    • MDAC 2.7 - Компоненты для работы с БД от Microsoft. Версия 2.7.
    • Crystall Reports 9 Evaluation Kit - Популярный компонент для генерирования отчётов.
    • MicroGerakL - Бесплатный редактор иконок.
    • EXEScope - редактор ресурсов
    • FileMon - бесплатная программа для мониторинга работы с файловой системой.
    • RegMon - бесплатная программа для мониторинга работы с реестром.
    • Nero Burning Rom 5.5.10.28 - новая версия программы для записи CD-R и CD-RW дисков.
    • Resource Hacker - бесплатный редактор ресурсов
    • SoundForge - Утилита для создания и редактирования звука.
    • WinRAR v 3.22 - архиватор
       Добавлено 19 новых ActiveX и .NET компонентов.
       Добавлено 11 интересных книг о Visual Basic и .NET на английском языке.
       В разделе "Примеры" несколько новых примеров на Visual Basic .NET по работе с Direct3D 9 и .NET Framework. 10 примеров по программированию под новую версию Office - Office 2003. А также движок форума на ASP .NET с исходниками!
       В разделе "Эксклюзив" моя новая статья о криптографии в .NET и несколько примеров на Visual Basic .NET о симметричном шифровании и использовании WMI.
       А также коллекция музыки в формате MIDI и болшая коллекция иконок!
       Ну и конечно свежая версия сайта VBNet.Ru. С момента выхода предыдущего выпуска "VBNet CD" на VBNet.Ru появилось 7 статей, 8 ActiveX-контролов, 44 примера и около 5000 сообщений в форуме!
       Полное содержание диска можно скачать здесь: http://vbnet.ru/vbshop/vbnetcd062003.zip.
       Цена диска, включая почтовые расходы: 100 рублей. Диск распространяется по почте наложенным платежом.
       Магазин компакт-дисков был немного улучшен. Теперь он больше похож на солидные интернет-магазины. Вы можете заказать сразу несколько дисков (сейчас в нашем магазине продаётся 4 диска). Действует система скидок постоянным покупателям.
       Наш магазин расположен по адресу http://vbnet.ru/vbshop/cdshop.asp
       Мы всегда рады Вас видеть!

    наверх


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

    Дата: 23.06.2003 10:00 | Раздел: Примеры кода | Автор: Вологин Артём

    ColorConverter - Простой пример демонстрирует, как перевести Dec цвета (цвета CommonDialog) в цвета HTML, VB, RGB без всяких наворотов.

    Дата: 22.06.2003 10:23 | Раздел: Примеры кода | Автор: mc-black

    Класс RgnMake - Класс RgnMake создает окно нестандартной формы с помощью графических файлов: фонового и маски (белый цвет невидим); обеспечивает перетаскивание окна за любую его часть; может включать/выключать режим окна "поверх всех окон”; устанавливает различную степень прозрачности (Win2k и выше).

    Дата: 20.06.2003 10:23 | Раздел: Примеры кода | Автор: CPUKiller

    Модифицированные XP контролы - Контролы в стиле WindowsXP, улучшенные и слегка модифицированные в сторону схожести с оригинальными! Устранены 2 значительных бага, касающихся интерфейса.

    Дата: 19.06.2003 14:28 | Раздел: Примеры кода | Автор: Аптуков Анатолий

    Шифрование файлов - Применяется для шифрования различных файлов Создает на дискете ключ размером в 256 байт.

    Дата: 18.06.2003 14:27 | Раздел: Примеры кода | Автор: Аптуков Анатолий

    Boulder Dash - Очень интересная игра!

    Дата: 17.06.2003 14:27 | Раздел: Примеры кода | Автор: MUXzzzz

    MWS - MiniWebServer - HTTP сервер на ВБ! пример показывает как можно организовать у себя на компе хостинг для сайта, тобишь HTTP сервер. Пример может одновремменно держать до 65535 соеденений!, а такое количество одновременных скачек ОЧЕНЬ маловероятно, если только ваш сайт не Яндекс или подобное, есть настройки страниц, который сервер подсовывает при различных событиях(например если страница не найдена).

    Дата: 16.06.2003 14:27 | Раздел: ActiveX контролы | Автор: Кузнецов А. В.

    ExtraTextBox - TextBox с расширенными возможностями.



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

    18:14 / 22 июн.  Resource in EXE | Хитов: 15 |  Ответов: 1
    16:46 / 21 июн.  VBA + Excel | Хитов: 16 |  Ответов: 0
    15:44 / 21 июн.  OffTopic: Сетевикам(от сетевого чайника) | Хитов: 17 |  Ответов: 0
    15:34 / 21 июн.  Использование WINAPI в VB.NET | Хитов: 18 |  Ответов: 0
    15:31 / 21 июн.  Combo - как получить выбранный элемент? | Хитов: 28 |  Ответов: 4
    14:18 / 21 июн.  Internet Explorer | Хитов: 16 |  Ответов: 0
    14:07 / 21 июн.  DataGrid+Аdodc сортировка? | Хитов: 10 |  Ответов: 0
    10:45 / 21 июн.  Куда можно засунуть ТАКОЙ текст? | Хитов: 64 |  Ответов: 8
    10:33 / 21 июн.  Off: программеры и админы | Хитов: 48 |  Ответов: 5
    22:29 / 20 июн.  Новое сообщение без темы | Хитов: 6 |  Ответов: 0
    19:18 / 20 июн.  Нужна компонента | Хитов: 23 |  Ответов: 0
    16:54 / 20 июн.  Отсылка файлов на сервер методом POST? | Хитов: 21 |  Ответов: 1
    14:28 / 20 июн.  Как имитировать нажатие клавиш? | Хитов: 22 |  Ответов: 1
    14:00 / 20 июн.  Как посчитать время цикла? | Хитов: 46 |  Ответов: 6
    14:00 / 20 июн.  Как посчитать время во цикла? | Хитов: 9 |  Ответов: 0
    11:09 / 20 июн.  число не влазит в переменную! (я чайник) | Хитов: 75 |  Ответов: 16
    10:54 / 20 июн.  Работа с cookies! | Хитов: 17 |  Ответов: 0
    09:39 / 20 июн.  как программно... | Хитов: 39 |  Ответов: 0
    08:09 / 20 июн.  А можно без IP и имени компа? | Хитов: 42 |  Ответов: 3
    07:42 / 20 июн.  Как защетить по времени свою программу? | Хитов: 38 |  Ответов: 2


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



    Новости от VBNet-чиков!:



    наверх


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



    наверх


    Новости сайта Азбука VB



    наверх


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



    наверх


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



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



    наверх


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

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



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



    наверх


    Один момент из жизни форума: Чтение/запись файла в VB .NET

    Вопрос:
    Автор вопроса: thelost

       Как прочитать и записать текст из файла в Visual Basic .NET?


    Ответы:

    Атор: Павел
       Для чтения/записи файлов юзай объекты из пространства имён System.IO: FileStream, StreamReader и StreamWriter.

    Автор: thelost
       Ну если я бы знал как их юзать... я б вопросы не задавал.
       Все познается на примерах, а даже их у меня нет...

    Автор: Павел
       Ну расскажу про чтение... Сначала создаём объект FileStream

    Dim fs As New IO.FileStream("c:\путь\имя файла", IO.FileMode.Open, IO.FileAccess.Read)

       Дальше создаём StreamReader

    Dim sr As New IO.StreamReader(fs, System.Text.Encoding.GetEncoding(1251))

       Обрати внимание, вторым параметром мы указываем, что читаем файл в кодировке Windows-1251, то есть родную виндовскую кирилицу.
       Дальше читаем файл в строковую переменную.

    Dim str As String
    str = sr.ReadToEnd()

       Закрываем объекты.

    sr.Close
    fs.Close

       Аналогично запись. Сначала создаёшь FileStream, потом StreamWriter. Затем пишешь в StreamWriter инфу.

    Автор: thelost
       Аналогично это, как?
       Допустим начну так (по аналогии):

    Dim fs As New IO.FileStream(SaveFileDialog1.FileName, IO.FileMode.Create, IO.FileAccess.Write)
    Dim sr As New IO.StreamWriter(fs, System.Text.Encoding.GetEncoding(1251))

       А как инфу записать в StreamWriter?
       зы: понимаю смешно, но после с++, VB .net мне понять еще сложнее, чем наоборот.

    Автор: Павел
       sr.Write (текст)
       Уж можно было заглянуть в Object Browser или в MSDN и глянуть методы StreamWriter'а!



    наверх


    Доска объявлений

       Ищу телеработу.

    • Переводы: английский, украинский, русский.
    • Cipper программист.
    • Assembler программист.
    • PIC разработчик
    • композитор
    • Прогрессивные стили
    • 3D анимация
    • GIF анимация
    Антон Лозовский.

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх

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

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

    Вопросы:


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

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

       Подскажите, пожалуйста… Можно ли сделать так, чтобы FileListBox Отображал файлы отсортированные не по имени, а по чему либо другому..? Например по дате, или по расширению?


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

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

       Привет люди помогите решить проблему есть класс, а в нем процерура:

         Dim ws As Object
         Sub wsInit()
             Set ws = CreateObject("MSWinsock.Winsock")
         End Sub

    которая создает обьект Winsock. Как известно, у него есть событие DataArrival. Так вот мне необходимо его перехватить.

    Есть мой вариант того, как это зделать:

         Private Sub ws_DataArrival(ByVal bytesTotal As Long)
             Dim tmp as String
             ws.GetData tmp
             MsgBox tmp
         End Sub

    Но он не работает (по крайней мере у меня).


    Автор вопроса: ]CBK[C...R...a...S...H

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

       Люди в Visual Studio есть очень реальная утилита Depends она служит для получения API функций из библиотек, программ и т.д. Но в ней есть баг она не пишет какие данные необходимо передавать в ту или иную функцию, кто знает что с этим делать


    Автор вопроса: .::neo::.

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

       Есть ли какая-нибудь прога, которая показывает к какому классу относится окно? Например,манипулятор панели яадач- "Shell_TrayWnd"...


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

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

       Для использования базы DBF (FoxPro 3.0), использую Data и DBGrid. При попытке изменить, удалить или добавить записи в базу, выдается сообщение, где сказано: Ощибка 3027 "Невозможно обновить. База данных или объект только для чтения"

    P.S. Data.ReadOnly=False


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

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

       Такой вопрос: Я создаю панель инструментов типа MS Office.

    Пишу код:

    Private Sub Form_Load()
    'Раямеры и положение формы
    formMain.Height = Screen.Height
    formMain.Left = Screen.Width - formMain.Width
    End Sub

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


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

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

       Как можно послать сообщение на email?


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

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

       Раярабатывал я тут приложение - редактор тестов с выборочными ответами, работающее с БД Access.
    Краткое описание: прога соядает, ияменяет, удаляет таблицы в которых хранятся данные тестовых яаданий.
    Заметил, что раямер файлов БД постоянно увеличивается, даже если не добавляются новые таблицы. Почему это происходит?


    Автор вопроса: Дмитрий

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

       Подскажите plz, как можно в текстовый файл (*.txt) вставить стрку в произвольную позицию (имеется ввиду между некоторыми другими строками), не загужая, при этом, содержимое файла в TextBox?


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

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

       В vb.net теперь нет контрола webbrowser. Чем можно заменить?


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

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

       Нужно в VB6 построить амплитудно-частотную хар-ку звукового .wav - файла.




    Ответы:


    Вопрос:

       Как можно прикрепить звук (wav,mp3) к программе, чтобы потом его воспроизвести (через Mci)?

    Ответ:

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

    Запихни в ресурсы, при запуске проги сохрани в temp – папку, и запускай.


    Вопрос:

       Как узнать загруженность процессора?

    Ответ:

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

    По поводу замера степени использования степени использования процессора привожу статью Михаила Кассирова.
    -----Начало цитаты-----
    Замер степени использования процессора
    Недавно в статье, посвящённой недокументированным возможностям Windows, я обнаружил интересный способ измерения степени использования процессора. Дело в том, что в Windows 9x существуют счётчики Performance Counters, которые можно включить из реестра, и в реестр же они будут посылать результаты замеров. Например загруженности процессора. Есть они и в NT, но доступ к ним сложнее.
    К моему собственному удивлению результат перевода С на человеческий VB отлично заработал! По-сему, если Вашей программе нужно знать загруженность проца, или если Вы заинтересуетесь доступом в реестр из WinApi32, то Вы можете познакомиться с простеньким примером. Разумеется в полном варианте нужно было бы вставить проверку типа Windows (например через GetWindowsVersion), сворачивание в SysTray и т.п., но в "укороченном" виде Вам будет проще приспособить данную фичу Windows к своим потребностям.
    Итак. Если у Вас не NT. Расположите на форме кнопочку. Назовём её cmdStart. Как водится, в раздел General Declarations вставляем:
    'Открыть нужный ключ:
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
    ByVal hkey As Long, _
    ByVal pSubKey As String, _
    ByVal ulOptions As Long, _
    ByVal samDesired As Long, _
    phkResult As Long) As Long
    'hkey, lpSubKey - пути к ключу,
    'ulOptions - зарезервировано: должно быть ноль,
    'samDesired - тип доступа: комбинация предопределённых констант,
    'phkResult - переменная, получающая хэндл нужного ключа. Не забудьте потом закрыть.

    'Получить тип и значение параметра из ранее открытого ключа:
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
    ByVal hkey As Long, _
    ByVal lpValueName As String, _
    ByVal lpReserved As Long, _
    lpType As Long, _
    lpData As Any, _
    lpcbData As Long) As Long
    'hkey - хэндл открытого ранее ключа,
    'lpValueName - имя параметра, который нужно прочитать,
    'lpReserved - зарезервировано: должно быть ноль,
    'lpType - переменная, в которую будет возвращаться тип параметра
    'можно передать ноль, если тип не требуется (нам, кстати, передаст 3 - REG_BINARY),
    'lpData - то, что нас интересует,
    'lpcbData - переменная, которая содержит длину буфера под lpData,
    'после выполнения будет содержать кол-во в действительности переданных байт
    'у нас - длина слова: 4. Если переменную заменить просто на 4 - тоже работает

    'Закрытие ранее открытого ключа:
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long

    'Некоторые константы из API Viewer:
    Private Const HKEY_DYN_DATA = &H80000006

    Private Const STANDARD_RIGHTS_ALL = &H1F0000
    Private Const READ_CONTROL = &H20000
    Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    Private Const KEY_QUERY_VALUE = &H1
    Private Const KEY_SET_VALUE = &H2
    Private Const KEY_CREATE_SUB_KEY = &H4
    Private Const KEY_ENUMERATE_SUB_KEYS = &H8
    Private Const KEY_NOTIFY = &H10
    Private Const KEY_CREATE_LINK = &H20
    Private Const SYNCHRONIZE = &H100000

    Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL OR _
    KEY_QUERY_VALUE OR KEY_SET_VALUE OR _
    KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _
    KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
    Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
    KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or _
    KEY_NOTIFY) And (Not SYNCHRONIZE))

    'Для служебных нужд:

    'Самый ресурсощедящий способ выждать паузу (в миллисекундах):
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    'Всегда пригодится:
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal WFlags As Long) As Long

    'А это наше:
    Dim hkey As Long
    Dim dwCPUUsage As Long
    Dim lpcbData As Long'по-моему действительно лучше выкинуть,
    'подставив в нужных местах 4. Ау, теоретики!
    Dim bStart As Boolean
    Private Sub Form_Load()
    SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
    'видим всегда
    End Sub

    Private Sub cmdStart_Click()
    bStart = Not bStart
    'bStart - это Вкл-Выкл. См. далее
    If bStart Then
    'если - True - начинаем
    cmdStart.Caption = "&Stop"
    'меняем название кнопочки

    'Включаем счётчик, считывая значение соответствующего ключа:
    If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\StartStat", 0, KEY_ALL_ACCESS, _
    hkey) <> 0 Then Exit Sub
    lpcbData = 4
    RegQueryValueEx hkey, "KERNEL\CPUUsage", 0, 0, dwCPUUsage, lpcbData
    RegCloseKey hkey
    'закрыть ключ
    'Считываем значение прямо из реестра:
    If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\StatData", 0, KEY_READ, _
    hkey) <> 0 Then Exit Sub
    Do While bStart
    'пока ещё раз не нажмём на кнопочку <
    RegQueryValueEx hkey, "KERNEL\CPUUsage", 0, 0, dwCPUUsage, lpcbData
    Sleep 500
    'интервал опроса - полсекунды
    Caption = Str$(dwCPUUsage) & "%"
    'Любуемся!!!
    DoEvents
    'даём жить
    Loop
    RegCloseKey hkey
    'закрыть ключ
    'останавливаем счётчик. Если Вы прервали выполнение программы
    'до этого момента, остановить счётчик можно только перезагрузившись!!!
    'Проверено:((
    If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\StopStat", 0, KEY_ALL_ACCESS, _
    hkey) <> 0 Then Exit Sub
    lpcbData = 4
    RegQueryValueEx hkey, "KERNEL\CPUUsage", 0, 0, dwCPUUsage, lpcbData
    RegCloseKey hkey
    'помним всегда!
    Else
    cmdStart.Caption = "&Start"
    'меняем название кнопочки и...
    Caption = "Stoped..."
    'не даем себе впасть в уныние глядя на зависшие 100%
    End If
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    If bStart Then
    cmdStart_Click
    End If
    'ленивые меня поймут;-)
    End Sub
    ----Конец цитаты----


    Вопрос:

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

    Ответ:

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

    Как разместить иконку программы в TrayBar
    Вам необходимо добавить модуль

    'КОД МОДУЛЯ
    Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer
    Public Const NIM_ADD = 0
    Public Const NIM_MODIFY = 1
    Public Const NIM_DELETE = 2
    Public Const NIF_MESSAGE = 1
    Public Const NIF_ICON = 2
    Public Const NIF_TIP = 4
    Type NOTIFYICONDATA
    cbSize As Long
    hWnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
    End Type
    Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, tip As String) As Long
    Dim nidTemp As NOTIFYICONDATA
    nidTemp.cbSize = Len(nidTemp)
    nidTemp.hWnd = hWnd
    nidTemp.uID = 0&
    nidTemp.uFlags = NIF_ICON Or NIF_TIP
    nidTemp.uCallbackMessage = 0&
    nidTemp.hIcon = Icon
    nidTemp.szTip = tip & Chr$(0)
    SetTrayIcon = Shell_NotifyIconA(Mode, nidTemp)
    End Function
    'КОД ФОРМЫ
    'Затем уже в событиях формы вы можете пользоваться вышеприведеными API-функциями.
    'Запустите программу. Иконка появится в трее. Наведите на нее курсор, и вы увидите
    'надпись "Проверка", теперь кликните в любом месте формы и снова наведите на иконку...
    Private Sub Form_Click()
    SetTrayIcon NIM_MODIFY, Me.hWnd, Me.Icon, "Работает? Работает!"
    End Sub
    Private Sub Form_Load()
    SetTrayIcon NIM_ADD, Me.hWnd, Me.Icon, "Проверка"
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    SetTrayIcon NIM_DELETE, Me.hWnd, 0&, ""
    End Sub


    Вопрос:

       Есть такая проблема при посимвольной обработке строки...

    Dim TMP As String
    Dim TMP2 As String
    Dim X As Integer

    For X = 1 to Len(TMP) Step 0
    TMP2 = TMP2 & Mid(TMP, X, 1)
    X = X + 1
    Next X

    Проблема в том, что перебор строки состоящий всего из 10 тыс. символов занимает самое малое минуту, а если требуется перебрать 5 000 000 символов, например файл обработать... как можно повысить скорость работы? Повышал приоритет программы до RealTime, но это почти не заметно...
      Буду благодарен любому совету, или примеру намыленному на SoundMuzic@narod.ru;

    Ответ:

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

    Tmp2=Tmp

    Так, кажется, проще...

    А это просто СУПЕР!!!

    For X = 1 to Len(TMP) Step 0
    ...
    X = X + 1
    Next X



    Ответ:

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

    М.... да
    Тебе просто необходимо из файла прочитать не строку а массив байт

    dim Mass() as byte

    и потом работать с ними
    Скорость возрастет очень реально



    Ответ:

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

    А, вообще-то, если действительно нужен посимвольный перебор, то лучше сделать так:

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

    Private Sub Form_Load()
         Dim aPtr&, bPtr&, a$, b$, i&
    'Создаем БАААльшую строку
         For i = 1 To 100000
    'Оччень медленная строка, а у тебя в примере используется именно такой
    'вариант
             a$ = a$ & Chr(Int(Rnd * 255 + 0.5))
             DoEvents
         Next i
         aPtr = VarPtr(a)
         bPtr = VarPtr(b)
    ' Самое интересное место :)
         For i = 0 To Len(a) - 1
             CopyMemory ByVal bPtr + i, ByVal aPtr + i, 1
             DoEvents
         Next i
    End Sub

    При такой длине строки у меня второй цикл отрабатывает раз в 50 быстрее первого, т.к. программе все время приходится переопределять место для хранение строки. Так, что если нужно работать с действительно большими объемами, то лучше сразу выделять необходимую память под строку, например так:

    a = Space(100000)
    For i = 1 To 100000
         Mid(a$, i, 1) = Chr(Int(Rnd * 255 + 0.5))
         DoEvents
    Next i

    Работает на порядок быстрее первого варианта.

    А самый-самый лучший вариант - преобразовать строки в массив, тогда и АПИ не будет нужен.



    Ответ:

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

    Во первых вместо:

    for x=1 to len(tmp) step 0
      
    x=x+1
    next x
      
    Можно написать:

    For x=1 to len(tmp)
      
    next
      
    Скорость это не увеличит; в данном случае можно написать tmp2=tmp, если идет только данный код, а в остальном нужно разбирать саму программу, некоторые участки кода можно заменить встроенными функциями, их масса, а если код никак не усовершенствовать то для ускорения поможет только C++



    Ответ:

    Автор ответа: P@Ssword

    Если потребуется 5 000 000 символов, то вообще работать не будет :), т.к. у X как у Integer максимальное значение - 32767.

    FAS_WL, что есьм конструкция сия делает, коли не секрет (если можно - на мыло pas_sword@tut.by):

    For X = 1 to Len(TMP) Step 0
         X = X + 1
    Next X ?

    Ну, ладно. Секрет, так секрет.

    А проблема заключается в том, что при добавлении к строке символа происходит изменение её длины, что не есть весьма быстрая операция. А если её повторить несколько тысяч, а то и миллионов раз, да если и строка становится всё длиннее, то дело может чуть затянуться.

    Предлагаю два решения:
    1)

    TMP2 = TMP ' или Space(Len(TMP)), или String(Len(TMP),0)
    For X = 1 to Len(TMP) Step 0
    Mid$(TMP2, X, 1) = Mid(TMP, X, 1)
    X = X + 1
    Next X

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

    2) А нужны ли строки? По-моему, для посимвольной обработки больше подходят массивы. Например, так:

    Dim Temp1() As Byte
    Dim Temp2() As Byte
    Dim Ind As Long

    Temp1 = StrConv(TMP, vbFromUnicode)
    Redim Temp2(Ubound(Temp1))
    For Ind = 0 To Ubound(Temp1)
         Temp2(Ind) = Temp1(Ind)
    Next Ind
    TMP2 = StrConv(Temp2, vbUnicode) ' Если надо, но по-моему, лучше всё заточить под массивы и обойтись без строк.

    Сильно не пугаться, строки и байтовые массивы совместимы по присваиванию в обе стороны %-)


    Вопрос:

       У меня возник такой вопрос>>> Имеется база данных Аксэс. Как можно сделать,чтобы например со странички Searhc.asp ввести в поле слово и в базе данных это все проверилось на наличее этого слова в тексте и если такое слово присутствует, вывести на страничку текст, в котором это слова есть. Другими словами мне нужем поиск по базе данных для ASP программирования! Прошу помочь в моей сложной работе.

    Ответ:

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

    Вот процедура написанная мной для поиска документов по заданным данным
    <%
    'Открытие базы
    set cnn1 = server.createobject("ADODB.connection")
    cString= "Inet_Baza"
    cnn1.open cString
    'Создание RecordSeta
    set rsMbrs=server.createobject("ADODB.recordset")
    Dim cStringZ(10)
    for i=0 to 6
      cStringZ(i)=Request.Form("box" & i+1)
      cStringZ(i)=Replace(cStringZ(i),"*","%")
    next
    i=0
    sql="SELECT Поиск.* FROM Поиск " & _
    "WHERE (((Поиск.Название) Like '" & cStringZ(0) & "') AND ((Поиск.Номер) Like '" & cStringZ(1) & "') AND " & _
    "((Поиск.Дата_принятия) Like '" & cStringZ(2) & "') AND ((Поиск.Дата_вступления) Like '" & cStringZ(3) & "') AND ((Поиск.Орган_приневший) Like '" & cStringZ(4) & "') AND ((Поиск.Ключивые_слова) Like '" & cStringZ(5) & "'))"
    rsMBrs.open sql ,cnn1, adOpenForwardOnly, adLockReadOnly, adCmdText
    %>
    'вывод данных из базы
    <P align=center>
    <TABLE cellSpacing=1 cellPadding=1 width="100%" border=3>
      <%do while not rsmbrs.EOF
      i=i+1
      %>
      <%Response.Write "<TR>" +vbCrLf & _
         "<TD>" & i & "</TD>" & _
         "<TD>" & rsmbrs.Fields(7) & "</TD></TR>"
    rsmbrs.MoveNext
    loop %>
    </TABLE></P>
    <%if i=0 then Response.Write "Найдено документов 0" %>
    <%
    cnn1.close
    set cnn1=nothing
    %>
    <P></P>



    Вопрос:

       Как отсортировать двумерный массив раямерностью 10Х3 по первому столбцу, но при этом сохранить первоначальную свяяь между строками массива, если можно пришлите кусок кода?

    Ответ:

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

    В сортировке сортируеш по 1 столбцу сравнивая например A(x,1) и A(y,1) если они меняются то меняются и все оставшиеся A(x,2..10), A(y,2..10)


    Вопрос:

       Люди кто может сказать реально VB.NET отличается от VB?

    Ответ:

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

    ]CBK[C...R...a...S...H что, точек в голове не хватает нажать ссылку VB.Net или статьи.
    хотя бывает, что если и читано, то не понято...



    Ответ:

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

    Отличается очень сильно - даже по духу (идеологии).


    Вопрос:

       Имеется некоторая проблема: нашел очень неплохую литературку (Книга +CD) по VB.Net. Стоит довольно приличных денег при довольнол подробной информации. Если кто имел дело с VB.Net подскажите, стоит ли нанего переходить и есть ли у него какие-нибудь особые требования к системе?

    Ответ:

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

    Нужна операционка «нового поколения» (XP, 2000). 95 не поддерживает, а для 98, 98 SE, МЕ нужен какой-то сервис – пак. Для железа тоже нужно обновится, нужно более – менее мощная машина.
    А переходить, скорей всего, рано или поздно придется.



    Ответ:

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

    Дело вкуса. Я в прошлом году попробовал - понравилось, но реально перейти никак не решусь. Главное что сдерживает - это несозможность установки программ на слабенькие компы. (очень тяжелый Framework.NET).


    Вопрос:

       Как получиь Hwnd активного в данный момент окна, но выяванного не моей программой (т.е. GetActiveWindow не прокатывает)?

    Ответ:

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

    Public Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long



    Ответ:

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

    Вобшем этот модуль фотографирует и переделывает в Bitmap скрин шот рабочего стола или активного окна кому надо берите, а в нем соответственно можно выковырять строчку активного окна.
      
    'Модуль
    Option Explicit
    Option Base 0
    Private Type PALETTEENTRY
         peRed As Byte
         peGreen As Byte
         peBlue As Byte
         peFlags As Byte
    End Type
    Private Type LOGPALETTE
         palVersion As Integer
         palNumEntries As Integer
         palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors
    End Type
    Private Type GUID
         Data1 As Long
         Data2 As Integer
         Data3 As Integer
         Data4(7) As Byte
    End Type
    Private Type RECT
         Left As Long
         Top As Long
         Right As Long
         Bottom As Long
    End Type
    Private Type PicBmp
         Size As Long
         Type As Long
         hBmp As Long
         hPal As Long
         Reserved As Long
    End Type
    Private Const RASTERCAPS As Long = 38
    Private Const RC_PALETTE As Long = &H100
    Private Const SIZEPALETTE As Long = 104
    Private Declare Function CreateCompatibleBitmap Lib "GDI32" ( _
         ByVal hDC As Long, ByVal nWidth As Long, _
         ByVal nHeight As Long) As Long
    Private Declare Function GetDeviceCaps Lib "GDI32" ( _
         ByVal hDC As Long, ByVal iCapabilitiy As Long) As Long
    Private Declare Function GetSystemPaletteEntries Lib "GDI32" ( _
         ByVal hDC As Long, ByVal wStartIndex As Long, _
         ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) _
         As Long
    Private Declare Function CreateCompatibleDC Lib "GDI32" ( _
         ByVal hDC As Long) As Long
    Private Declare Function CreatePalette Lib "GDI32" ( _
         lpLogPalette As LOGPALETTE) As Long
    Private Declare Function SelectPalette Lib "GDI32" ( _
         ByVal hDC As Long, ByVal hPalette As Long, _
         ByVal bForceBackground As Long) As Long
    Private Declare Function RealizePalette Lib "GDI32" ( _
         ByVal hDC As Long) As Long
    Private Declare Function SelectObject Lib "GDI32" ( _
         ByVal hDC As Long, ByVal hObject As Long) As Long
    Private Declare Function BitBlt Lib "GDI32" ( _
         ByVal hDCDest As Long, ByVal XDest As Long, _
         ByVal YDest As Long, ByVal nWidth As Long, _
         ByVal nHeight As Long, ByVal hDCSrc As Long, _
         ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) _
         As Long
    Private Declare Function GetWindowDC Lib "USER32" ( _
         ByVal hWnd As Long) As Long
    Private Declare Function GetDC Lib "USER32" ( _
         ByVal hWnd As Long) As Long
    Private Declare Function ReleaseDC Lib "USER32" ( _
         ByVal hWnd As Long, ByVal hDC As Long) As Long
    Private Declare Function DeleteDC Lib "GDI32" ( _
         ByVal hDC As Long) As Long
    Private Declare Function GetWindowRect Lib "USER32" ( _
         ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function GetDesktopWindow Lib "USER32" () As Long
    Private Declare Function GetForegroundWindow Lib "USER32" () As Long
    Private Declare Function OleCreatePictureIndirect _
         Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, _
         ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
    Public Function CreateBitmapPicture(ByVal hBmp As Long, _
             ByVal hPal As Long) As Picture
    Dim r As Long
    Dim Pic As PicBmp
    Dim IPic As IPicture
    Dim IID_IDispatch As GUID
    With IID_IDispatch
         .Data1 = &H20400
         .Data4(0) = &HC0
         .Data4(7) = &H46
    End With
    With Pic
         .Size = Len(Pic) ' Length of structure
         .Type = vbPicTypeBitmap ' Type of Picture (bitmap)
         .hBmp = hBmp ' Handle to bitmap
         .hPal = hPal ' Handle to palette (may be null)
    End With
    r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
    Set CreateBitmapPicture = IPic
    End Function
    Public Function CaptureWindow(ByVal hWndSrc As Long, _
         ByVal bClient As Boolean, ByVal LeftSrc As Long, _
         ByVal TopSrc As Long, ByVal WidthSrc As Long, _
         ByVal HeightSrc As Long) As Picture
      
    Dim hDCMemory As Long
    Dim hBmp As Long
    Dim hBmpPrev As Long
    Dim r As Long
    Dim hDCSrc As Long
    Dim hPal As Long
    Dim hPalPrev As Long
    Dim RasterCapsScrn As Long
    Dim HasPaletteScrn As Long
    Dim PaletteSizeScrn As Long
    Dim LogPal As LOGPALETTE
    If bClient Then
         hDCSrc = GetDC(hWndSrc) 'Get DC for Client area.
    Else
         hDCSrc = GetWindowDC(hWndSrc) 'Get DC for entire window.
    End If
    hDCMemory = CreateCompatibleDC(hDCSrc)
    hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
    hBmpPrev = SelectObject(hDCMemory, hBmp)
    RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) 'Raster capabilities
    HasPaletteScrn = RasterCapsScrn And RC_PALETTE 'Palette support
    PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) 'Palette size
    If HasPaletteScrn And (PaletteSizeScrn = 256) Then
         LogPal.palVersion = &H300
         LogPal.palNumEntries = 256
         r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
         hPal = CreatePalette(LogPal)
         hPalPrev = SelectPalette(hDCMemory, hPal, 0)
         r = RealizePalette(hDCMemory)
    End If
    r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, _
         LeftSrc, TopSrc, vbSrcCopy)
    hBmp = SelectObject(hDCMemory, hBmpPrev)
    If HasPaletteScrn And (PaletteSizeScrn = 256) Then
         hPal = SelectPalette(hDCMemory, hPalPrev, 0)
    End If
    r = DeleteDC(hDCMemory)
    r = ReleaseDC(hWndSrc, hDCSrc)
    Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)
    End Function
      
    Public Function CaptureScreen() As Picture
    Dim hWndScreen As Long
    hWndScreen = GetDesktopWindow()
    With Screen
         Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, _
                 .Width \ .TwipsPerPixelX, .Height \ .TwipsPerPixelY)
    End With
    End Function
      
    Public Function CaptureForm(frm As Form) As Picture
    With frm
         Set CaptureForm = CaptureWindow(.hWnd, False, 0, 0, _
                 .ScaleX(.Width, vbTwips, vbPixels), _
                 .ScaleY(.Height, vbTwips, vbPixels))
    End With
    End Function
      
    Public Function CaptureClient(frm As Form) As Picture
    With frm
         Set CaptureClient = CaptureWindow(.hWnd, True, 0, 0, _
                 .ScaleX(.ScaleWidth, .ScaleMode, vbPixels), _
                 .ScaleY(.ScaleHeight, .ScaleMode, vbPixels))
    End With
    End Function
      
    Public Function CaptureActiveWindow() As Picture
    Dim hWndActive As Long
    Dim RectActive As RECT
    hWndActive = GetForegroundWindow()
    Call GetWindowRect(hWndActive, RectActive)
    With RectActive
         Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, _
                 .Right - .Left, .Bottom - .Top)
    End With
    End Function
      
    Public Sub PrintPictureToFitPage(Prn As Printer, Pic As Picture)
    Dim PicRatio As Double
    Dim PrnWidth As Double
    Dim PrnHeight As Double
    Dim PrnRatio As Double
    Dim PrnPicWidth As Double
    Dim PrnPicHeight As Double
    Const vbHiMetric As Integer = 8
    If Pic.Height >= Pic.Width Then
         Prn.Orientation = vbPRORPortrait 'Taller than wide
    Else
         Prn.Orientation = vbPRORLandscape 'Wider than tall
    End If
    PicRatio = Pic.Width / Pic.Height
    With Prn
         PrnWidth = .ScaleX(.ScaleWidth, .ScaleMode, vbHiMetric)
         PrnHeight = .ScaleY(.ScaleHeight, .ScaleMode, vbHiMetric)
    End With
    PrnRatio = PrnWidth / PrnHeight
    If PicRatio >= PrnRatio Then
         PrnPicWidth = Prn.ScaleX(PrnWidth, vbHiMetric, Prn.ScaleMode)
         PrnPicHeight = Prn.ScaleY(PrnWidth / PicRatio, vbHiMetric, Prn.ScaleMode)
    Else
         PrnPicHeight = Prn.ScaleY(PrnHeight, vbHiMetric, Prn.ScaleMode)
         PrnPicWidth = Prn.ScaleX(PrnHeight * PicRatio, vbHiMetric, Prn.ScaleMode)
    End If
    Call Prn.PaintPicture(Pic, 0, 0, PrnPicWidth, PrnPicHeight)
    End Sub
      
    'Программа
    Picture1.Picture = CaptureScreen



    Ответ:

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

    Declare Function GetForegroundWindow Lib "user32" () As Long



    Ответ:

    Автор ответа: P@Ssword

    GetForegroundWindow


    Вопрос:

       Подскажите, если знаете, как можно изменить вид кодировки отображения файлов, загружаемых в richtextbox?
    Еще вопрос: как и с помощью какого control'а можно (если можно) загрузить word'овский документ для корректного просмотра и/или редактирования?

    Ответ:

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

    Если правильно понял вопрос - используй свойство .Font.Charset.




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

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

    наверх


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

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