Здравствуйте,
уважаемые VBNet-чики! Сайт VBNet объявляет о двух
новых конкурсах "Лето 2004",
проходящих с 1 июня по 31 августа 2004 года.
Итак, мы предлагаем вам принять участие в конкурсе
на лучший пример, написанный на VB и в конкурсе
на лучшую статью о программировании на VB.NET.
Как обычно,
нашими спонсорами выступают:
- Компьютерный журнал Hard'n'Soft (www.hardnsoft.ru)
- Компания 9Rays (www.9rays.net)
Ну и новый
спонсор конкурса на лучшую статью о
программировании на VB.NET:
- Корпорация Microsoft (www.microsoft.ru)
Правила
участия в конкурсах простые:
- пример должен быть написан на Visual Basic (естественно
с исходными текстами) и быть полезным
другим
- статья, присланная на конкурс, должна быть авторской работой (переводные работы принимаются, но оцениваются ниже, чем авторские), подробно раскрывать рассматриваемую в ней тему и освещать вопросы, связанные с платформой Microsoft .Net
- статья должна иметь не менее 12 000 знаков
- в случае, если в работе используются
цитаты из других источников, то их указание
обязательно
Ах, да... призы... призы будут как обычно! Это
и декомпиляторы и обфускаторы Spices .Net
от компании 9Rays и подписки
на журнал Hard'n'Soft и книги от Microsoft Press.
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'Получение директории C:\WINDOWS\SYSTEM
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'Директория "C:\WINDOWS"
Private Function GetSysDir() As String
Dim szBuffer As String * 50
Dim lngRet As Long
lngRet = GetSystemDirectory(szBuffer, 50)
GetSysDir = Left$(szBuffer, lngRet)
If Right(GetSysDir, 1) <> "\" Then GetSysDir = GetSysDir & "\"
End Function
Private Function GetWinDir() As String
Dim szBuffer As String * 50
Dim lngRet As Long
lngRet = GetWindowsDirectory(szBuffer, 50)
GetWinDir = Left$(szBuffer, lngRet)
If Right(GetWinDir, 1) <> "\" Then GetWinDir = GetWinDir & "\"
End Function
'Использование
Private Sub Form_Load()
MsgBox GetWinDir
MsgBox GetSysDir
End Sub
или объединяем наши 2 функции:
Private Function GetDirectory(szDirName As String) As String
Dim szBuffer As String * 50
Dim lngRet As Long
If LCase(szDirName) = "sys" then
lngRet = GetSystemDirectory(szBuffer, 50)
ElseIf LCase(szDirName) = "win" then
lngRet = GetWindowsDirectory(szBuffer, 50)
End If
GetDirectory = Left$(szBuffer, lngRet)
If Right(GetDirectory, 1) <> "\" Then GetDirectory = GetDirectory & "\"
End Function
'Использование
Private Sub Form_Load()
MsgBox GetDirectory("win")
MsgBox GetDirectory("sys")
End Sub
Как програмно найти процесс и поставить ему приоритет (например, высокий)
Вопрос:
Как програмно найти процесс и поставить ему приоритет (например, высокий)
Ответ:
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As
Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As
Long) As Long
Public Enum Priority
IDLE_PRIORITY_CLASS = &H40
NORMAL_PRIORITY_CLASS = &H20
HIGH_PRIORITY_CLASS = &H80
REALTIME_PRIORITY_CLASS = &H100
End Enum
Public Sub SetPriority(pParam As Priority)
SetPriorityClass GetCurrentProcess(), pParam
End Sub
Как сделать, чтобы дейстие происходило при нажатии трёх кнопок?
Вопрос:
Подскажите, пожалуйста, как сделать так, что бы событие возникало при нажатие трех клавиш. Например: shift+ctrl+m.
Ответ:
Создаешь процедуру MouseDown (мышь) или KeyDown (клава) для нужного объекта Например для формы (свойство формы "KeyPreview" должно быть "True") :
Мышь :
Sub Form_MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single)
' Button это код нажатой на мышке клавиши
' 1 - левая кнопка
' 2 - правая кнопка
' 4 - средняя кнопка
' Shift это код нажатой на клавиатуре клавиши
' 1 - Shift
' 2 - Ctrl
' 4 - Alt
If Button = 2 And Shift = 6 Then frmAbout.Show vbModal
' Если над формой нажать правую мышки , Ctrl и Alt ( 2+4=6), то откроется форма
End sub
Клава :
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
' KeyCode это код нажатой клавиши
' vbKeyF1 - "F1"
' vbKeyF2 - "F2"
' vbKeyM - "M"
' vbKeyX - "X"
' и так далее
' Shift это код нажатой на клавиатуре клавиши
' 1 - Shift
' 2 - Ctrl
' 4 - Alt
If KeyCode= vbKeyM And Shift = 6 Then frmAbout.Show vbModal
' Если над формой нажать "M" , Ctrl и Alt ( 2+4=6), то откроется форма
End Sub
Как внедрить Word2000 на форму Access2000? Вместо поля Edit я хотел бы поместить Ворд на форму Access'а для редактирования текста.
Ответ:
Создай на форме контрол "Свободная рамка объекта" из панели элементов управления (или "Связанная....", если нужно присоединить к таблице - тогда там должно быть поле с типом "Объект OLE"). А потом вставляй туда любые объекты, в том числе и страницу Word2000.
Михаил Ю. Белодед
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
Как из программы на VB6 построчно прочитать документ Word, в котором вставлена картинка? Как определить часть строки, содержащую картинку? Мне это надо для перекодировки символов в 127 таблицу и отправки всей строки (с картинкой) в COM порт для печати на принтере Robotron K6312 картинки в графическом режиме, а текст в символьном. Input и Line input файлы *.doc не читают. В окне отладки появляется несколько спецсимволов. Напишите подробнее. Я начинающий.
Как можно быстро, не перебирая все элементы, сделать такую операцию?
type aa
aa(50) as string*20
end type
type bb
bb(50) as string
end type
dim xx as aa
dim cc as bb
cc=xx 'Выполнить невозможно,
'А так слишком долго
for i=0 to 50
cc.bb(i)=xx.aa(i)
next
Как в visual basic 6.0 определить процент загрузки процессора? И чтобы результат выдавался не в progress bar'е, а в обыкновенном label'е.
Ответы:
Вопрос:
В Access необходимо открыть отчет. Если в нем нет данных, то в поле count([поле]) выдается #Ошибка. Как узнать, что текстовое поле имеет это значение и скрыть его?
Для того, чтобы значек твоей программы появлялся в трэе - либо используй АПИ (ShellNotifyIcon по-моему называлась одна из нужных функций, посмотри в MSDN), либо посмотри на сайте VBNet мой OCX для работы с трэем (trayicon.ocx)
А чтобы появлялось меню, в котором будет Развернуть - я использую вышеуказанный свой OCX, а он генерит события смотря как кликать по нем. А показать меню - примерно form1.popupmenu <меню>.
В общем, скачай мой OCX и почитай к нему описание, с примерами
Вопрос:
Кто-нибудь писал библиотеки на VB? Я создал библиотеку с функцией
Public Function проверка_ввода(ByVal строка As String, Optional ByVal разделитель_на_выходе As String) As String
Откомпилил в файл function.dll, зарегистрировал regsvr32.exe Function.dll. Создал программу в которой в модуле записал
Public Declare Function проверка_ввода Lib "Function.dll" (ByVal строка As String, Optional ByVal разделитель_на_выходе As String) As String
И вызываю её
MsgBox проверка_ввода("10.05", -1)
На это он мне пишет "Ошибка 453: Невозможно найти допуск в DLL проверка_ввода in function.dll
Пробывал менять названия на латиницу - не помогает.
Подключение библиотеки через ссылки недопустимо (требование заказчика, хотя так работает)
Дело в том, что на VB6 можно создавать _ТОЛЬКО_ ActiveX DLL, так что указание ссылки на нее при дальнейшем использовании обязательно. И никак не через декларирование. Это не C++.
VB-шные библиотеки являются библиотеками ActiveX, их можно вызвать только подключив эту библиотеку и т.д.
Если надо вызывать через декларацию, то пиши на Си.
Вопрос:
Мой компьютер подсоединён к Интернет черея локальную сеть. Модема, как устройство на компьютере нет. Как мне определить, в каком режиме находится мой компьютер: "on line" или "off line" ?
1) Можно спросить админа :)
2) Можно пропинговать любой компьютер в Инете, например microsoft.com
3) Можно научиться работать с компонентом mswinsck.ocx, и писать сетевые приложения под TCP/IP и UDP
4) Если у тебя Win2000 или XP - посмотреть свойства соединения локальной сети, которое имеет выход в Интернет.
Элементарно, Ватсон:
1) on error goto - если произойдет какая ошибка, то программа не вывалится с msgbox'ом ошибки, а перейдет на нужную метку
2) on error resume next - если ошибка - то же самое, но продолжит выполнение со следующей строки