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


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

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



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

Ссылки:

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

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

       Новый выпуск рассылки! На мой призыв о кодах для рассылки откликнулись всего 2 человека. Хотя на рассылку подписано больше 6000 человек...
       Обязательно зайдите на сайт VBNet.Ru и почитайте статьи, участвующие в конкурсе (их уже 4 штуки) и не забудьте проголосовать!
    Читайте!


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




    Книги

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

    наверх


    Проверить тип вводимой информации

    Простая проверка регистра, буква или цифра,используя API

    Добавьте TextBox на форму

    Private Declare Function IsCharUpper Lib "user32" Alias "IsCharUpperA" (ByVal cChar As Byte) As Long
    Private Declare Function IsCharLower Lib "user32" Alias "IsCharLowerA" (ByVal cChar As Byte) As Long
    Private Declare Function IsCharAlpha Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
    Private Declare Function IsCharAlphaNumeric Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    '1 - True, 0 - False
    MsgBox "Upper Case: " & IsCharUpper(KeyAscii) & " Lower Case: " & IsCharLower(KeyAscii) & " Alpha: " & IsCharAlpha(KeyAscii) & " Alpha or Numeric: " & IsCharAlphaNumeric(KeyAscii)
    End Sub

    наверх


    Как реализовать режим замены в текстовом окне

    Как вы знаете текстовые окна работают в режиме вставки. Данный пример покажет, как можно реализовать режим замены.

    Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii >= 32 Then 'проверка, что вводится символ (буква или цифра)
    If Text1.SelLength = 0 Then 'проверка, что текст не выделен
    If Text1.SelStart < Len(Text1) Then
    Text1.SelLength = 1 'данным установлением включается режим замены
    End If
    End If
    End If
    End Sub

    наверх


    Как быстро выделить текст для события GotFocus

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

    Public Sub FocusMe(ctlName as Control)
    With ctlName
    .selStart = 0
    .selLength = Len (ctlName)
    End With
    End Sub
    'А теперь добавьте вызов к этой подпрограмме в событии GotFocus для тех элементов управления, которые используются при вводе данных:
    Private Sub
    Call FocusMe(Text1)
    End Sub

    'ИЛИ...

    Text1.SetFocus
    With Text1
    .SelStart = 0
    .SelLength = Len(Text1.Text)
    End With

    'ИЛИ...

    Private Sub Text1_GotFocus()
    With Text1
    .SelStart = 0 'начало выделения
    .SelLength = Len(Text1.Text) 'конец выделения
    End With
    End Sub

    'ИЛИ...

    Private Sub Text1_GotFocus()
    SendKeys "{home}+{end}"
    End Sub

    наверх


    Как уместить в Text Box больше 64 kb текста?

    Дело в том, что элемент TextBox не может показывать текст объемом больше 64 kb (а иногда это значение может сократиться до 30 kb). Но эту проблему легко решить, если подгружать необходимые куски текста в TextBox по мере надобности. Данный код загружает файл любого размера в динамический массив и в зависимости от значения Value Scrool Bar'а показывает в TextBox'e, только определенные куски текста. Для того, что бы все это работало, вам нужно поместить на форму TextBox, назвать его txtMain, установить его свойство Multiline как True, а свойство ScroolBars, как 1-Horizontal. А также рядом с TextBox'ом нарисовать вертикальный ScroolBar с именем vsbText

    Private Text()
    Private Const LineNum = 15
    Private Sub Form_Load()
    Dim i
    Open "D:\win32api.txt" For Input As #1 Len = 1024
    Do Until EOF(1)
    i = i + 1
    ReDim Preserve Text(i + LineNum)
    Line Input #1, Text(i)
    Loop
    Close #1
    With vsbText
    .Min = 1
    .Max = i
    .SmallChange = 1
    .LargeChange = i \ 10
    End With
    End Sub

    Private Sub vsbText_Change()
    Dim i As Integer
    Dim Temp
    For i = vsbText.Value To vsbText.Value + LineNum
    Temp = Temp + Text(i) + vbCrLf
    Next i
    txtMain.Text = Temp
    End Sub

    наверх


    Определить количество строк в TextBox'е

    Добавьте TextBox (установите значение MultiLine=True) и CommandButton.

    Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Const EM_GETLINECOUNT = &HBA
    Private Sub Command1_Click()
    Dim lngLineCount As Long
    On Error Resume Next
    lngLineCount = SendMessageLong(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&)
    MsgBox lngLineCount
    End Sub

    наверх


    Скрыть/показать мигающий курсор в Text Box

    Добавьте TextBox и CheckBox на форму

    Private Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ShowCaret& Lib "user32" (ByVal hwnd As Long)
    Private Sub CheckCaret()
    If Check1.Value = vbChecked Then
    ShowCaret (Text1.hwnd)
    Else
    HideCaret (Text1.hwnd)
    End If
    End Sub
    Private Sub Form_Load()
    Check1.Value = 1
    End Sub
    Private Sub Text1_Change()
    CheckCaret
    End Sub
    Private Sub Text1_GotFocus()
    CheckCaret
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Каким образом можно узнать информацию о файле, точнее *.avi, нужно длительность, размеры, и т.п.


    Автор вопроса: Dr.Max

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

       Пишу несчасное подобие броузера.
    Хочу добавить опции ,запрещающие загрузку файлов с определенным разрешением.
    Например,запретить загруску фоновой музыки сайта - *.mid;*.wav, запретить загруску некоторой графики - *.swf.
    Кто знает как???


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

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

       1.Мне необходимо получить список всех зарегестрированных на машине серверов, а потом прочитать список их System DSN для каждого сервера. Как это можно сделать?
    2. Для того чтобы исключить программу из диспетчера задач по Ctrl-Alt-Del я использую функцию RegisterServiceProcess. Под 95 виндами все работает шикарно, но на Windows 2000 Server (SP2), на ней прога ругается и говорит, что ссылку на данную функцию в kernel32 она не находит. В чем может быть дело? Если кто сталкивался с такой байдой буду признателен за совет.


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

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

       Помогите решить задачу по получению данных с удаленных веб-сайтов.
    На сколько я понял стандартное решение это Microsoft Internet Controls (SHDOCVW.DLL), открываем Explorer: Set IE = New InternetExplorer... это все понятно, а как получить данные от Explorer открытого не программой или от нескольких открытых страниц, есть ли функция возвращающая количество IE и переключения между ними или подскажите другие методы.


    Автор вопроса: B. Obukhov

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

       Как в центре MDI формы написать какой-то текст?




    Ответы:


    Вопрос:

       А возможно ли закрыть из VB окно сеанса ДОС?

    Ответ:

    Автор ответа: Шишкалов Д.Ю.

    1)..если ты его открывал...сам..то по хэндлу окна и закрываешь..посылая сообщенеие - закрыть окно
    2)..если не сам..то перебирая окна или надя сразу то ..что надо..(т.е..получив его хэдл), делаешь что и в пункте 1.))


    Вопрос:

       1) где взять MSDN на русском или хотя бы описание любых API-функций (на
    русском)
    2) Если на первый вопрос ответа нет, то помогите разобраться с функцией GetClassName(1,2,3). Первое яначение я знаю чё значит, а второе и третье
    нет. Помогите пожайлуста.
    3) Чё означает встроенная VB функция String$() и Left$()

    Ответ:

    Автор ответа: Андрей Германович

    1. MSDN на русском не бывает. кой какие API на русском мона найти на rusproject.narod.ru

    2. int GetClassName(
              HWND hWnd, // handle to window
              LPTSTR lpClassName, // class name
              int nMaxCount // size of class name buffer
              );
    соотв: первый - окно, второй - в нем вернется класс окна, третий - длина буфера (скока буковок в lpClassName мона писать)

    3. String$(i,ch) вернет строку длиной i символов ch
         Left$(s,i) вернет подстроку из i символов от строки s начиная слева /Right$ - аналогично справа/


    Вопрос:

       На форме разместил: ProgreeBar, Timer, Image, CommandButon. Выставляю Image.Visible=False. Мне надо сделать так, чтобы при Image.Visible= False, ProgressBar двигался со скоростью 3, а при Image.Visible=True со скоростью 10. Я делаю так:
         
    Private Sub Command1_Click()
         Image1.Visible = False 'По нажатию кнопки картинка становится не видна
    End Sub

    Private Sub Timer1_Timer()
         Static I As Integer
         I = I + 1
         If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп"
         ' Остановка таймера при достижение ProgressBar'ом 90
         If I = 5 Then Image1.Visible = True 'Картинка видна
         If Image1.Visible = True Then
         ' Если картинка видна, тогда скорость больше
             ProgressBar1.Value = ProgressBar1.Value + 10
         Else
         ' Иначи (если картинка не видна), скорость меньше
             ProgressBar1.Value = ProgressBar1.Value + 3
         End If
    End Sub

    Все работает в том случае, если я нажму кнопку (т.е востановлю скорость 3 ), а если оставлю на скорости 10, тогда, когда дайдет ProgressBar до конца, выдаст ошибку: '380' Invalid property value. Что это значит, и как это исправить?

    Ответ:

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

    Просто у тебя максимальное значение для прогресс бара 100, а ты пытаешься установить значения больше ста (когда я опробовал твой код, у меня получилось 102). Поэтому вылетает ошибка. Следует перед присваиванием проверять, не будет ли переполнения и только потом выполнять присваивание. А можно просто отловить ошибку и закрыть на этом вопрос. Так я и сделал. Я переписал этот код вот так. И еще. Я так понял, что тебе надо, чтобы скрытая картинка отображалась через 5 событий timer после нажатия кнопки, ее скрывающей (или с начала выполнения). Я так и сделал. Если я не прав, верни все что связано с переменной I в соответствие со своим оригиналом.

    Dim I As Byte

    Private Sub Command1_Click()
          Image1.Visible = False 'По нажатию кнопки картинка становится не видна
          I = 0
    End Sub

    Private Sub Timer1_Timer()
         On Error GoTo er
          I = I + 1
    ' If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп"
          ' Остановка таймера при достижение ProgressBar'ом 90
          If I = 5 Then Image1.Visible = True 'Картинка видна
          If Image1.Visible = True Then
          ' Если картинка видна, тогда скорость больше
              ProgressBar1.Value = ProgressBar1.Value + 10
          Else
          ' Иначе (если картинка не видна), скорость меньше
              ProgressBar1.Value = ProgressBar1.Value + 3
          End If
          
          Exit Sub
    er:
    If Err.Number = 380 Then
    Timer1.Enabled = False
    ProgressBar1.Value = ProgressBar1.Max
    End If
    End Sub



    Ответ:

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

    Скорее всего, ошибка вылазит, когда ты ставишь Progressbar1.value=...
    Наверное, Value ты ставишь большим, чем Max, а этого делать нельзя. Я немного переделал код.

    Private Sub Timer1_Timer()
          dim intAdd as integer
          Static I As Integer
          
          I = I + 1

          If I = 5 Then Image1.Visible = True
          intAdd=iif(image1.visible,10,3)
          If ProgressBar1.Value+ intadd > 90 Then
             progressbar1.value=progressbar1.max
             Timer1.Enabled = False
             MsgBox "????"

          else
              ProgressBar1.Value = ProgressBar1.Value + intAdd
          End If
    End Sub



    Ответ:

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

    Происходит переполнение максимального значения ProgreeBar'а.



    Ответ:

    Автор ответа: Invisible Man

    "Invalid property value" с анг. "Недопустимое значение свойства".
    Ошибка происходит из за того что в определенное время ProgressBar1.Value становится больше чем ProgressBar1.Max. ProgressBar1.Max это максимальное допустимое значение ProgressBar1.Value.

    1) Первые 4 раза Timer прибавляет к ProgressBar'у по 3 т.е. к 5-му разу ProgressBar1.Value = 12, а потом начинает прибавлять по 10, тут и ёжику ясно что 90 никогда не наступит... А будет сразу 92. По этому вот тут:

    If ProgressBar1.Value = 90

    следовало ставить не "=", а ">=".

    2)Строка
    If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп"

    должна стоять не в начале, как у тебя, а наоборот в конце, прямо перед End Sub, или можно сделать так:

    If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп": Exit Sub

    Тады она может стоять как вверху так и внизу...
      
    Код будет такой:

    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Private Sub Command1_Click()
          Image1.Visible = False
    End Sub

    Private Sub Timer1_Timer()
          Static I As Integer
          I = I + 1
          If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: _
          MsgBox "????": Exit Sub
          If I = 5 Then Image1.Visible = True
          If Image1.Visible = True Then
         
              ProgressBar1.Value = ProgressBar1.Value + 10
          Else
         
              ProgressBar1.Value = ProgressBar1.Value + 3
          End If
    End Sub
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    'Должно работать...



    Ответ:

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

    1) в случае если необходимо отображение Progress на 90.

    Замени:

    If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп"

    на

    If ProgressBar1.Value >= 90 Then
             Timer1.Enabled = False: MsgBox "Стоп"
             GoTo End_S
    End If

    В конце поставь метку End_S:
    перед End Sub

    2) Если необходимо отображение Progress на 100 тогда

    Замени:

    If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп"

    на

    If ProgressBar1.Value >= 90 Then
             Timer1.Enabled = False: MsgBox "Стоп"
             ProgressBar1.Value = 90
    End If

    Все дело в том, что стоит четкое условие на проверку 90 и никакое другое, при этом Progress может и не попасть на это значение, т.е. перепрыгнуть его 89, 92 и т.д. , как в случае, если не нажимать на кнопу, поэтому необходимо выполнить проверку на 90 и более, а далее уже зависит от того, что конкретно необходимо. Я написал два варианта.



    Ответ:

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

    всего навсего надо заменить:

    If ProgressBar1.Value = 90 Then ...

    на:

    If ProgressBar1.Value > 90 Then ...

    или:

    If ProgressBar1.Value > ProgressBar1.Max Then ...



    Ответ:

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

    Не люблю я комментировать чужой код, хотя часто приходится это делать.
    Во-первых нет кода для сбрасывания счетчика в 0, например так:

          If ProgressBar1.Value = 90 Then
             Timer1.Enabled = False
             ProgressBar1.Value = 0
             MsgBox "Стоп"
             Exit Sub
          End If

    Во-вторых нигде видно кода для запуска таймера после его первой остановки. И в третьих код:

          If Image1.Visible = True Then
             ProgressBar1.Value = ProgressBar1.Value + 10

    выглядит опасно с точки зрения безошибочности. Я бы написал так (для произвольного интервала):

          If Image1.Visible = True Then
             Dim lValue As Long
             lValue = ProgressBar1.Value + 10
             If lValue >= ProgressBar1.Max Then
                ProgressBar1.Max = lValue
             End If



    Ответ:

    Автор ответа: Вадим

    Возможно оно проходит через 90 и не равноему:

    ProgressBar1.Value =88

    а потом ProgressBar1.Value =98 и 108

    а ProgressBar1.Max =100 тут и ошибка.

    Замени

    If ProgressBar1.Value = 90

    на

    If ProgressBar1.Value => 90


    Вопрос:

       В моей программе 2-я форма становится видимой в определенные моменты времени. Подскажите, как сделать так, чтобы она выводилась поверх всех открытых окон.

    Ответ:

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

    пиши

    FormSecond.show 1



    Ответ:

    Автор ответа: Ревягин_Алексей

    Добавь 2 CommandButton (под именем Command1 и Command2). Когда нажмешь первую кнопку, форма поверх всех
      
    Private Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, _
    ByVal Y%, ByVal cx%, ByVal cy%, ByVal F%) As Integer
    Const SWP_NOMOVE = 2
    Const SWP_NOSIZE = 1
    Const flags = SWP_NOMOVE Or SWP_NOSIZE
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
      
    Private Sub Command1_Click()
    res = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags) 'Форма on-top
    End Sub
    Private Sub Command2_Click()
    res = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags) 'Форма _
    non-on-top
    End Sub



    Ответ:

    Автор ответа: Rutshtein Alex

    Используй API-функцию SetForegroundWindows, либо, если надо поверх всех внутри программы, то

    form2.show vbmodal



    Ответ:

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

    Если надо, чтобы окно вывелось поверх других и получило фокус ввода, то так:

    Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long


    SetForegroundWindow frmForm.hwnd

    Если же надо, чтобы окно оставалось верхним даже тогда, когда теряет фокус, то так:

    Public 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
    Public Const HWND_TOPMOST = -1
    Public Const HWND_NOTOPMOST = -2
    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1


    SetWindowPos frmForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
    отмена этого режима:
    SetWindowPos frmForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE



    Ответ:

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

    декларируешь:

    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

    флаги:

    Private Const HWND_TOPMOST = -1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOSIZE = &H1

    использование (при загрузке или по таймеру или ещё по какому событию - сам сообразишь):

    SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, флаг

    если несколько флагов надо: флаг1 Or флаг2, например:
    SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE



    Ответ:

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

    Если ты знаешь ее hwnd (например Form1.hWnd) то это делается так:

        SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE

    Только не забудь что она будет поверх не только всех окон в твоей программе, но и поверх всех окон запущенных программ (если ты куда-то будешь переключаться)



    Ответ:

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

    Можно поступить хитрее: запустить программу которая будешь отслеживать сообщения WM_QUERYENDSESSION или WM_QUERYENDSESSION и после их прихода делать что нужно.


    Вопрос:

       Есть сайт заказов на ASP. Полученный заказ отправляется на мэйл.
    Вопрос: можно ли полученый заказ отправить на факс или распечатать мэйл автоматом при его получении?

    Ответ:

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

    лучше всего скачай исходник сокета и забирай почту собственно обработчиком. или MAPI...


    Вопрос:

       Можно ли запустить мою программу после того как польяователь нажал на кнопку Выключения компьютера или его переяагруяки черея меню Пуск?
    Примечание: желательно, чтобы код(коды) были под Win98/Me и(или) WinXP.

    Ответ:

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

    Конечно можно!
    Нужно только подправить user32.dll, а именно функцию ExitWindowsEx так, чтобы она вызывала твою программу. ;)



    Ответ:

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

    Да зайди на сайт www.vbrain.narod.ru



    Ответ:

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

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

    Private Declare Function GetForegroundWindow Lib "user32" () As Long
    Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

    Private Sub Form_Load()
         Timer1.Interval = 1000
    End Sub

    Private Sub Timer1_Timer()
         Dim hw As Long
         hw = GetForegroundWindow
         If GetCaption(hw) = "Завершение работы Windows" Then SendKeys ("{ESC}")
    End Sub
    Function GetCaption(WindowHandle As Long) As String
         Dim Buffer As String, TextLength As Long
         TextLength& = GetWindowTextLength(WindowHandle&)
         Buffer$ = String(TextLength&, 0&)
         Call GetWindowText(WindowHandle&, Buffer$, TextLength& + 1)
         GetCaption$ = Buffer$
    End Function


    Вопрос:

       Был вопрос:
      
      Как програмно изменять свойства звукового файла (*.WAV), такие как качество звука, частота, количество каналов (стерео - моно) и прочее.

    Получен ответ:

    Автор ответа: Dr.Max
    vbstreets.da.ru В разделе "Статьи на английском "
      
    Я взял код с , но он у меня не идёт. А так, как я в не силён, то прошу помочь. Может кто уделит время?

    Ответ:

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

    Сам недавно закачал несколько кодов, которые при запуске выдавали ошибку типа "Retained is an invalid key..." если у тя таже проблема то открываешь проект блокнотом или Bred и просто удаляешь данный ключ т.е. строчку "Retained 0" после чего программа должна заработать, ну по крайней мере исчезнет ошибка.


    Вопрос:

       У меня два вопроса:
    1) возможно ли сделать так, чтобы программа меняла свой код сама (переделывала бы себя сама по ходу своей работы)
    2) создал я новое меню(динамически), а как им пользоваться (как писать функции которые будут выполнятся при нажатии на созданное меню) где указывается имя динамически-созданного меню или как его и его методы и свойства ещё использовать

    Код создания меню:
    Private Declare Function CreatePopupMenu Lib "user32" () As Long
    Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu _
    As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As _
    Any) As Long
    Const MF_STRING = &H0&
    Dim hMenu As Long
    Private Sub Form_Load()
    'Создаём пустое всплывающие меню
    hMenu = CreatePopupMenu()
    'Добавляем несколько пунктов в меню
    AppendMenu hMenu, MF_STRING, ByVal 0&, "Hello !"
    AppendMenu hMenu, MF_STRING, ByVal 0&, ByVal 0&
    AppendMenu hMenu, MF_STRING, ByVal 0&, "TrackPopupMenu"
    End Sub

    пробовал создавать как контрол, но и это не выходит (пишет, что класса VB.Menu нет)

    В чём тут дело ?

    Ответ:

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

    1) на www.vbnet.ru есть прекрасная статья Александра Ларина (заняла в конкурсе 1-е место), где он создает язык (RIPL). Очень несложно, и можно изменять код в режиме рантайма. Если неохота лезть на сайт, пиши, я пришлю статью в зипе(17 кб).

    Здесь, коллега, без субклассинга не обойтись. Тема эта очень обширна, и было бы обременительно (для тех, кто получает файлы рассылки по почте) обсуждать ее в данной рассылке. Поэтому, если действительно очень нужно делать то, о чем ты говорил в вопросе, пиши на Artyom_kr@mail.ru, можно поступить в конференцию SoobchaVB : напиши пустое письмо сюда: VB-On@SoobCha.org


    Вопрос:

       как в ресурсы запихнуть готовые диалоги(формы), а потом юзать их оттуда (как MustDie делает с SHELL32.DLL).
    К примеру я создам одну DLL'ку а потом буду юзать картинки, диалоги оттуда другими программами.

    Ответ:

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

    картинки запросто добавляются в раздел bitmap или custom файла ресурсов через resourse editor, а вот с диалогами большой облом - это vb а не delphi.



    Ответ:

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

    На VB таких библиотек, как shell32.dll ты не напишешь. Ты можешь писать только библиотеки ActiveX.


    Вопрос:

       Подскажите функции для прямой работы с памятью в VB? Я пытаюсь сделать трейнер к игрухе, адреса памяти извесны.
    Пытался считывать их содержимое GetMem(1,2,4,8) - на GetMem1 выдаётся какая-то белиберда, а на остальных бейсик обрухивается.
    CopyMemory тоже какуюто фигню выдаёт.
    Можт я чего неправильно делаю?

    Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)

    Private Sub Form_Load()
    Dim a As Long
    CopyMemory a, ByVal &H6FA210, 4&
    MsgBox Str(a)
    End Sub

    Ответ:

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

    Цитата из MSDN:

    The CopyMemory function copies a block of memory from one location to another.

    VOID CopyMemory(
       PVOID Destination, // copy destination
       CONST VOID* Source, // memory block
       SIZE_T Length // size of memory block
    );Parameters
       Destination
       [in] Pointer to the starting address of the copied block's destination.
       Source
       [in] Pointer to the starting address of the block of memory to copy.
       Length
       [in] Specifies the size, in bytes, of the block of memory to copy.
    т.е. ожидаеться два адресса:

    CopyMemory VarPtr(a), &H6FA210, 4&



    Ответ:

    Автор ответа: Андрей Щёкин [darXeth]

    А игра у тебя случайно запущена не отдельно ?
    Windows использует раздельную память для всех приложений => для чтения памяти другого процесса надо использовать ReadProcessMemory.
    Сначала получаешь его Process ID.
    Затем открываешь его по PID'у с помощью OpenProcess с параметром PROCESS_VM_READ (и PROCESS_VM_WRITE для записи).
    OpenProcess возвращает тебе дескриптор - hProcess.
    К нему уже можно применять собственно ReadProcessMemory, которая по сути мало чем отличается от CopyMemory. Или, при надобности, WriteProcessMemory.
    После операций закрываешь дескриптор с помощью CloseHandle.
    Все обьявления в API Viewer, надеюсь разбершься - сейчас не могу подробнее.


    Вопрос:

       Проблема установки MSDN
    Приустановке на 97-98% выдаётся ошибка.

    Close Collection g_Cool collection.Open(collection name)dwError=7

    Специалисты помогите разобраться.

    Ответ:

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

    У меня недавно тоже были проблемы с установкой MSDN. Все решилось после переустановки Visual Studio.



    Ответ:

    Автор ответа: Владимир Кирко

    Это известная ошибка.
    Проявляется, если не ошибаюсь, если Вы ставите MSDN не сразу с каким-либо продуктом, а через пару-другую дней.
    Бороться так: на C: ищете hhcolreg.dat, удаляете и повторяете установку (второй раз она проходит очень быстро, т.к. файлы не копируются заново, а проверяются на предмет каких нету).
    Если не поможет посмотрите
    http://www.sources.ru/msdn/msdn_problems.shtml.



    Ответ:

    Автор ответа: Марк

    Надо вручную удалить следующие файлы и запись в Реестре перед переустановкой:

    Delete HHCOLREG.DAT and HH.DAT files in the Windows directory.
    Delete the HHCTRL.OCX file in the Windows System directory.
    Delete the HHCOLREG.DAT fie in the Widows\Help directory.
    Then use the Registry Editor (regedit) to remove the desired collection key(s):
    HKEY_LOCAL_MACHINES\SOFTWARE\Microsoft\HTML Help Collections\Developer Collections\


    Вопрос:

       У меня 3 проблемы:

    1. Я пишу одну прогу, в которой должен быть кулбар (CoolBar), на одной панели которого должен быть элемент TabStrip, а на другой обыкновенный тулбар (ToolBar) с кнопками Соядать, Открыть, Копировать и т.д. Прошу объяснить, как на этот кулбар добавлять всякие элементы управления.

    2. Эта проблема частично свяяана с первой. Дело в том, что я не могу листать вкладки TabStrip'а в процессе его соядания и придания ему нужной формы. Помогите, пожалуйста, это сделать.

    3. Я соядал свой ресурс-файл для этой ялополучной программы, но дело в том, что я не умею с ним обращаться, то есть яагруяить ия него ту же иконку для формы или картинку иянего поместить в ImageBox, подскажите, как это делается.

    Ответ:

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

    1) поставь на форму кульар
        поставь на форму тулбар
        поставь на форму табстрип
        выдели тулбар, нажми Ctrl+X
        выдели кулбар, нажми Ctrl+V
        Тоже самое проделай с табстрипом на кулбаре нажми правой кнопкой мыши, выбери Properties
        Перейди на вкладку Bands, кнопками влево/вправо выбери нужную панель. Из раскрывающегося списка Child выбери имя контрола, который нужно повесить на эту панель. Точно так же поступай со второй вкладкой.
    2) мне кажется, сделать это невозможно



    Ответ:

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

    Элемент управления CoolBar

    С помощью элемента управления coolBar можно создавать в приложении улучшенные панели инструментов. Для использования этого элемента управления в приложении необходимо подключить к проекту библиотеку Microsoft Windows Common Controls-3 6.0, воспользовавшись диалоговым окном Components (Компоненты), открываемым при выборе команды Components (Компоненты) меню Project (Проект).
    В отличие от объекта ToolBar, элемент управления CoolBar более универсален и кроме кнопок может содержать другие элементы управления, в том числе и панели типа ToolBar. Усовершенствованная панель представляет собой контейнер, причем он состоит из маленьких контейнеров Band (Полоса), которые являются объектами и непосредственно включают в себя все элементы управления, вводимые в CoolBar.

    Для создания в проекте панели инструментов типа CoolBar выполните следующие действия:

    1. Подключите к проекту библиотеку Microsoft Windows Common Controls-3 6.0, в которой содержится элемент управления CoolBar.
    2. Добавьте в родительскую форму объект coolBar, дважды щелкнув мышью кнопку CooiBar на панели элементов управления.
    3. Присвойте новой панели инструментов имя cbrTools.
    4. Выделите объект CoolBar, нажмите правую кнопку мыши и выберите в появившемся контекстном меню команду Properties (Свойства). Открывается диалоговое окно Property Pages, предназначенное для создания панели типа CoolBar.
    5. Используя кнопку Insert Band (Вставить полосу), добавьте на панель инструментов еще несколько объектов Band.

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

    1. Используя кнопку CommandButton на панели элементов управления, разместите на создаваемой панели инструментов CoolBar кнопку управления.
    2. Скорректируйте в окне Properties (Свойства) для созданной командной кнопки следующие свойства:
        в правый столбец свойства Name введите наименование объекта cbNewCoolBar,
        в свойство Caption введите текст Новая, который будет размещен на кнопке;
        в свойство Height кнопки введите значение 300;
        для свойства тор задайте значение 25.
    3. Для создания кода, выполняемого при нажатии новой кнопки на панели инструментов, в окне редактора кода введите следующие команды, осуществляющие вызов дочерней формы:

    Private Sub cbNewCoolBar_Click ()
    Dim frmNewForm As New frmChildMDI
         frmCount = frmCount + 1
         frmNewForm.Caption = "Дочерняя форма " + Str(frmCount)
         frmNewForm.Show
    End Sub

    4. Запустите приложение на выполнение.

    Элемент управления TabStrip

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

    Для создания вкладок в форме служит элемент управления TabStrip.
    Изучим, как разместить данный элемент в форме и настроить его свойства:

    1. Откройте форму, в которой вы хотите создать вкладки.
    2. Нажмите кнопку TabStrip на панели элементов управления.
    3. Установите указатель в форму и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка размером с форму.
    4. Откройте окно свойств созданного объекта. Для этого установите на него курсор, нажмите правую кнопку мыши и выберите в контекстном меню команду Properties.
    5. В открывшемся диалоговом окне Property Pages перейдите на вкладку Tabs.
    6. Используя кнопку Insert Tab, добавьте в объект TabStrip необходимое количество вкладок.
    7. Поле Index указывает номер вкладки, для которой настраиваются свойства. Выбирая поочередно номер нужной вкладки, введите их наименования с помощью свойства caption.

    8. Нажмите кнопку ОК для закрытия диалогового окна.

        Замечание
        Элемент управления TabStrip не является контейнером. Координаты размещенных в форме элементов управления задаются относительно самой формы, а не элемента управления TabStrip, и при его перемещении остаются на месте. Для того чтобы размещенные в форме элементы не загораживались объектом TabStrip, его необходимо поместить на задний план командой Send to Back.


    Файл-ресурс

    В Visual Basic можно работать с файлом ресурсов в исходном коде программы, используя следующие функции:

    Функция Назначение
    LoadResString Возвращает текстовые строки
    LoadResPicture Возвращает объекты типа ярлыков, значков или курсоров
    LoadResData Возвращает массив данных




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

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

    наверх


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

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