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


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

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

       Свежий выпуск.
    Читайте!


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




    Aslof рекомендует

       Ищешь фильм?
    http://subscribe.ru/catalog/rest.cinema.filmforyou


    Citycat by Email

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

    наверх


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

    Дата: 25.11.2003 12:27 | Раздел: Статьи по VB | Автор: Albert Ponomarev

    Обфускация в .NET. Том I - В данной публикации обсуждаются вопросы защиты .Net продуктов, в частности путем обфускации (запутывания).



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

    12:28 / 30 ноя.  Вопрос дня! | Хитов: 4 |  Ответов: 4
    10:19 / 30 ноя.  Компиляция, линковка(поправка!) | Хитов: 3 |  Ответов: 2
    22:20 / 29 ноя.  Pomogite!!!Plz! | Хитов: 14 |  Ответов: 4
    22:08 / 29 ноя.  Компиляция, линковка | Хитов: 13 |  Ответов: 2
    21:52 / 29 ноя.  как?? | Хитов: 18 |  Ответов: 2
    21:45 / 29 ноя.  Apache & ASP | Хитов: 4 |  Ответов: 0
    21:25 / 29 ноя.  Инсталл не работает в Windows 2000/XP (VB6) | Хитов: 6 |  Ответов: 0
    20:02 / 29 ноя.  Date | Хитов: 11 |  Ответов: 2
    19:36 / 29 ноя.  MSComm & Internet | Хитов: 3 |  Ответов: 1
    18:44 / 29 ноя.   Интернет, однако. | Хитов: 7 |  Ответов: 0
    15:58 / 29 ноя.  PBDLL + VB | Хитов: 23 |  Ответов: 10
    15:05 / 29 ноя.  Запустить программу | Хитов: 10 |  Ответов: 0
    14:36 / 29 ноя.  Защита CD от копирования | Хитов: 12 |  Ответов: 0
    11:03 / 29 ноя.  FSO HelpMe и не только | Хитов: 12 |  Ответов: 2
    09:54 / 29 ноя.  HTTP & WinSock | Хитов: 10 |  Ответов: 5
    09:15 / 29 ноя.  Новое сообщение без темы | Хитов: 9 |  Ответов: 0
    22:32 / 28 ноя.  Нужно найти один контрол | Хитов: 32 |  Ответов: 2
    22:16 / 28 ноя.  addRow | Хитов: 12 |  Ответов: 0
    20:39 / 28 ноя.  Рекурсирвный перебор по сайту | Хитов: 16 |  Ответов: 1
    20:26 / 28 ноя.  Разница между VBA в EXCELL 2000 и EXCELL XP | Хитов: 10 |  Ответов: 0


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



    наверх


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



    наверх


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

    • 28.11.2003 - Конкурс dotNET 2004
      VBStreets при поддержке Российского представительства корпорации Microsoft объявляет открытый конкурс проектов на платформе .NET для разработчиков на Microsoft Visual Basic. Цель конкурса - как можно больше открыть платформу .NET для широкого круга разработчиков. Конкурс проводиться в двух основных
    • 28.11.2003 - Свежие новости MSDN для разработчиков на .NET
      Важнейшие материалы, новые веб-ресурсы, продукты и технологии наших партнеров, веб-презентации, общение в режиме реального времени, мероприятия для разработчиков.


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



    наверх


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

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



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



    наверх


    Один момент из жизни форума: Отмена удаления строки в DataGrid

    Адерес темы: http://vbnet.ru/forum/show.asp?id=28432

    Вопрос:
    Автор вопроса: Alexander Bondarenko

       В VB.NET не могу решить вроде банальную задачку со стандартным DataGrid.
       При поытке пользоватоля удалить запись я хочу вывести сообщение "Уверен?" и если пользователь ответит "Нет" то отменить удаление.


    Ответы:

    Автор: Павел
        Путём курения MSDN у класса DataTable было найдено событие RowDeleting. Подписывайся на него и, если строку удалять не надо, в обработчике события ставь аргумент Action равным DataRowAction.Rollback.



    наверх


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

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

    Вопросы:


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

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

       В ообщем мне нужно сканировать процессы (из под Win2_k). И у определенного процеса изнать путь исполняемого файла (приложения).
    Вопрос: Как узнать расположение (полный путь к ) файла, через его процесы


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

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

       Подскажите, пожалуйста, какой самый быстрый (по производительности) способ склеить два,три,.... файла средствами VB.


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

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

       Помогите, как в DataReport динамически добавить Label, ну и вообще какие либо объекты, или если такое не возможно, то где это возможно?


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

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

       Пожалуйста, помогите сделать синхронизацию. Имеется база и её реплики (ADO3.51). В базе хранится дерево, т.е. в таблице "люди" хранятся их ИД и описание, а в таблице "связи" хранятся их ИД и ИД родителя. Проблема в том, что обе базы заполняются на разных машинах и ИД людей не совпадают, следовательно при синхронизации в базах получается по два одинаковых человека с разными ИД. Т.е. вся структура напоминает дерево, файловую систему. Как такое можно сделать?

    Прошу учесть, что:
    1. ФИО не является уникальным (вообще ничего уникального нет, всё может повторяться). Кстати, это меня смущает. Возможно ли создание подобных систем с таким условием?
    2. База будет огромной, следовательно идентификаторы должны быть небольшими.


    Автор вопроса: Мелёшин А.А.

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

       Я сделал БД на Visual Basic, но она не работает на других компьютерах. Т.е. БД присоедена у меня по одному адресу, а на другом компьютере по другому.


    Автор вопроса: Учебный центр

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

       Вышлите пример какой-нибудь маленькой БД (желательно с комментариями). Например, содержащую информацию о студентах, их адреса, телефоны.


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

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

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


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

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

       Есть хороший код:

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_SETHOTKEY = &H32
    Private Const WM_SHOWWINDOW = &H18
    Private Const HK_SHIFTA = &H141 'Shift + A
    Private Const HK_SHIFTB = &H142 'Shift + B
    Private Const HK_CONTROLA = &H241 'Control + A
    Private Const HK_ALTZ = &H45A
    Private Sub Form_Load()
    'Позволить узнать windows какая горячая клавиша в вашем приложении
    erg& = SendMessage(Me.hwnd, WM_SETHOTKEY, HK_ALTZ, 0)
    If erg& <> 1 Then MsgBox "You need another hotkey", vbOKOnly, "Error"
    'Сказать windows что делать при нажатии на hotkey
    'в данном случае - показать окно программы
    erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0)
    End Sub

    Как Вы поняли, он позволяет активировать Ваше приложение при нажатии HOTKEY. Но, если я, допустим, хочу не активировать приложение, а выпонить другую процедуру, то где мне эту код этой самой процедуры писать?. И второй вопрос: Какая константа Ctrl+8? (Или по-возможности список всех констант).


    Автор вопроса: Лунный Кот

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

       Дано: MS Outlook 2000. Создаем список рассылки с именем, например «Приятели». Добавляем в него контакты, например «Вася», «Петя» и «Ваня». Создаем правило для папки «Входящие»: Мастер правил -> Создать -> Применить это правило, когда получены сообщения -> От [отправители или список рассылки] -> Добавляем вместо [отправители или список рассылки] наш список с именем «Приятели», и получаем следующее сообщение: «Приятели» является личным списком рассылки и не может использоваться для данной операции. Использовать отдельные записи из «Приятели»?
    Цель: Использовать не отдельные записи, а все-таки сам список, причем он должен автоматически обновляться в правиле. Второй вариант – можно создать подпапку для элементов типа «Контакт», поместить туда контакты «Вася», «Петя» и «Ваня», и при помещении контакта в эту подпапку он должен автоматически помещаться в список этих самых «отдельных записей».
    Может быть, кто-нибудь посоветует, как это сделать? Если не слишком побеспокою, то, нет ли у кого-нибудь из уважаемых экспертов исходника SUB или FUNCTION, которая могла бы организовать подобную обработку?

    PS Просьба не предлагать перейти на БАТ или еще что-нибудь… Программа, которую использую, меня вполне устраивает во всех отношениях.


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

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

       Хотел узнать как добавлять музыку или звуки в VB?


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

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

       Как добавлять в *.txt строки из VB?


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

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

       Как загружать файлы из .txt в VB?




    Ответы:


    Вопрос:

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

            myExcelObject.Sheets("Лист1").Range("A1:E1").HorizontalAlignment = xlCenter, или
            myExcelObject.Sheets("Лист1").Cells(1, 1).HorizontalAlignment = xlCenter

    выдается сообщение об ошибке

    Run-time error '1004':
    Нельзя установить свойство HorizontalAlignment класса Range

    Что не так? Помогите, пожалуйста.

    Ответ:

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

    В вашем случае для Excel вам надо указать следующие параметры:

    myExcelObject.Sheets("Лист1").Range("A1:E1").HorizontalAlignment = 3

    То-есть получается это выбор третьего пункта меню "Формат ячейки" (центрирование).


    Вопрос:

       Как произвести конвертирование текста из DOS в Win (or UniCode)?

    Ответ:

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

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

    Option Explicit

    Private Declare Function CharToOemBuff _
    Lib "user32" _
    Alias "CharToOemBuffA" (ByVal lpszSrc As String, _
                                             ByVal lpszDst As String, _
                                             ByVal cchDstLength As Long _
    ) As Long

    Private Declare Function OemToCharBuff _
    Lib "user32" _
    Alias "OemToCharBuffA" (ByVal lpszSrc As String, _
                                             ByVal lpszDst As String, _
                                             ByVal cchDstLength As Long _
    ) As Long

    ' from DOS into WIN
    Public Function ToAnsi(s As String) As String
          Dim Buffer As String
          Buffer = Space(Len(s) + 1)
          OemToCharBuff s, Buffer, Len(s)
          ToAnsi = Left(Buffer, Len(s))
    End Function

    ' from WIN into DOS
    Public Function ToOEM(s As String) As String
          Dim Buffer As String
          Buffer = Space(Len(s) + 1)
          CharToOemBuff s, Buffer, Len(s)
          ToOEM = Left(Buffer, Len(s))
    End Function




    Ответ:

    Автор ответа: Никитин Андрей

    Dim strString as string
    Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    'Переводим строку в ANSI формат
    Call OemToChar(strString, strString)



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте такую штуку:

    Public Sub MyDecodeProcedure()
    Dim LenS&, i&, OneChar&, OneByte&, j&
    Dim ResultString$, txtBuffer As String, Ostatok&, LastStep&
         txtBuffer = ""
         'SourceFile = "c:\test.txt"
         Open SourceFile$ For Random Access Read As #1 Len = RecordLen
         LenS = LOF(1)
         If LenS = 0 Then
             Close #1: Kill SourceFile$
             Exit Sub
         End If
         Ostatok = LenS Mod RecordLen
         j = 1
         Do While j < ((LenS \ RecordLen) + 2)
             Get #1, j, SourceArray
             If j < ((LenS \ RecordLen) + 1) Then LastStep = RecordLen _
                 Else LastStep = Ostatok
             ResultString = Space$(LastStep) '(RecordLen)
             For i = 1 To LastStep
                 OneByte = SourceArray(i)
                 Select Case OneByte
                     Case Is < 128
                         OneChar = OneByte
                     Case 128 To 175
                         OneChar = OneByte + 64 + 848
                     Case 224 To 239
                         OneChar = OneByte + 16 + 848
                     Case Else
                         OneChar = AscW(Chr$(OneByte))
                 End Select
             ' получили преобразованное значение символа
             ' здесь необходимо сохранить преобразованное значение OneChar
             ' в строку или в файл
             Next
             j = j + 1
         Loop
         Close #1
    End Sub



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Public Sub MyDecodeProcedure()
    Dim LenS&, i&, OneChar&, OneByte&, j&
    Dim ResultString$, txtBuffer As String, Ostatok&, LastStep&
         txtBuffer = ""
         'SourceFile = "c:\test.txt"
         Open SourceFile$ For Random Access Read As #1 Len = RecordLen
         LenS = LOF(1)
         If LenS = 0 Then
             Close #1: Kill SourceFile$
             Exit Sub
         End If
         Ostatok = LenS Mod RecordLen
         j = 1
         Do While j < ((LenS \ RecordLen) + 2)
             Get #1, j, SourceArray
             If j < ((LenS \ RecordLen) + 1) Then LastStep = RecordLen _
                 Else LastStep = Ostatok
             ResultString = Space$(LastStep) '(RecordLen)
             For i = 1 To LastStep
                 OneByte = SourceArray(i)
                 Select Case OneByte
                     Case Is < 128
                         OneChar = OneByte
                     Case 128 To 175
                         OneChar = OneByte + 64 + 848
                     Case 224 To 239
                         OneChar = OneByte + 16 + 848
                     Case Else
                         OneChar = AscW(Chr$(OneByte))
                 End Select
             ' получили преобразованное значение символа
             ' здесь необходимо сохранить преобразованное значение OneChar
             ' в строку или в файл
             Next
             j = j + 1
         Loop
         Close #1
    End Sub



    Ответ:

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

    'в модули
    Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    'на форме
    ' Конвертируем строку "Cooller_Проект"
    ' в dos-кодировку
    Dim sourcestring As String ' нужная строка
    Dim deststring As String ' получаемая строка
    Dim code As Long
    sourcestring = "Cooller Проект" ' строка для перекодировки
    deststring = Space$(Len(sourcestring)) ' получаем перекодированную строку
    code = CharToOem(sourcestring, deststring)
    Debug.Print deststring

    А вооще эта тема была (дай бог памяти...) в 1 эл. выпуске на мыле... Давно это было...:)


    Вопрос:

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

    Ответ:

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

    Выделять текст можно так

         Selection.MoveLeft Unit:=wdCharacter, Count:=25
         Selection.MoveLeft Unit:=wdCharacter, Count:=32, Extend:=wdExtend
         Selection.Copy

    А самый реальный способ
    Начинаешь запись макроса
    делаешь что твоей душе угодно
    Стопаеш макрос и открываешь его для редактирования
    И о чудо там все что ты деле написано на VBA коде юзать не переюзать



    Ответ:

    Автор ответа: Никитин Андрей

    Начинаешь в Word-е запись макроса.
    Выполняешь все действия, которые тебя интересуют.
    Завершаешь запись макроса.
    Смотришь его исходник, анализируешь, делаешь у себя аналогично.


    Вопрос:

       Как через хэндл окна добраться до контролов, которые находятся в этом окне?

    Ответ:

    Автор ответа: Александр Юрьевич

    Можно через API FindFindowEx или EnumChildWindow (для перечисления всех дочерних контролов окна).


    Вопрос:

       Какой наиболее эфективный способ передать кучу параметров в функцию?
    Задача: на форме куча информации (тексты, списки), которые нужно передать в функцию, которая добавит их в базу.

    Ответ:

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

    Создаеш массивы и заносиш в них однотипную информацию и передаешь функции Не забуть про фишку ByRef, ByVal.



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте пересмотреть структуру программы.
    Передавать в функцию кучу параметров не очень хороший подход, тем более, если это тексты, списки и т.п.


    Вопрос:

       Как в Word и Excel перехватить вывод диалога печати документа? То есть пользователь нажимает кнопку "Печать", а вместо вывода диалога печати документа - выскакивает MessageBox.

    Ответ:

    Автор ответа: Дмитрий Куприянов

    Попробуйте такую конструкцию:

    Private WithEvents WordApp As Word.Application
    Private Sub WordApp_DocumentBeforePrint(ByVal Doc As Word.Document, Cancel As Boolean)
             'Эта процедура получает управление при попытке вывода на печать
             'Чтобы запретить печать достаточно написать Cancel=True или еще какие-нибудь действия
             ...
    End Sub


    Вопрос:

       Как в VB работать с реестром (создавать каталоги и присваевать значения параметрам)?

    Ответ:

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

    Dim MySettings As Variant ## Init variable
    SaveSetting "MyApp", "Startup", "Left", "Good" ## Save reg
    MySettings = GetSetting("MyApp", "Startup", "Left", "") ## Load reg
    MsgBox MySettings ## alert reg
    DeleteSetting "MyApp", "Startup" ## delete reg
      
    It's standart command. Recomended Api-Function.



    Ответ:

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

    У меня есть и контролы и примеры. Пиши, если нужно отправить.



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Самый простой способ использовать функции SaveSetting и GetSetting.
    Только эти функции работают в ветке реестра HKEY_CURRENT_USER\Software\VB and VBA Program Setting
    Другой способ - использовать API



    Ответ:

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

         Пример мне когда-то прислали. Он вообще-то про автозагрузку, но если разобраться...
         
         Чтобы добавить программу в автозагрузку, необходимо создать в разделе реестра
         HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
         строковый параметр. В значении параметра установить путь программы.
         В модуле пишешь:
           
         Option Explicit
         Public Const REG_SZ As Long = 1
         Public Const REG_DWORD As Long = 4
         Public Const HKEY_LOCAL_MACHINE = &H80000002
         Public Const HKEY_CLASSES_ROOT = &H80000000
         Public Const HKEY_CURRENT_USER = &H80000001
         Public Const HKEY_USERS = &H80000003
         Public Const ERROR_NONE = 0
         Public Const ERROR_BADDB = 1
         Public Const ERROR_BADKEY = 2
         Public Const ERROR_CANTOPEN = 3
         Public Const ERROR_CANTREAD = 4
         Public Const ERROR_CANTWRITE = 5
         Public Const ERROR_OUTOFMEMORY = 6
         Public Const ERROR_INVALID_PARAMETER = 7
         Public Const ERROR_ACCESS_DENIED = 8
         Public Const ERROR_INVALID_PARAMETERS = 87
         Public Const ERROR_NO_MORE_ITEMS = 259
         Public Const KEY_ALL_ACCESS = &H3F
         Public Const REG_OPTION_NON_VOLATILE = 0
         Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
         Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
         Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
         Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
         Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
         Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
         Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
         Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
         Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
         Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
           
         'Создание нового ключа (подключа)
         Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
         Dim hNewKey As Long
         Dim lRetVal As Long
         lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString,
         REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey,
         lRetVal)
         RegCloseKey (hNewKey)
         End Function
           
         'Запись данных в ключ
         Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String,
         sValueName As String, vValueSetting As Variant, lValueType As Long)
         Dim lRetVal As Long
         Dim hKey As Long
         lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS,
         hKey)
         lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
         RegCloseKey (hKey)
         End Function
         Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As
         Long, vValue As Variant) As Long
         Dim lValue As Long
         Dim sValue As String
         Select Case lType
                 Case REG_SZ
                      sValue = vValue
                      SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue,
         Len(sValue))
                 Case REG_DWORD
                      lValue = vValue
                      SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
           
         End Select
         End Function
           
         'Возвращает значения записанные в ключе
         Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
           
         Dim lRetVal As Long
         Dim hKey As Long
         Dim vValue As Variant
           
         lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
         lRetVal = QueryValueEx(hKey, sValueName, vValue)
         QueryValue = vValue
         RegCloseKey (hKey)
         End Function
           
         Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
         Dim a As Integer
         Dim cch As Long
         Dim lrc As Long
         Dim lType As Long
         Dim lValue As Long
         Dim sValue As String
           
         On Error GoTo QueryValueExError
              
         'Определение размера и типа считываемых данных
         lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
         If lrc <> ERROR_NONE Then a = 0
           
         Select Case lType
              'Для символьных
              Case REG_SZ:
              sValue = String(cch, 0)
              lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
              If lrc = ERROR_NONE Then
                 vValue = Left$(sValue, cch)
              Else
                 vValue = Empty
              End If
           
              'Для числовых
              Case REG_DWORD:
              lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
              If lrc = ERROR_NONE Then vValue = lValue
              'Для остальных не поддержанных типов данных
              Case Else
              lrc = -1
              End Select
           
         QueryValueExExit:
              QueryValueEx = lrc
              Exit Function
           
         QueryValueExError:
             Resume QueryValueExExit
         End Function
           
         'Удаление значений ключа
           
         Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String,
         sValueName As String)
           
         Dim lRetVal As Long
         Dim hKey As Long
           
         lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS,
         hKey)
         lRetVal = RegDeleteValue(hKey, sValueName)
         RegCloseKey (hKey)
         End Function
           
         'Удаление ключа
         Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
         Dim lRetVal As Long
         lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
         End Function
           
         В примере написан полный код работы с реестром, если необходимо только записать данные, то лишнее можно убрать.
           
         Применение:

         Private Sub Command1_Click()
         Dim path As String
         path = "Software\Microsoft\Windows\CurrentVersion\Run"
         CreateNewKey HKEY_LOCAL_MACHINE, path
         SetKeyValue HKEY_LOCAL_MACHINE, path, "Назавание программы", "здесь пишешь полный путь программы", REG_SZ
         End Sub


    Вопрос:

       Дан одномерный массив А, сост. из 10 элементов. Как написать программу нахождения максимального отрицательного элемента массива А и определения его индекса?

    Ответ:

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

    Индекс я не догнал. Это что, порядковый номер чтоль? А остальное так:

    Public Function минимальное(массив, вернуть_индекс As Boolean)
         Max = массив(0)
         Index = 0
         For j = 0 To 9
             If массив(j) < Max Then
                 Max = массив(j)
                 Index = j
             End If
         Next
    Loop
    If вернуть_индекс = True Then
         минимальное = Index 'возвращаем индекс
    Else
         минимальное = Max 'возвращаем число
    End If
    End Function



    Ответ:

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

    dim a(9) as integer
    dim MinEl as integer
    dim indexMin as integer
    for i=0 to 9
    a(i)=inputbox("XXXX","XXX") 'ввод данных
    next i
    minEl=a(0) 'пусть наименьшим будет первый элимент
    indexMin=0
    for i=1 to 9
    if a(i)< 0 then 'Только отрицательные элименты
    if minEl>a(i) then indexMin=i:minEl=a(i) 'Если найден отрицательный элимент больше предыдушего
    end if
    next i
    if indexMin=0 and minEL>=0 then Msgbox "Нет отрицательных элиментов" else Msgbox "максим. отриц. эл. = " & minEl &" его индекс= " & indexMin



    Ответ:

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

    Элементарно Ватсон!

    Dim A() As Variant
         Dim i As Integer
         Dim d As Double
         Dim n As Integer
         A = Array(-0.5, -1, -6, -9, 12, 24, 50)
         d = -(1 ^ 999) 'Ну очень мало
         For i = 0 To UBound(A)
             If A(i) < 0 Then
                 If A(i) > d Then
                     d = A(i)
                     n = i
                 End If
             End If
         Next i
         Debug.Print n; "|"; d
      
    А вообще-то уроки нужно делать самому...



    Ответ:

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

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

    Dim A(9) As Integer ' например. Можно объявить массив любого типа
    Dim Amin As Integer ' сюда будет записываться минимальное значение
    отрицательных элементов
    Dim i As Integer ' для счётчка цикла
    Dim iMin As Integer ' сюда будет записываться индекс
    максимального отрицательного значения

    Amin = 1 ' взял от фонаря любое положительное
    число. Любое отрицательное число будет гарантировано меньше него

    For i = 0 to 9
            If (A(i) < 0) Then
                  If (A(i) < Amin) Then
                          Amin = A(i)
                          iMin = i
                  End If
            End If
    Next i

    А после этого можно использовать значения для вывода в текстовых полях:

    txtAmin.Text = "Минимальный элемент массива равен " & Amin
    txtImin.Text = "Индекс минимального элемента: " & iMin

    или в окне Immediate:

    Debug.Print Amin
    Debug.Print iMin




    Ответ:

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

    Слушай ты в школе то учился :-)

    Dim a(10)
    a(1) = -4: a(2) = -20: a(3) = -4: a(4) = -2: a(5) = -4: a(6) = -2: a(7) = -4: a(8) = -2: a(9) = -4:
    a(10) = -2
    cooller = a(i)
    For i = 1 To 10
    If cooller > a(i) Then cooller = a(i): cIndex = i
    Next i
    Print cooller, cIndex


    Вопрос:

       Как открыть документ Word?

    Ответ:

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

    Примерно вот так:

    Private Sub Command1_Click()
    Dim objWord As Object
    Dim filedoc As String

    Set objWord = CreateObject("word.application")
    objWord.Visible = True
    filedoc = "c:\test\test.doc"
    objWord.Documents.Open FileName:=filedoc, ConfirmConversions:=False, ReadOnly:= _
             False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
             "", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
             Format:=1
    End Sub



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте так:

    Private WithEvents WordApp As Word.Application
    Private Sub Sub1
             ...
             Set WordApp = CreateObject("Word.Application")
                 WordApp.Documents.Open FileName
             ...
    End Sub


    Вопрос:

       Как при выходе из программы выключить windows, а если возможно то и компьютер?

    Ответ:

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

    ## It's Shuting you system
      
    Public Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
      
    ## It's Aborting shutdown.(if this need...)
    Public Declare Function AbortSystemShutdown Lib "advapi32.dll" Alias "AbortSystemShutdownA" (ByVal lpMachineName As String) As Long
      
    #################################################### * * *
      
    @ Samles:
      
    InitiateSystemShutdown("192.168.0.46", "And yes leave you in world an ion with word of the god. Into the name of father and and holy ghost. Amen.", 60, False, False)
      
    AbortSystemShutdown("192.168.0.46")



    Ответ:

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

    Private Sub Form_Unload()
    Shell "shell32,SHExitWindowsEx 1"
    End Sub



    Ответ:

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

    Разместите в модуле:

        Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
          ByVal dwReserved As Long) As Long

        Public Const EWX_LOGOFF = 0
        Public Const EWX_SHUTDOWN = 1
        Public Const EWX_REBOOT = 2
        Public Const EWX_FORCE = 4


    А это в коде:

        Dim s As Long

        'Так можно сделать Shut down
         s = ExitWindowsEx(EWX_SHUTDOWN, 0&)

        'Так можно сделать Log off s = ExitWindowsEx(EWX_LOGOFF, 0&)

        'А так Reboot s = ExitWindowsEx(EWX_REBOOT, 0&)

    Но самый верный способ это молотком и по монитору и по монитору...:)


    Вопрос:

       Как записать текст в файл *.txt через VB?

    Ответ:

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

    ##See:

         Number=FreeFile
         Open "File.txt" For Output as Number
         print #Number,"qweqweqweqwe"
         close #Number
      



    Ответ:

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

    Open "c:\temp\fillist.in" For Output As #1
    Print #1, путь
    Reset



    Ответ:

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

    Open "WriteME.txt" for append as #1
    print #1 ,"Текушее системное время" & time



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте так

    Dim strSave as TextStream
    Dim strFileName as String
    Sub WText
             …
             Set strSave=fso.OpenTextFile(strFileName, ForWriting, True)
             strSave.Write txtData
             strSave.Close
             ...
    End Sub

    Где fso - FileSystemObject, а txtData - текст записываемый в файл



    Ответ:

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

    open "cooller.txt" for output as #1
    print #1,"То что надо"
    close #1


    Вопрос:

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

    Ответ:

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

    Open "c:\temp\fillist.in" For Input As #1
    Line Input #1, строка1
    if строка1=значение then
         действие
    end if
    Reset



    Ответ:

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

    Это как вариант.. Для одной строки в файле. Модифицировать можно как угодно.. :-)

    Private Sub Form_Load()

    Dim a As String

    Open "myfilename.txt" For Input As #1
    If Not EOF(1) Then Line Input #1, a Else Close #1: Exit Sub
    Select Case a
    Case "Variant1"
         'Код подпрограммы
    Case "Variant2"
         'Код подпрограммы
    Case "Variant3"
         'Код подпрограммы
    '...
    End Select
    Close #1

    End Sub



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте вот такую конструкцию:

    Public Sub MyProcedure()
    Dim LenS&, i&, OneByte&, j&
    Dim ResultString$, txtBuffer As String, Ostatok&, LastStep&
         txtBuffer = ""
         SourceFile = "c:\test.txt"
         Open SourceFile$ For Random Access Read As #1 Len = RecordLen
         LenS = LOF(1)
         If LenS = 0 Then
             Close #1: Kill SourceFile$
             Exit Sub
         End If
         Ostatok = LenS Mod RecordLen
         j = 1
         Do While j < ((LenS \ RecordLen) + 2)
             Get #1, j, SourceArray
             If j < ((LenS \ RecordLen) + 1) Then LastStep = RecordLen _
                 Else LastStep = Ostatok
             ResultString = Space$(LastStep)
             For i = 1 To LastStep
                 OneByte = SourceArray(i)
                 If OneByte = <соответствующее значение> Then
                     <соответствующие действия>
                 End If
             Next
             j = j + 1
         Loop
         Close #1
    End Sub



    Ответ:

    Автор ответа: Куприянов Дмитрий

    Попробуйте вот такую конструкцию

    Public Sub MyProcedure()
    Dim LenS&, i&, OneByte&, j&
    Dim ResultString$, txtBuffer As String, Ostatok&, LastStep&
         txtBuffer = ""
         SourceFile = "c:\test.txt"
         Open SourceFile$ For Random Access Read As #1 Len = RecordLen
         LenS = LOF(1)
         If LenS = 0 Then
             Close #1: Kill SourceFile$
             Exit Sub
         End If
         Ostatok = LenS Mod RecordLen
         j = 1
         Do While j < ((LenS \ RecordLen) + 2)
             Get #1, j, SourceArray
             If j < ((LenS \ RecordLen) + 1) Then LastStep = RecordLen _
                 Else LastStep = Ostatok
             ResultString = Space$(LastStep)
             For i = 1 To LastStep
                 OneByte = SourceArray(i)
                 If OneByte = <соответствующее значение> Then
                     <соответствующие действия>
                 End If
             Next
             j = j + 1
         Loop
         Close #1
    End Sub



    Ответ:

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

    Open "cooller.txt" For Input As #1
    Do
    Line Input #1, a$
    if a$="значение" then ' действие
    Loop Until EOF(1)
    Close #1
    ' слушай лучше найди таковый учебник Vb для чайников и штудируй на здоровье...Благо inet большой...:-(


    Вопрос:

       Есть объект Data, подключенный к FILE.DBF(содержит поля KOD и SUM), есть Text1 и Text2.
    Как осуществить поиск в поле KOD всех значений Техт1 и вывод в Техт2 суммы соответствующих значений поля SUM.
    Если использую SEEK в цикле, находит только первую запись с указанным кодом и суммирует, пока не закончится цикл.

    Ответ:

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

    Почему просто не выполнить запрос? Для чего грузить всю таблицу только для того, чтобы найти сумму.

    SELECT SUM(SUM) FROM FILE.DBF WHERE KOD='Text1'


    Вопрос:

       В папке есть куча рисунков с расширением bmp и jpg, а могут быть и не только рисунки. Рисунки не индексированы. С помощью CommonDialog открываю первый рисунок, который заносится в Picture. Подскажите, пожалуйста, как мне передать в CommonDialog1.FileName следующий рисунок, чтобы отобразить его в Picture. Такая штука есть в ACDTree и в XP-шном просмотрщике.

    Ответ:

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

    На сколько я понял, это будет а-ля АСDSee. Тогда почему бы тебе не поставить скрытый FileView, не передать ему путь и у него спрашивать следующее имя?




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

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

    наверх


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

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