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


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

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

       Новый выпуск!
    Читайте!


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




    Книги

    Переход на 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, и получишь всю необходимую инфу. А вообще, ты лучше в следующий раз с вопросами не ко мне, а туда. Может, я и отвечу там.
    - А не проше тебе здесь ответить?
    - Э-э-э... Там я баллы зарабатываю...
    - А это еще зачем?
    - Ладно, мотай. Дома почитаешь, все о них узнаешь. У меня тут халтурка... Давай, пока.
    - Пока. А как ты экспертом там зарегился?
    - Иди, иди! Инфу читай...

    наверх


    Citycat by Email

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

    наверх


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

    Дата: 15.08.2003 13:21 | Раздел: Примеры кода | Автор: Creator

    Opacity - Пример для тех, кто не может разобраться с прозрачностью в NT. От автора: Много возникает вопросов по поводу прозрачности, данный пример иллюстрирует данную возможность, причём без использования API. Однако, работоспособен только на платформах NT ... Я думаю не стоит труда использовать его, и как всегда всё тривиально :-)

    Дата: 15.08.2003 13:21 | Раздел: Примеры кода | Автор: Creator

    Animated GIF - Пример работы с анимированными GIF. От автора: Много проблем, по крайней мере у меня, было с анимированием Gif файлов в пректах :-(.... Решил исследовать этот вопрос в .NET ... Что получилось, на вскидку судите сами. Буду рад пожеланиям предложениям по оптимизации кода, пишите ...



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

    05:47 / 19 авг.  Привязка к железу | Хитов: 4 |  Ответов: 1
    05:47 / 19 авг.  Привязка к железу | Хитов: 1 |  Ответов: 0
    04:14 / 19 авг.  Вопросик!!!!!!!!!!!!!!!!!!!!!!!! | Хитов: 6 |  Ответов: 0
    23:59 / 18 авг.  Админу | Хитов: 9 |  Ответов: 0
    20:56 / 18 авг.  Как в RichTextBoxe.... | Хитов: 7 |  Ответов: 0
    20:53 / 18 авг.  RichTextBox ?????? | Хитов: 11 |  Ответов: 1
    20:17 / 18 авг.  Создание мультиязычного интерфейса | Хитов: 18 |  Ответов: 2
    17:53 / 18 авг.  Енто только админу!!!!! | Хитов: 16 |  Ответов: 2
    17:49 / 18 авг.  Ошибка доступа к файлу!!!!!!! | Хитов: 13 |  Ответов: 1
    15:54 / 18 авг.  TextBox | Хитов: 12 |  Ответов: 1
    14:58 / 18 авг.  CodeWright | Хитов: 16 |  Ответов: 1
    12:44 / 18 авг.  свернись, расширься | Хитов: 17 |  Ответов: 1
    11:29 / 18 авг.  Dictionary | Хитов: 24 |  Ответов: 1
    11:04 / 18 авг.  перенос строк кодом | Хитов: 24 |  Ответов: 4
    10:24 / 18 авг.  Как реализовать или найти Splitter для VB? | Хитов: 21 |  Ответов: 2
    10:17 / 18 авг.  Проблемы с DataReport | Хитов: 14 |  Ответов: 1
    06:59 / 18 авг.  Вопрос не по VB: Установка PHP | Хитов: 6 |  Ответов: 0
    06:29 / 18 авг.  Добавление записи в через OLE DB | Хитов: 9 |  Ответов: 0
    23:16 / 17 авг.  картинка | Хитов: 36 |  Ответов: 1
    17:45 / 17 авг.  Формы | Хитов: 34 |  Ответов: 3


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



    наверх


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



    наверх


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



    наверх


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

      Пользователям Microsoft Windows: ознакомьтесь с бюллетенем по безопасности корпорации Microsoft MS03-026 и немедленно установите исправление по безопасности


    наверх


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



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



    наверх


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

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



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



    наверх


    Один момент из жизни форума: Как сменить частоту обновления экрана?

    Вопрос:
    Автор вопроса: Страшный Сон

       Я меняю разрешение экрана, а частота обновления становится 60 Hz, хотя могла быть и 140. Как её сменить из VB?


    Ответы:

    Атор: Padre
       Может быть через ChangeDisplaySettingsEx

    Атор: Страшный Сон
       Ещё и Ex есть? Что-то я в своём файле с функциями не нашел такого... Как эта функция объявляется?

    Атор: Артём Л.
       Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevMode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long

    · lpszDeviceName
    [in] Pointer to a null-terminated string that specifies the display device whose graphics mode the function will obtain information about. Only display device names as returned by EnumDisplayDevices are valid. See EnumDisplayDevices for further information on the names associated with these display devices.

    The lpszDeviceName parameter can be NULL. A NULL value specifies the default display device. The default device can be determined by calling EnumDisplayDevices and checking for the DISPLAY_DEVICE_PRIMARY_DEVICE flag.

    · lpDevMode
    [in] Pointer to a DEVMODE structure that describes the new graphics mode. If lpDevMode is NULL, all the values currently in the registry will be used for the display setting. Passing NULL for the lpDevMode parameter and 0 for the dwFlags parameter is the easiest way to return to the default mode after a dynamic mode change.

    The dmSize member must be initialized to the size, in bytes, of the DEVMODE structure. The dmDriverExtra member must be initialized to indicate the number of bytes of private driver data following the DEVMODE structure. In addition, you can use any of the following members of the DEVMODE structure.

    dmBitsPerPel
    Bits per pixel

    dmPelsWidth
    Pixel width

    dmPelsHeight
    Pixel height

    dmDisplayFlags
    Mode flags

    dmDisplayFrequency
    Mode frequency

    dmPosition
    Windows 98, Windows 2000: Position of the device in a multi-monitor configuration.

    In addition to using one or more of the preceding DEVMODE members, you must also set one or more of the following values in the dmFields member to change the display settings.

    DM_BITSPERPEL
    Use the dmBitsPerPel value.

    DM_PELSWIDTH
    Use the dmPelsWidth value.

    DM_PELSHEIGHT
    Use the dmPelsHeight value.

    DM_DISPLAYFLAGS
    Use the dmDisplayFlags value.

    DM_DISPLAYFREQUENCY
    Use the dmDisplayFrequency value.

    DM_POSITION
    Windows 98, Windows 2000: Use the dmPosition value.

    · hwnd
    Reserved; must be NULL.

    · dwflags
    [in] Indicates how the graphics mode should be changed. This parameter can be one of the following values.

    0
    The graphics mode for the current screen will be changed dynamically.

    CDS_FULLSCREEN
    The mode is temporary in nature.
    Windows NT/2000: If you change to and from another desktop, this mode will not be reset.

    CDS_GLOBAL
    The settings will be saved in the global settings area so that they will affect all users on the machine. Otherwise, only the settings for the user are modified. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.

    CDS_NORESET
    The settings will be saved in the registry, but will not take effect. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.

    CDS_RESET
    The settings should be changed, even if the requested settings are the same as the current settings.

    CDS_SET_PRIMARY
    This device will become the primary device.

    CDS_TEST
    The system tests if the requested graphics mode could be set.

    CDS_UPDATEREGISTRY
    The graphics mode for the current screen will be changed dynamically and the graphics mode will be updated in the registry. The mode information is stored in the USER profile.

    CDS_VIDEOPARAMETERS
    Windows NT/2000: When set, the lParam parameter is a pointer to a VIDEOPARAMETERS structure.

    Specifying CDS_TEST allows an application to determine which graphics modes are actually valid, without causing the system to change to them.

    If CDS_UPDATEREGISTRY is specified and it is possible to change the graphics mode dynamically, the information is stored in the registry and DISP_CHANGE_SUCCESSFUL is returned. If it is not possible to change the graphics mode dynamically, the information is stored in the registry and DISP_CHANGE_RESTART is returned.
    Windows NT/2000: If CDS_UPDATEREGISTRY is specified and the information could not be stored in the registry, the graphics mode is not changed and DISP_CHANGE_NOTUPDATED is returned.

    · lParam
    Windows NT/2000: [in] If dwFlags is CDS_VIDEOPARAMETERS, lParam is a pointer to a VIDEOPARAMETERS structure. Otherwise lParam must be NULL.



    наверх


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

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

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

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх

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

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

    Вопросы:


    Автор вопроса: Тим

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

       Как при помощи Microsoft Internet Transfer Control узнать такое свойство файла как дата и время последнего изменения?
    Если невозможно этим контролом, то подскажите пожалуйста как иначе?


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

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

       Вопрос насчет VB .NET.
    Кто-нибудь может поделиться файлами dx8_vb.hxi и dx8_vb.hxs?
    Если они весят не очень много…


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

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

       Можно ли средствами VB сделать программу бея окна (формы)? Только не чтоб окно было невидимым, а чтоб его ваще не было.


    Автор вопроса: Michael Fezulaev

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

       Есть объект DBGrid и есть у этого объект свойство Button. Я прочитал в MSDN что это для создание встроеного ComboBox. Но как это сделать не знаю. Если сможете дать исходник или линк какой нибуть.


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

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

       Какая функция на VB переводит строку из OEM/DOS в Win кодировку? Есть ли функции, типа Chr и Asc, воявращающие значения в "досовской" кодировке?


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

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

       Подскажите как програмно получить строковый параметр реестра в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command. Там значение по умолчанию. Если кто знает, то напишите, как записывать и читать из реестра.


    Автор вопроса: Игорь

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

       Как добавить новую форму для принтеров в WIN 2000. В 98 можно делать польяовательские раямеры а в NT такой возможности нет.




    Ответы:


    Вопрос:

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

    Ответ:

    Автор ответа: Дмитрий

    1) Можно сохранить положение контрола в INI-файле с помощью функций
    WinAPI:

    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
    "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
    "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpstring As Any, ByVal lpFileName As String) As Long

    Public Function Чтение(Раздел As String, Ключ As String, _
    ИмяФайла as String) As String
         Dim sTemp As String * 256
         Dim nLength As Integer
         
         sTemp = Space$(256)
         nLength = GetPrivateProfileString(Раздел, Ключ, "?", sTemp, 255, _
         ИмяФайла)
         
         Чтение = Left$(sTemp, nLength)

    End Function

    Public Sub Запись(Раздел As String, Ключ As String, Значение As String, _
    ИмяФайла as String)
         Dim n As Integer
         Dim sTemp As String
         
         sTemp = Значение
         
         'Заменим символы CR/LF на пробелы
         For n = 1 To Len(Значение)
             If Mid$(Значение, n, 1) = vbCr Or Mid$(Значение, n, 1) = vbLf Then
                 Mid$(Значение, n) = " "
             End If
         Next n
         n = WritePrivateProfileString(Раздел, Ключ, sTemp, ИмяФайла)

    End Sub

    Структура INI-файла
    [MyControl]
    Top=y
    Left=x
    Width=w
    Height=h

    MyControl - имя раздела
    Top,Left, Width, Height - ключи
    x, y, w, h - значения ключа

    Например, для получения предыдущего состояния контрола:
    Dim sTop as String
    Dim sLeft as String

    sTop=Чтение("MyControl", "Top", "MyINI.ini")
    sLeft=Чтение("MyControl", "Left", "MyINI.ini")

    With [MyControl]
          Left=sLeft
          Top=sTop
    End With

    При желании можно переделать функции Чтение, Запись для работы с
    числовыми данными

    2) Можно сохранить настойки также в реестре в ветви
    HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\ с помощью функции SaveSetting(AppName As String, Section As String, Key As String, Setting As String)
    а прочитать - GetSetting(AppName As String, Section As String, Key As String, [Default]) As String

    Но если данных мало, лучше пользоваться INI-файлами, а если много, то
    сохранять их уже не в HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program
    Settings\, а в
    HKEY_CURRENT_USER\SOFTWARE\YourCompanyName\YourProgramName\ с помощью функций работы с реестром из библиотеки advapi32.dll


    Вопрос:

       Как в Excel сделать что бы макрос запускался при изменении определенной ячейки?

    Ответ:

    Автор ответа: Дмитрий

    Заходишь в Visual Basic Editor (Alt+F11) в дереве выбираешь Лист1 (Sheet1). Откроется окно редактора. В нем в правом раскрывающимся списке выберешь Worksheet, в левом - Change. Появится заготовка:

    Private Sub Worksheet_Change(ByVal Target As Range)

    End Sub

    Для определения адреса измененной ячейки используй строку

    a=Target.Address



    Ответ:

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

    Процедура помещается в Книгу.

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
            
         If Source.Address = "$B$2" Then
             MsgBox "Новое значение: " & Source.Value
             'вызываешь свой макрос
         End If
         
    End Sub
       
    Вообще много ответов можно найти в самом хелпе VBA.



    Ответ:

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

    Попробуй переопределить обработчик Worksheet_Changed для нужного листа:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Row = 2 And Target.Column = 2 Then
           NewMacro --нужный макрос
        End If
    End Sub


    Вопрос:

       Как сделать функцию на подобии Inputbox? Т.е. вызываем функцию, она открывает окошко, ждёт, пока там чего-нибудь натворят, потом возобновляет работу и передаёт на выход результат работы.

    Ответ:

    Автор ответа: Дмитрий

    Вызывай форму модально Me.Show vbModal. Пока вызванная форма не будет закрыта, выполнение в вызвавшей форме будет остановлено. А для передачи параметров туда-обратно используй Public переменные.


    Вопрос:

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

    Ответ:

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

    Есть два способа разделить программу и функцию.

    СПОСОБ №1
    Если функция должна работать паралельно с основной программой и периодически возвращать в программу информацию о ходе своего выполнения, то можно например поступить так (основа для примера взята из "Visual Basic 6.0" MicrosoftPress):
    Создаем форму кидаем на нее метку и 2 кнопки: cmdStart и cmdStop.
    Добавляем класс с именем Test, в нем-то и будет находится долгоиграющая функция
    Код для формы:
      
    Option Explicit
    'Объявление события класса в форме
    Private WithEvents mTestFunc As Test
    'Переменная прерывания функции и завершения работы программы
    Private bCancel As Boolean
      
    Private Sub cmdStart_Click()
    'Прерывание функции запрещено
    bCancel = False
    'Вызов функции
    mTestFunc.TestFunc (10) '10 - параметр передаваемый в функцию
    'Если bCancel=True, то функция прервана
    If bCancel Then Label1.Caption = "Break"
    'Разрешить завершение программы
    bCancel = True
    End Sub
      
    Private Sub cmdStop_Click()
    ' Прервать функцию, функция будет прервана при очередном вызове события
    bCancel = True
    End Sub
      
    Private Sub Form_Load()
    'Создать объект класса Test
    'И связать WithEvents с ним
    Set mTestFunc = New Test
    'Разрешить завершение программы
    bCancel = True
    End Sub
      
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    'Нельзя завершать программу, пока не завершиться выполнение функции
    Cancel = Not bCancel
    If Cancel Then MsgBox "Завершите работу фукции", vbOKOnly
    End Sub
      
    ' Событие вызываемое в форме функцией
    Private Sub mTestFunc_TestEvent(ByVal lTest As Long, Cancel As Boolean)
    'Вывод хода выполнения функции
    Label1.Caption = lTest
    If bCancel Then Cancel = True
    End Sub
    Код для класса:
      
    Option Explicit
    'Задаем событие, которое будет вызываться в основной программе
    'Первое значение - статус выполнения, процент выполнения и т.д.
    'Второе значение - запрос на прерывание операции, ОБЯЗАТЕЛЬНО ПО ССЫЛКЕ !!!
    Public Event TestEvent(ByVal lTest As Long, ByRef Cancel As Boolean)
      
    ' lParam1 - Передаваемое в функцию значение
    Public Sub TestFunc(ByVal lParam1 As Long)
    Dim sStart As Single 'Время старта
    Dim sInterval As Single 'Интервал вызова события
    Dim bCancel As Boolean
    sStart = Timer
    sInterval = Timer
    ' Для примера время выполнения задается по таймеру
    ' В конкретной задаче вызывать можно в цикле или чему-нибудь подобному
    Do While Timer < (sStart + 100)
    ' Код реальной функции
    '....
    '....
    ' Вызов события 1 раз в секунду
    If Timer > (sInterval) Then
         sInterval = Timer + 1
         'Первое значение - статус выполнения, процент выполнения и т.д.
         'Второе значение - запрос на прерывание операции
         RaiseEvent TestEvent(Timer - sStart, bCancel)
         'При отмене выход из фунции
         If bCancel Then Exit Sub
    End If
    'Передать квант времени системе
    'Необходимо для отрисовки экрана и отработки
    'системных событий программой и системой
    DoEvents
    Loop
    End Sub

    СПОСОБ №2
    Если же функция работает независимо от основной программы, то оформи её в отдельной форме с запуском в немодальной форме:
    Form1.Visible = True 'Показать форму
    Form1.Test1 (10) 'Вызвать функцию
    И САМОЕ ГЛАВНОЕ В СВОЕЙ ФУНКЦИИ РЕГУЛЯРНО ВЫЗЫВАЙ:
    DoEvents



    Ответ:

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

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

    2) Используй DoEvents в теле функции. Это позволит приложению выполнить обработку графических событий и выполнить, например, прорисовку
    прогресс-бара


    Вопрос:

       Как программно создавать/удалять меню, подменю и т.д.?

    Ответ:

    Автор ответа: Дмитрий

    Используй массивы элементов управления.
    При создании меню необходимо задать индекс (поле Index). А в коде написать:

    Dim i As Integer
    i = mnuFile.UBound
    Load mnuFile(i+1)
    mnuFile(i+1).Visible = True
    mnuFile(i+1).Caption = "Caption"

    При этом если необоходимо сохранить новую структуру меню используй реестр или INI-файлы




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

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

    наверх


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

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