Частые вопросы и ответы на них

 

После выпуска первого журнала, в адрес редактора посыпалось большое количество вопросов, ответы получили почти все, кроме 3-ёх человек, ответов на их вопросы я попросту не знал...Также я отвечал в форуме сайта VBNet.ru (там я обитаю под ником Ян).
В основном вопросы были специфические, касающиеся конкретной программы, но были и действительно частые вопросы, ответы на них я и опубликую в этом номере:

Вопросы:

1. Как сделать чтобы textbox при вкл. Multiline, автоматом прокручивался вниз, чтобы показывалась последняя строчка?

2. Как отлавливать нажатия клавиатуры вне программы?

3. Как в программе вызвать окно e-mail, почтового клиента?

4. У меня вместо комментариев (в коде) отображается какая-то абракадбра. В чём дело?

5. Видел пример TransparentTaskBar, а как можно сделать прозрачными другие окна? И как находить ID окон (прим. ред. имеется ввиду идентификатор окна)?

6. Прочитал статью "Пишем говорящую программу", но у меня никак не получается, чтобы программа проговаривала русский текст и поменять голосовой движок. Как мне это сделать?

7. Вообщем так, есть ListBox, в каждой его строчке записано число. Как мне сосчитать сумму всех этих чисел?

8. Как программно открыть и закрыть лоток CD-Rom-a? И возможно ли это?

Ответы:

Как сделать чтобы textbox при вкл. Multiline, автоматом прокручивался вниз, чтобы показывалась последняя строчка?

Делается это так:

Private Sub Text1_Change() '// Text1 - имя текстового поля
Text1.SelStart = Len(Text1)
End Sub

Как отлавливать нажатия клавиатуры вне программы?

С помощью API функции GetAsyncKeyState:

Объявления:

'// Функция отлавливает нажатия клавиатуры вне программы
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Const VK_ESCAPE = &H1B '// Константа кнопки Escape, другие константы смотри в ApiViewer-e

Добавьте на форму Часы (Timer1). Установите Interval = 40.

Отлавливаем нажатие кнопки Escape:

Private Sub Timer1_Timer()
If GetAsyncKeyState(VK_ESCAPE) Then
MsgBox "Ты нажал Escape!"
End If
End Sub

Как в программе вызвать окно e-mail, почтового клиента?

Объявления:

'// Функция для открытия файлов любого формата

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long)

Const SW_SHOWNORMAL = 1 '// Константа задаёт состояние окна

Вызов окна e-mail:

Call ShellExecute(0&, "Open", "mailto:" + "E-Адрес" + "?Subject=" + "Тема" , "", "", SW_SHOWNORMAL)

У меня вместо комментариев (в коде) отображается какая-то абракадабра. В чём дело?

Нужно сделать следующее:


1. Откройте меню Tools|Options
2. Открылось окно настроек. Перейдите на вкладку "Editor Format"
3. Измените шрифт (Font) на тот, который поддерживает кириллицу (например, Courier New CYR)

Видел пример TransparentTaskBar, а как можно сделать прозрачными другие окна? И как находить ID окон (прим. ред. имеется ввиду идентификатор окна)?

Прочитайте следующие статьи:

http://yansoft.by.ru/vb/info/windows1.htm - Об окнах и манипуляторах

http://yansoft.by.ru/vb/info/transparent.htm - О прозрачности окон

Прочитал статью "Пишем говорящую программу", но у меня никак не получается, чтобы программа проговаривала русский текст и поменять голосовой движок. Как мне это сделать?

Специально для вас я написал пример: http://yansoft.by.ru/vb/samples/speaker.zip

Вообщем так, есть ListBox, в каждой его строчке записано число. Как мне сосчитать сумму всех этих чисел?

Просто:

Dim i, a
While List1.List(i) <> ""
a = a + CInt(List1.List(i))
i = i + 1
Wend
MsgBox a

Как программно открыть и закрыть лоток CD-Rom-a? И возможно ли это?

Возможно:

Объявления:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

'// Открываем лоток CD-ROM
mciSendString "Set CDAudio Door Open Wait", 0&, 0&, 0&

'// Закрываем лоток CD-ROM
mciSendString "Set CDAudio Door Closed Wait", 0&, 0&, 0&

На вопросы отвечал Хованский Ян (Web: http://yansoft.by.ru)