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


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

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

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

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


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




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    Размытие картинки

    Данный код демонстрирует размытие картинки.
    На форму поместить Picture1 и в него какую нибудь картинку. Private Type TColorRGB
         Red As Long
         Green As Long
         Blue As Long
    End Type
      
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
         If Button <> 1 Then Exit Sub
         Dim a1 As TColorRGB
         Dim b1 As TColorRGB
         Rad = 10 ' ?????? ???????????
         
         For i = y - Rad To y + Rad
             For j = x - Rad To x + Rad
                 n = 1 - (((j - x) / Rad) ^ 2 + ((i - y) / Rad) ^ 2)
                 If n <= 0 Then GoTo lab1
                 sr = 0
                 sg = 0
                 sb = 0
                 For o = i - 1 To i + 1
                     For k = j - 1 To j + 1
                         a = Picture1.Point(k, o)
                         a1 = LongToRGB(a)
                         sr = a1.Red + sr
                         sg = a1.Green + sg
                         sb = a1.Blue + sb
                     Next
                 Next
                 sr = sr / 9
                 sg = sg / 9
                 sb = sb / 9
                 
                 a = Picture1.Point(j, i)
                 a1 = LongToRGB(a)
                 r = (sr - a1.Red) * (n) + a1.Red
                 g = (sg - a1.Green) * (n) + a1.Green
                 b = (sb - a1.Blue) * (n) + a1.Blue
                 If r < 0 Then r = 0
                 If g < 0 Then g = 0
                 If b < 0 Then b = 0
                 
                 Picture1.PSet (j, i), RGB(r, g, b)
    lab1:
             Next
         Next
    End Sub
      
    Private Function LongToRGB(ByVal Index As Long) As TColorRGB
         LongToRGB.Red = Index And 255
         LongToRGB.Green = (Index And 65280) \ 256
         LongToRGB.Blue = (Index And 16711680) \ 65535
    End Function

    наверх


    Огонь

    Создайте новый проект, вставьте этот код. Довольно красивый огонь! Option Explicit

    Private Const x As Long = 25
    Private Const y As Long = 60
    Dim disp1(x, y) As Long
    Dim disp2(x, y) As Long
    Dim fon(x, y) As Long
    Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long

    Dim l As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
      
    Private Sub Form_Activate()
         Do
             Timer
             DoEvents
         Loop
    End Sub
      
    Private Sub Timer()
         PSet (0, 0), 0
         Dim i As Integer
         Dim o As Integer
         Dim R1 As Integer
         Dim G1 As Integer
         Dim B1 As Integer
         For i = 1 To 2
             disp1(Rnd * x / 2 + x / 4, 1) = Rnd * 20000
         Next
         For i = 1 To x - 1
             For o = 1 To y - 2
                 l = (disp1(i - 1, o - 1) + disp1(i, o - 1) + disp1(i + 1, o - 1) + disp1(i - 1, o) _
                     + disp1(i + 1, o) + disp1(i - 1, o + 1) + disp1(i, o + 1) + disp1(i + 1, o + 1) + disp1(i, o)) / 9.5
                 LongToColor l, R1, G1, B1
                 Call SetPixel(Form1.hdc, i + 123, y - o + 32, RGB(R1, G1, B1))
                 disp2(i, o + 1) = l
             Next
         Next
         CopyMemory disp1(0, 0), disp2(0, 0), (x + 1) * (y + 1) * Len(disp2(0, 0))
    End Sub
      
    Private Sub LongToColor(Index As Long, R As Integer, G As Integer, B As Integer)
         R = -((Index > 255) * 255 + (Index >= 0 And Index <= 255) * (Index Mod 256))
         G = -((Index > 511) * 255 + (Index >= 256 And Index <= 511) * (Index Mod 256))
         B = -((Index > 767) * 255 + (Index >= 512 And Index <= 767) * (Index Mod 256))
    End Sub

    наверх


    Текст за курсором

    Надпись за курсором. Создайте новый проект, свойство формы ScaleMode установить в 3-Pixel. На форму установите таймер, интервал подберите опытным путём... Вставьте этот код. 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
    Const HWND_NOTOPMOST = -2
    Const HWND_TOPMOST = -1
    Const SWP_NOACTIVATE = &H10
    Const SWP_NOMOVE = &H2
    Const SWP_NOSIZE = &H1

    Dim message As String
    Dim xpos() As Integer
    Dim ypos() As Integer
    Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
      Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
         X As Long
         Y As Long
    End Type
    Dim vv As POINTAPI
    Dim hRgn As Long
      
    Private Sub Form_Load()
         Me.Move 0, 0, Screen.Width * Screen.TwipsPerPixelX, Screen.Height * Screen.TwipsPerPixelY
         message = " -<(VIR)>-"
         ReDim xpos(Len(message))
         ReDim ypos(Len(message))
         Timer1.Enabled = True
         Call SetFormPosition(Me.hWnd, True)
    End Sub
      
    Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean)
         If TopPosition Then
             SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
         Else
             SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
         End If
    End Sub
      
    Private Sub Timer1_Timer()
         GetCursorPos vv
         xpos(1) = vv.X
         ypos(1) = vv.Y
         For i = Len(message) - 1 To 1 Step -1
             xpos(i + 1) = xpos(i) + 20
             ypos(i + 1) = ypos(i)
         Next
         Font.Name = "Times New Roman"
         Font.Bold = True
         Font.Size = 16
         BeginPath hdc
         For i = 1 To Len(message)
             CurrentX = xpos(i)
             CurrentY = ypos(i)
             Print Mid(message, i, 1)
         Next
         EndPath hdc
         hRgn = PathToRegion(hdc)
         SetWindowRgn hWnd, hRgn, True
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

           Вопрос по работе с Treeview.
        Можно ли сделать так, что бы плюсик у нода отображался независимо от того, есть внутри дети или нет?
        Проблема в том, что если не грузить сразу всё дерево из базы, потому что огромное оно, а только по уровням. что бы можно было на событие "Экспанд" загрузить детей и так далее. Без плюсика нет "экспанда". Сейчас выхожу из положения так: просто гружу один чилд в ноде, чтобы плюсик появился, а потом удаляю его перед загрузкой реальных детей. Но это муторное дело, приходится сначала сразу сворачивать нод, что б не прыгало всё дерево вверх-вниз, а потом опять разворачивать. Куча проверок и так далее.


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

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

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


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

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

       Нужен контрол или код для такой операции (она сплошь и рядом в броузерах и крупных приложениях): есть два обьекта, разделенные вертикальной линией (например, TreeView и Listbox). Если взятся за эту линию, то можно, пропорционально изменить длину окна каждого элемента.


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

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

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


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

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

       У меня вопрос к тем, кто разрабатывал видеоплейеры и т.д.
      
    Пытаюсь перевести свой проект из VB6 в NET, и столкнулся с такими проблемами:
      
    Имею примерно такой код:
      
    Public Function AVIFileInfo(ByVal pfile As Long, ByVal pfi As AVI_FILE_INFO, ByVal lSize As Byte) As Integer
    End Function
      
    Public Structure AVI_FILE_INFO
             Public dwMaxBytesPerSecond As Integer
             Public dwFlags As Integer
             Public dwCaps As Integer
             Public dwStreams As Integer
             Public dwSuggestedBufferSize As Integer
             Public dwWidth As Integer
             Public dwHeight As Integer
             Public dwScale As Integer
             Public dwRate As Integer
             Public dwLength As Integer
             Public dwEditCount As Integer
             Public szFileType As String ' (* 64 - VB6)
    End Structure
    ....
    Dim p As AVI_FILE_INFO
    dim pfile as Long
    hr = AVIFileOpen(pfile, "c:\myfile.avi", 0, 0)
    hr = AVIFileInfo(pfile, p, Len(p))
    .......
      
    Вопросы:
    1. Размер структуры AVI_FILE_INFO получается 48 байтов, тогда как в VB6 он был 108 байтов.
    2. Открыть-то файл могу, а вот получить информацию - нет. А точнее, выскакивает hr<>0 и p не заполняется.


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

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

       Как сделать так, чтобы форма при активации (по таймеру), "вставала" поверх всех окон?


    Автор вопроса: Taras Prikhodko

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

       Как работать со службой сообщений из VB в XP?


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

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

       Как можно создать доступ к БД, которой пользуются 2 проги одновременно, при этом коннект к ним должен быть открытым у обоих?


    Автор вопроса: Иван

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

       Есть Access XP.
    В нем (в одной из форм) надо организовать автоматическую проверку правописания а-ля Word. Т.е. чтобы неправильные слова подчеркивались красной линией.


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

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

       Есть программа, в ней в качстве фона формы используются картинки в формате JPG, которые загружаються из указаной папки, при этом нужно эту папочку с картинками поставлять с программой, можно ли какм то образом эти картинки вшить в екзешник, чтобы избавиться от этого неудобства?


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

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

       Почему когда пишу из массива в файл по For...Next все ок, но тормоза страшные (сами проверьте на файлике метра в три), а Put #1,,TMP -- моментально, но в конец файла дописывается лишний символ с кодом ноль. Функция Left работать отказалась на отрез...
    Что делать?

    P.S. То что можно просто скопировать файл test в test.in... Просто код упрощен для понимания, а так данные по идее будут преобразовываться. Заранее благодарен за ответ.

    Option Explicit
    Dim Str() As Byte
    Dim X As Long
    Dim Y As Long
    Dim TMP() As Byte
    Dim M

    Private Sub Form_Load()
    Me.Show
    Me.Refresh
    DoEvents

    Open "c:\test" For Binary As #1
    X = FileLen("c:\test")
    ReDim Str(X)
    ReDim TMP(X)
    Get #1, , Str
    Close

    For Y = 0 To X - 1 Step 0
    TMP(Y) = Str(Y)
    Y = Y + 1
    Next Y

    Open "c:\test.in" For Binary As #1
    'Так все ок, но тормозза...
    For Y = 0 To X - 1 Step 0
    Put #1, , TMP(Y)
    Y = Y + 1
    Next Y
    Close

    'Так быстро, но в конец файла дописывается лишний символ
    'с кодом 0
    Put #1, , TMP

    MsgBox "OK", , ""
    End
    End Sub


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

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

       Как в Access 97 создать представление из VB6?


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

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

       Как определить из кода VB, открыт ли файл (файл MS Excel) другим пользователем?


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

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

           Используя DataReport в VB6 создаю отчет. Надо установить горизонтальную ориентацию страницы. Если изменять размеры в DataReport, то выдается ошибка, что ширина отчета больше ширины бумаги.
        Как изменить ориентацию бумаги в DataReport или как программно изменять ориентацию бумаги в установках принтера?


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

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

       Опять кодировки!
    Почти все почтовые программы кодируют письма используя кодировку charset=Windows-1251, когда же мне необходимо самому дешифровать её - возникают проблемы!
    В предложенных примерах перевода из одной кодировки в другую не нашел кодировку 1251. Что это за такое? И как с ним бороться?


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

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

       1. Как в DAO 3.51 в открытой таблице узнать, какие есть колонки, т.е. их названия?
    2. Как в DAO 3.51 определить, сколько записей в таблице?




    Ответы:


    Вопрос:

       Подскажите как работает API функция и как можно записать про помощи неё новое значение в определённую ячейку памяти. Вот как выглядит функция:

    WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

    Объясните, что значат параметры IpBuffer, nSize и lnNumberOfBytesWritten и в какой из них нужно записывать новое значение. И ещё подскажите как работает ReadProcessMemory и объясните её параметры. Очень нужно.

    Ответ:

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

    WriteProcessMemory:
      
    Функция записывает данные в адресном пространстве другого процесса.
    hProcess - манипулятор процесса, в памятъ которого записываются данные
    lpBaseAddress - адрес в адресном пространстве другого процесса
    lpBuffer - буфер с данными, копируемыми в память другого процесса
    nSize - количество копируемых байт
    lpNumberOfBytesWritten - заполняется количеством байт, скопированных функцией
      
    ReadProcessmemory:
      
    Функция читает содержимое памяти из адресного пространства другого процесса. Все параметры те-же, только “наоборот”.


    Вопрос:

       А где можно увидеть рабочий пример Чата, типа клиент-клиент?

    Ответ:

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

    У меня есть, но только клиент-сервер. А каков принцип работы клиент-клиент?


    Вопрос:

       Как создать свой dll для своей проги?

    Ответ:

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

        Создаёшь длл проект, в sub main() пишешь:

    If App.StartMode = vbSModeStandalone Then
    gfrmperiodselect.Show vbModal
    End If

        Пишешь свои процедуры и/или функции в модуле(ях) классов, если используешь API ф-и, то прописывать их желательно в отдельном модуле.


    Вопрос:

       1. Я испольяую базу данных Access, первоначальные таблицы я создал вручную, а можно ли программно создать таблицу в базе данных Access?
    2. Как можно сделать так чтобы системный шрифты отображались в элементе СomboList?

    Ответ:

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

    Dim таблица_журнал As TableDef
    Set база_место = DBEngine.Workspaces(0)
    ' создаем базу
    Set база = база_место.CreateDatabase("baza.mdb", dbLangCyrillic)
    ' создаем таблицу "men"
    Set таблица_журнал = база.CreateTableDef("men")
    ' объявляем колонки для табл "men"
    Dim fio As Field, ID_work As Field, subject As Field
    ' дальше идет описание колонок
    Set fio = таблица_журнал.CreateField("fio", dbText, 100)
    Set ID_work = таблица_журнал.CreateField("ID_work", dbText, 100)
    ID_work.AllowZeroLength = True
    Set subject = таблица_журнал.CreateField("subject", dbMemo)
    ' теперь добавляем колонки к таблице
    таблица_журнал.Fields.Append fio
    таблица_журнал.Fields.Append ID_work
    таблица_журнал.Fields.Append subject
    'добавляем таблицу к базе
    база.TableDefs.Append таблица_журнал


    Вопрос:

       Я работаю с ASP. Как сделать так, чтобы на странице выводились из базы данных не все поля, а например 5. Чтобы внизу страницы соотвественно появлялись вот такие штуки, например: [1][2][3][5][6][7][8][9].И если кликнуть на 3, то соответсвенно выводятся с 11 по 15 статью.

    Ответ:

    Автор ответа: Chernov Dmitry

    Все зависит от того, какую БД ты используешь
      
    Если это MS SQL то используй конструкцию
      
    Select ... Limit [n,] m
      
    которая выводит m записей БД, начиная с n-ной (с первой, если n не указано)
      
    MS Access данный параметр SQL запросов не поддерживает, тут придется обходится программными методами (т.е. пробегать первые x записей из запроса без вывода, а потом выводить m записей).
      
    Как это оформить программно - поищи в INet, наверняка что нибудь найдешь. Примеров реализации подобного на PHP в INet достаточно, про ASP - не знаю.


    Вопрос:

       Есть три запроса , как из них собрать один запрос?

      запрос: qBal_Chet

    SELECT Clients.id_Clients, Clients.ClientName, Sum([Kol-vo]*[Cost]) AS ChetSum
    FROM (CheetToClient LEFT JOIN CheetToClient_tovars ON CheetToClient.id_chet = CheetToClient_tovars.id_chet) RIGHT JOIN Clients ON CheetToClient.id_Clients = Clients.id_Clients
    GROUP BY Clients.id_Clients, Clients.ClientName

      запрос:qBal_Plat

    SELECT Clients.id_Clients, Sum(PlatFromClient.PlatSum) AS [Sum-PlatSum]
    FROM Clients LEFT JOIN PlatFromClient ON Clients.id_Clients = PlatFromClient.id_Clients
    GROUP BY Clients.id_Clients

      Запрос: Собирающий два предыдущих

    SELECT Clients.ClientName, qBal_Chet.ChetSum, qBal_Plat.[Sum-PlatSum], [ChetSum]-[Sum-PlatSum] AS Zadoljennost
    FROM (qBal_Chet LEFT JOIN qBal_Plat ON qBal_Chet.id_Clients = qBal_Plat.id_Clients) RIGHT JOIN Clients ON qBal_Chet.id_Clients = Clients.id_Clients;

    Ответ:

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

    Если ты используешь Ассеss, то проблем нет:
    1. Создай первый запрос.,сохрани его
    2. Второй, если он базируется на первом, то вместо добавления таблиц, добавь первый и делай необходимые выборки и условия.


    Вопрос:

       Как вызвать при печати какого-либо текста окно настроек принтера?

    Ответ:

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

    Если я правильно понял, то тебе надо использовать ShowPrinter.


    Вопрос:

       Как прописать программу в автозагрузку?

    Ответ:

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

    Автозагрузка в Windows XP
    Какие способы автозагрузки существуют? Где найти список программ, загружаемых Windows автоматически? Этим темам и посвящена данная статья.Существует немало способов автозагрузки программ. Ниже приведены несколько вариантов для ознакомления, возможно это поможет вам, если возникнет необходимость найти и удалить какую-либо программу из автозагрузки.
        Способы автозагрузки:
        Реестр - в реестре автозагрузка представлена в нескольких местах:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] - программы, которые запускаются при входе в систему. Данный раздел отвечает за запуск программ для всех пользователей системы.
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce] - программы, которые запускаются только один раз при входе пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx]
    - программы, которые запускаются только один раз, когда загружается система. Этот раздел используется при инсталляции программ, например для запуска настроечных модулей. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] - программы, которые запускаются при входе текущего пользователя в систему
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce] - программы, которые запускаются только один раз при входе текущего пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра.
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]
    - программы, которые загружаются при старте системы до входа пользователя в Windows.
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce]
    - программы отсюда загружаются только один раз, когда загружается система.
        Например, чтобы автоматически запускать Блокнот при входе текущего пользователя, открываем Редактор реестра (regedit.exe), переходим в раздел
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
    и добавляем следующий ключ:
    "NOTEPAD.EXE"="C:\\WINDOWS\\System32\\notepad.exe"
        Назначенные задания - программы могут запускаться с помощью "Мастера планирования заданий". Посмотреть список установленных заданий, а также добавить новое можно так: "Пуск - Все программы - Стандартные - Служебные - Назначенные задания" - при этом откроется папка ..\WINDOWS\Tasks, в которой отображены назначенные задания. Чтобы добавить новое задание, нужно дважды щелкнуть левой кнопкой мыши по значку "Добавить задание". Запуск программ с помощью этого мастера возможен однократно, при входе в Windows, при включении компьютера, а также по расписанию.
        Папка "Автозагрузка" - это папка, в которой хранятся ярлыки для программ запускаемых после входа пользователя в систему. Ярлыки в эту папку могут добавляться программами при их установке или пользователем самостоятельно. Существует две папки - общая для всех пользователей и индивидуальная для текущего пользователя. По умолчанию эти папки находятся здесь:
    ..\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка - это папка, программы из которой будут запускаться для всех пользователей компьютера.
    ..\Documents and Settings\Username\Главное меню\Программы\Автозагрузка - это папка, программы из которой будут запускаться для текущего пользователя (здесь он назван Username).
        Посмотреть, какие программы у вас запускаются таким способом можно, открыв меню "Пуск - Все программы - Автозагрузка". Если вы создадите в этой папке ярлык для какой-нибудь программы, она будет запускаться автоматически после входа пользователя в систему. Смена папки автозагрузки - Windows считывает данные о пути к папке "Автозагрузка" из реестра. Этот путь прописан в следующих разделах:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User
    Shell Folders]
    "Common Startup"="%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка" - для всех пользователей системы.
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User
    Shell Folders]
    "Startup"="%USERPROFILE%\Главное меню\Программы\Автозагрузка" - для текущего пользователя.
    Сменив путь к папке мы получим автозагрузку всех программ из указанной папки. Например:
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User
    Shell Folders]
    "Startup"="c:\mystartup" - система загрузит все программы, ярлыки которых находятся в папке c:\mystartup\, при этом папка "Автозагрузка" все так же будет отображаться в меню "Пуск", а если у пользователя в ней ничего не было, то он и не заметит подмены.
        Подмена ярлыка для программы из списка автозагрузки - допустим у вас установлен русскоязычный пакет Microsoft Office. Тогда в папке "Автозагрузка" у вас будет находиться ярлык "Быстрый запуск Microsoft Office" - этот ярлык устанавливается туда по умолчанию. Но вовсе необязательно этот ярлык ссылается именно на "Быстрый запуск Microsoft Office" - вместо него может быть запущена любая другая программа, тем более что на функциональности Office это не скажется. Добавление программы к программе запускаемой из списка автозагрузки - модификация предыдущего варианта - одновременно с загрузкой какой-либо программы из списка автозагрузки у вас будет стартовать другая программа - дело в том, что можно "склеить" два исполняемых файла в один и они будут запускаться одновременно. Существуют программы для такой "склейки". Или ярлык может ссылаться на командный файл, из которого и будут запускаться как оригинальная программа из списка, так и добавленные посторонние программы.
        Посмотреть список автоматически загружаемых программ можно открыв программу "Сведения о системе" (откройте "Пуск - Все программы - Стандартные - Служебные - Сведения о системе" или наберите msinfo32.exe в командной строке) и перейдя в пункт "Программная среда - Автоматически загружаемые программы". Программа "Свойства системы" отображает группы автозагрузки из реестра и папок "Автозагрузка".
        Другая программа, позволяющая посмотреть список программ автозагрузки - "Настройка системы" (для запуска наберите msconfig.exe из командной строки). Эта программа кроме просмотра списка автозагрузки предоставляет возможность отключения всех пунктов автозагрузки (вкладка "Общие") или выборочных программ (вкладка "Автозагрузка").
        Существует множество менеджеров автозагрузки от сторонних разработчиков. Один из таких менеджеров - Startup Extractor, вы можете скачать здесь. Он автоматически сканирует папки автозагрузки, системный реестр, и отображает все найденные программы и файлы в виде списка. Если какая-то программа будет добавлена в список автозагрузки, Startup Extractor сообщит вам об этом и предложит либо оставить эту программу в списке либо удалить ее. При удалении программы из списка Starup Extractor может восстановить ее. Также вы сможете добавлять программы, редактировать параметры программ, сохранять список автозагрузки и многое другое. Программа имеет русский интерфейс, бесплатна, не требует установки.
        Примечание: Приведенная информация приведена в справочных целях. Вся информация, приведенная выше, относится в первую очередь к опытным пользователям, способным восстановить систему после ошибочных изменений в реестре. Если вы не уверены, что в случае ошибочных действий сможете восстановить систему, не используйте приведенную информацию в практических целях, ошибочные действия при внесении изменений в реестр могут серьезно повредить систему и даже привести к переустановке системы. Начинающие пользователи для добавления программ в список автозагрузки должны использовать только папку "Автозагрузка" или "Мастер назначенных заданий".


    Вопрос:

       Только начал изучать VB6. Стоит ли вместо VB6 сразу перейти к VB .NET?

    Ответ:

    Автор ответа: .::neo::.

    Это моё личное мнение: если только начал изучать VB, то лучше перейди сразу на .NET!



    Ответ:

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

    Это абсолютно разные языки с разными подходами и разной реализациями. Синтаксис остался прежним и всего-то. Если ты мыслишь на VB6 как на родном русском, то не стоит, если еще не привык к нему, то смело изучай новый, то бишь VB .NET.


    Вопрос:

       Как, зупустив дос-команду из VB, получить результат обратно в VB, чтобы прога ожидала этого рузультата и только после продолжала выполнение?

    Ответ:

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

        Проблема, как я понял, в том, что тебе надо синхронно запустить программу, а Вб-эшная Шелл действует противоположэно - запустит программу и идут выполняться следующие за ней операторы?!
        Выход попробуй такой:

    Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

    Private Const INFINITE = &HFFFF
    Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF


    Public Function ShellWait(ByRef sPathName, ByVal iWindowStyle As VbAppWinStyle) As Boolean
    Dim vProg As Variant, iProc As Long, iRet As Long
    On Error GoTo errLabel
    vProg = Shell(sPathName, iWindowStyle)
    iProc = OpenProcess(PROCESS_ALL_ACCESS, False, vProg)
    If iProc <> 0 Then
             iRet = WaitForSingleObject(iProc, INFINITE)
             CloseHandle iProc
             ShellWait = True
    Else
             ShellWait = False
    End If

    Exit Function
    errLabel:
    If Err.Number = 53 Then ' file not found
             MsgBox "Error", vbCritical + vbOKOnly + vbDefaultButton1
             ShellWait = False
    End If
    End Function

        Это функция ожидания заверщения процесса. Запускается таким образом:

    call ShellWait("notepad.exe", vbNormalFocus)


    Вопрос:

       Необходимо загнать данные из файла

    46 49 50 51 _
      52 53 54 55 _
      56 57 48 _
    49 50 51 _
    52 53 54 _
      55 56 57 _
    48 81 87 _

      в listbox. Пишу так:
      
    Dim nl As Integer
    Dim ks As Integer
      
    Private Sub Command1_Click()
    Dim txt
    Dim FN As Integer
    FN = FreeFile
    Dim FName As String
    FName = "C:\file0.txt"
    Open FName For Input As #FN
    txt = Input(LOF(FN), #FN)
    Close #FN
      
    For n = 1 To Len(txt)
      ks = ks + 1
         If Mid$(txt, n, 1) = "_" Then
           nl = nl + 1:
           List1.AddItem (Mid$(txt, n - ks, ks)), nl: ks = 0
         End If
      Next n
    End Sub
      
    Private Sub Form_Load()
    nl = -1
    ks = 0
    End Sub

    Пишет "недопустимый вызов процедуры" в

    List1.AddItem (Mid$(txt, n - ks, ks)), nl: ks = 0

    Ответ:

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

    List1.AddItem (Mid$(txt, n - ks, ks)), nl: ks = 0
      
    А что ты загоняешь то? Зачем вторые скобки?

    List1.AddItem Mid$(txt, n - ks, ks) & nl : ks = 0

    Если загоняешь вместе с переменной nl, тогда просто лепи их вместе.


    Вопрос:

       Вот что у меня есть:

    Private Sub Command1_Click()
    On Error GoTo метка
    MkDir ("c:\Графики")
    метка:
    SavePicture Picture1.Image, "c:\Графики\1.bmp"
    End Sub

    А как сделать, чтобы при нажатии на кнопку график сохранялся под новым именем? (2.bmp, 3.bmp и т.д.)

    Ответ:

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

    n=n+1
    SavePicture Picture1.Image, "c:\Графики\" & Cstr(n) & ".bmp"



    Ответ:

    Автор ответа: В. Язов

    Private Sub Command1_Click()
         static n as integer
         dim sFn as string
         On Error GoTo метка
         MkDir ("c:\Графики")
         метка:
         sFn="c:\Графики\"
         n=n+1'Крутим счетчик дальше
         sFn=sFn & trim$(str(n)) & ".bmp"
         SavePicture Picture1.Image, sFn
    End Sub



    Ответ:

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

    Private Sub Command1_Click()
    Dim m As String
    n=n+1
    m ="C:\Графики\ & n & ".bmp"
      
    On Error GoTo метка
    MkDir ("c:\Графики")
    метка:
    SavePicture Picture1.Image, m
    End Sub

    Только в декларациях объяви переменную n как Integer - Public n As Integer ,иначе n будет постоянно равно 1.




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

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

    наверх


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

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