VBNet
VBMania
Голосование:
Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.
Subscribe.Ru увеличило максимальный размер рассылки до 100 кб. В связи с этим вопрос:
Какого размера Вы хотели бы получать рассылку?
В какой день (дни) недели Вы хотели бы получать рассылку "Visual Basic: новости сайтов, советы, примеры кодов."?
С какой периодичностью Вы хотели бы получать рассылку "Visual Basic: новости сайтов, советы, примеры кодов."?
Результаты голосования
Доска почёта:
Sergey Y. Tkachev
Кононенко Роман
Kirill
Sergey Sapozhnikov
Sobic
Ссылки:
Улицы VB
Использование VB
Азбука VB
VB на русском
Улицы VB
VB - шаг за шагом
Кирпичики VB
CообЧа VB
VB по русски
Snoozex Design
|
Господа!!! читайте MSDN!!!
Несколько слов от автора:
Внимание!!! Частота выхода рассылки увеличилась! Теперь рассылка будет выходить два раза в неделю по понедельникам и пятницам. В пятничном выпуске будут размещаться примеры, советы и раздел Вопрос/Ответ. Количество публикуемого материала увеличится. А в понедельник в рассылке будут публиковаться новости VB-сайтов, новые темы форума VBNet, анонсы новых книг на VBNet и т.д.
Читайте!
Содержание выпуска
Пример использования (вызова) файла HTML Help из программы на Visual Basic
Данный пример довольно прост - имеет всего три шага, но довольно часто задается нашими читателями, создающими справочные файлы для своих приложений. Итак, вот что нужно для отображения в вашей программе файла Справки myfile.chm:
'Объявим переменную.
Const HH_DISPLAY_TOPIC = &H0
'Объявим API-функцию HtmlHelp.
Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" (ByVal hwndCaller As Long, ByVal pszFile As String, ByVal uCommand As Long, ByVal dwData As Long) As Long
'Создадим вызов HtmlHelp
Private Sub HH_DISPLAY_Click()
Dim hwndHelp As Long
'hWnd - переменная типа Long, содержащая указатель формы,
'которое будет родительским к окну справки
'hwndHelp - будет содержать указатель созданного окна Справки
hwndHelp = HtmlHelp(hWnd, "myfile.chm", HH_DISPLAY_TOPIC, 0)
End Sub
наверх
Определение "ухода" и "возвращения" в программу
Иногда требуется определить, когда ваша программа потеряла фокус, то есть стала неактивной в данной момент программой. Также этот пример показывает момент активизации вашей программы.
В данном примере вам обязательно потребуется дополнительный модуль, в который вы должны вписать следующий код:
Private Const WM_ACTIVATEAPP = &H1C
Private Const GWL_WNDPROC = (-4)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private m_lWndProc As Long
Public Sub WindowHook(hWnd As Long)
m_lWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf MessageCenter)
End Sub
Public Sub WindowFree(hWnd As Long)
SetWindowLong hWnd, GWL_WNDPROC, m_lWndProc
End Sub
Private Function MessageCenter(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_ACTIVATEAPP Then
If wParam Then
Form1.OnAppActivate
Else
Form1.OnAppDeActivate
End If
End If
MessageCenter = CallWindowProc(m_lWndProc, hWnd, Msg, wParam, lParam)
End Function
А в события формы впишите следующий код
Private Sub Form_Load()
WindowHook hWnd
End Sub
Public Sub OnAppActivate()
MsgBox "Добро пожаловать назад!"
End Sub
Public Sub OnAppDeActivate()
MsgBox "Покидаете программу?"
End Sub
Private Sub Form_Unload(Cancel As Integer)
WindowFree hWnd
End Sub
наверх
Условная компиляция
Решил донести до вас правду об условной компиляции.
Есть в бэйсике такая штука. Удобная временами.
Что означает условная и для чего это надо в принципе?
Например, у вас есть программа, которая должна работать как демо-версия и как полная версия.
Прекрасно, вы можете распространять полный код, делая в нем проверку, какой тип версии сейчас запущен. Однако вам боязно: вдруг сломают? Условная компиляция - это возможность не включать в код ненужные блоки. Или, более приближенный к боевым условиям пример: В программе полно отладочной информации - не тащить же ее в реальный проект. Убрать - раз плюнуть, но в какой-то момент может и пригодится.
Условная компиляция дает нам возможность избежать хранения отдельных версий в виде разных проектов.
Вот вам для начала пример.
В модуле создаем паблик-процедуру:
Public Sub WriteLog(MSG As String)
Dim iFileNum As Long
const LogName = "AppLog" ' эту константу стоит убрать в область деклараций модуля
iFileNum = FreeFile
Open App.Path & "\" & LogName For Append As iFileNum
Print #iFileNum, Format(Now, "mm/dd hh:nn:ss") & " " & MSG
Close #iFileNum
End Sub
Процедура делает элементарные вещи. Открывает файл для записи и пишет туда что попросили. Штука полезная для программ, работающих самостоятельно, без участия человека.
Как будем ее вызывать:
#if isLog then
writelog "Сообщение для записи"
# endif
После чего идем в свойства проекта и в закладке Make ищем поле для записи, обозначенное как Conditional Compilation Arguments и вписываем туда
islog = 1
В этом случае после компиляции код будет содержать вызов процедуры для записи в лог-файл. Если же перед компиляцией изменить настройки
islog = 0,
код вызова включен не будет.
Можно писать туда несколько переменных islog (под любым именем), разделяя каждую двоеточием :
наверх
ASP: Особенности передачи параметров в формах
Информация взята с сайта prosto.pp.ru
При обработке параметров форм возникает особая ситуация, когда передаваемые значения содержат символы "(кавычки) и/или '(апостроф).
Пусть, для примера, форма имеет вид:
<%' принятое значение%>
<%sTest=Request.QueryString("Test")%>
<FORM>
<INPUT TYPE="Text" NAME="Test"
VALUE="<%=sTest%>">
<INPUT TYPE="Submit" VALUE="Тест">
</FORM>
Т.е. форма получает параметр сама от себя. Все будет хорошо, пока введенная строка не содержит символа "(кавычки). Считанный параметр Test приведет к тому, что тег Test примет вид типа
<INPUT TYPE="Text" NAME="Test" VALUE="aaa"bbb">
Как видно налицо разрушение значения VALUE - бровзер отобразит только aaa - в результате параметр станет неверен. Такая же ситуация возможна при использовании символа '(апостроф) для задания значения (VALUE='').
Для исключения подобных эффектов можно применить следующие функции:
' Замена в строке " на кавычки("); ' на апостроф(')
Function Repl_Load_HTML(str)
Repl_Load_HTML=Replace(str&"",""","""")
Repl_Load_HTML=Replace(Repl_Load_HTML,"'","'")
End Function
' Замена в строке кавычек(") на " амперсанда(') на #39;
Function Repl_Teg_HTML(str)
Repl_Teg_HTML=Replace(str&"","""",""")
Repl_Teg_HTML=Replace(Repl_Teg_HTML,"'","'")
End Function
При их использовании форма приобретает вид:
<%' принятое значение%>
<%sTest=Repl_Load_HTML(Request.QueryString("Test"))%>
<FORM>
<INPUT TYPE="Text" NAME="Test"
VALUE="<%=Repl_Teg_HTML(sTest)%>">
<INPUT TYPE="Submit" VALUE="Тест">
</FORM>
Полезными для при решении подобных проблем можут оказаться методы Server.HTMLEnCode и Server.URLEnCode. При работе с JavaScript на стороне клиента - escape и unescape.
наверх
Как данные из файла перекинуть в массив
Очень часто я сталкиваюсь с такой ситуацией, когда нужно данные из файла или длинной переменной разбить на отдельные составляющие, одновременно "загоняя" эти данные в массив данных. На самом деле, решение такой проблемы очень простое: открыть файл, присвоить переменной содержимое файла и с помощью функции SPLIT разбить переменную на отдельные элементы.
Private Sub Command1_Click()
Dim txt
Dim FN As Integer
FN = FreeFile
Dim FName As String
FName = "D:\1.txt"
'открыть файл
Open FName For Input As #FN
'присвоить переменной содержимое файла
txt = Input(LOF(FN), #FN)
'закрыть файл
Close #FN
'создать нулевой массив
Dim str1() As String
'создать отдельные элементы массива
'вместо постоянной vbCrLf можно использовать любой разделить
str1 = Split(txt, vbCrLf)
'перебор элементов массива идет от 0 до n-1
For i = 0 To UBound(str1()) - 1
'вот, собстенно, и проверка
MsgBox str1(i)
Next
End Sub
наверх
Проверка на наличие некорректных символов
Данный пример проверяет строковую переменную на наличие в ней определенных символов. Добавьте на форму CommandButton и TextBox. Вы можете определить те символы, наличие которых вы хотите проверить в строковой переменной в переменной BadChars$.
Function IsValidString(StringToTest As String, Invalid As String)
For X = 1 To Len(Invalid)
If InStr(1, StringToTest, Mid$(Invalid, X, 1), 0) Then
IsValidString = False
Exit Function
End If
Next X
IsValidString = True
End Function
Private Sub Command1_Click()
Dim MyString As String
MyString = Text1.Text
'Замените '@#$%^&' теми символами, которые вы хотите проверить
BadChars$ = "@#$%^&"
X = IsValidString(MyString, BadChars$)
If X Then
MsgBox "Это нормальная переменная"
Else
MsgBox "Это НЕнормальная переменная"
End If
End Sub
наверх
Мои программы
BalloonMessage for MS Agent
BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels.
Автор: Шатрыкин Иван. Соавтор: Павел Сурменок.
наверх
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
Вопросы:
Автор вопроса: Мунгалов Андрей
Ответ ожидается по этому адресу
В программах 1С очень удобные отчеты. можно ли их прицепить к своей программе на VB. и можно ли их таскать со свой программой (без установки всего предприятия). Я пробовал добавить ссылку на Moxel.dll, ругается.
Автор вопроса: sewa
Ответ ожидается по этому адресу
Как вывести результаты расчета из программы в текстовый файл с расположением данных по горизонтали (в ряд через промежуток) и добавлением записи в конец файл после уже существующих записей?
Автор вопроса: Лися aka FOX
Ответ ожидается по этому адресу
Подскажите где можно скачать толковую книгу по VB или VBA, а желательно две,по ним обоим.
Автор вопроса: Константин
Ответ ожидается по этому адресу
Подскажите, как программно позвонить по телефону?
Ответы:
Вопрос:
1. При установке любой программы (после её закабинечивания мастером упаковки) пишет "неверные линии" в файле Setup.LST как раз там, где указан путь распаковываемых файлов. После сообщения о фатальной ошибке установка ПО прекращается. Пришлось выделить 600 метров диска для установки ещё одной версии Windows SE и VB5. Последняя создаёт нормальную установку, но она не делает кабинетов а файлы *.EX_. Может у кого-нибудь ещё была такая проблема?
2. Как сделать, что прогамма, выполняющая например 2+2 не занимала 5-7 Мб установки.
Ответ:
Автор ответа: Шатрыкин Иван
1. Одно из решений проблемы - при создании дистрибутива измените системные
чзыковые настройки Windows на американский формат. Второе решение - почитать
статью "Package & Deployment Wizard. Досадная ошибка" на сайте www.vbnet.ru
2. Нельзя! Не будет работать.
Вопрос:
Как сделать некоторые участки формы прозрачными (что-бы через них можно было видеть Рабочий стол) в VB 3-6.
Можно ли подключать какие-нибудь скины в программу ?
Ответ:
Автор ответа: Шатрыкин Иван
Устал повторять, что на сайте www.vbnet.ru есть моя статья про создание таких окон.
http://www.vbnet.ru/articles/showarticle.asp?id=22
Почитайте! Там все рассказывается.
Вопрос:
Кто знает как вставить новую строку в ADODB.RecordSet, открытый как adCmdTableDirect, если там( в table) есть поле IDENTITY(счетчик) и в него надо вставить свое значение. При вызове .addnew и присвоении этому полю значения - он ругается.
Ответ:
Автор ответа: Дмитрий Данелия
Во-первых, если Recordset создается программно, то такая вставка делается любым способом:
Есть База - c:\temp\db1.mdb, в ней таблица Tabl, а в ней два поля: f1 - счетчик и f2 - строка
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim com As ADODB.Command
Private Sub Form1_Load()
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set com = New ADODB.Command
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\temp\db1.mdb", "Admin", ""
' хоть с помощью ADODB.COMMAND
With com
.ActiveConnection = cn
.CommandText = "INSERT INTO Tabl (f2) VALUES ('Запись2')"
.Execute
End With
' хоть с помощью ADODB.RECORDSET
With rs
.ActiveConnection = cn
.LockType = adLockOptimistic
.Source = "SELECT * FROM Tabl"
.Open
.AddNew
.Fields(0) = 3
.Fields(1) = "Запись3"
.Update
.Close
End With
Set com = Nothing
Set rs = Nothing
Set cn = Nothing
End Sub
Если же у тебя на форме висит ADODC-контрол, с чьим Recordset-ом ты работаешь, то тут у меня получается интересная штука - если на форме только один ADODC - не получается, но если я кладу на форму TextBox и устанавливаю его свойства
DataSource = Adodc1
DataField = f2 (а можно и f1), то добавление происходит без проблем
With Adodc1.Recordset
.AddNew
.Fields(0) = 4
.Fields(1) = "Запись4"
.Update
End With
Естественно, если ты задаешь значение для поля Счетчик, то оно должно быть уникальным - это уже ложится на тебя, ну а если не задаешь, то не очем беспокоиться, Microsoft Jet сам присвоит ему уникальный номер.
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
наверх
|