VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Узнать описание типа файла Данный пример позволяет узнать описание для данного типа файла, получаемого из реестра. Для данного типа файла *.bat вы получите - "Пакетный
файл MS-DOS"
Написание слова прямо поверх всех окон Данный пример покажет как получить handle Рабочего Стола с тем, чтобы вы могли рисовать прямо на Рабочем Столе. Данный пример всего лишь напишет слово "vbAccelerator" прямо поверх всех окон. Private Declare Function CreateDCAsNull Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, lpDeviceName As Any, lpOutput As Any, lpInitData As Any) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long Public Sub TestDesktopDC() Dim hdc As Long Dim tR As RECT Dim lCol As Long hdc = CreateDCAsNull("DISPLAY", ByVal 0&, ByVal 0&, ByVal 0&) tR.Left = 60 tR.Top = 0 tR.Right = 640 tR.Bottom = 32 lCol = GetTextColor(hdc) SetTextColor hdc, &HFF& DrawText hdc, "vbAccelerator", Len("vbAccelerator"), tR, 0 SetTextColor hdc, lCol DeleteDC hdc End Sub Private Sub Command1_Click() TestDesktopDC End Sub наверх Увеличение быстродействия при заполнении какого-либо элемента данными Этот пример покажет, как можно запретить какой-либо области формы (окна) перекрашиваться. Данный пример ускоряет заполнение элементов ListBox или ListView большим количеством элементов. Разместите на форме элемент CommandButton и элемент CheckBox. Скопируйте и вставьте в события формы
следующий код, запустите проект на выполнение.
Нажмите на кнопку, запомните результат, затем
поставьте галочку в элемент CheckBox и снова нажмите
на кнопку. Надеюсь, вы заметили разницу?
Отслеживание нажатий на клавишы клавиатуры Чем мне понравился этот пример? Тем, что без использования таймеров ваша программа может реагировать на нажатия клавиш клавиатуры. Причем время реакции отклика на нажатия, как мне показалось, гораздо выше. Вам понадобится элемент CommandButton и элемент PictureBox. Private m_bPlay As Boolean Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub Command1_Click() Dim i As Long Dim iLast As Long If Command1.Caption = "&Stop" Then m_bPlay = False Command1.Caption = "&Play" Else Command1.Caption = "&Stop" m_bPlay = True i = 1 Do ' Determine if the left or right keys are pressed: If (GetAsyncKeyState(vbKeyLeft)) Then ' Diminish the colour i = i - 1 ElseIf (GetAsyncKeyState(vbKeyRight)) Then ' Increase the colour i = i + 1 End If ' Colour within bounds: If (i < 1) Then i = 15 If (i > 15) Then i = 1 ' If colour has changed, change the display: If (iLast <> i) Then With Picture1 .Cls .ForeColor = QBColor(i) ' Generate a RGB complement for the background: .BackColor = &HFFFFFF And (Not QBColor(i)) .CurrentX = 64 * Screen.TwipsPerPixelX .CurrentY = 64 * Screen.TwipsPerPixelY Picture1.Print Hex$(QBColor(i)) End With End If iLast = i ' This is here to stop the animation getting too fast to see: Sleep 25 ' Ensure we can still click buttons etc DoEvents Loop While m_bPlay End If End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If (Command1.Caption = "&Stop") Then Command1_Click End If End Sub наверх Скопировать рисунок из PictureBox в буфер обмена Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd As Long) As Long Private Declare Function CloseClipboard Lib "USER32" () As Long Private Declare Function SetClipboardData Lib "USER32" (ByVal wFormat As Long, ByVal hMem As Long) As Long Private Declare Function EmptyClipboard Lib "USER32" () As Long Private Const CF_BITMAP = 2 Public Function CopyEntirePicture(ByRef objFrom As Object) As Boolean Dim lhDC As Long Dim lhBMP As Long Dim lhBMPOld As Long Dim lWidthPixels As Long Dim lHeightPixels As Long ' Create a DC compatible with the object we're copying from: lhDC = CreateCompatibleDC(objFrom.hDC) If (lhDC <> 0) Then ' Create a bitmap compatible with the object we're copying from: lWidthPixels = objFrom.ScaleX(objFrom.ScaleWidth, objFrom.ScaleMode, vbPixels) lHeightPixels = objFrom.ScaleY(objFrom.ScaleHeight, objFrom.ScaleMode, vbPixels) lhBMP = CreateCompatibleBitmap(objFrom.hDC, lWidthPixels, lHeightPixels) If (lhBMP <> 0) Then ' Select the bitmap into the DC we have created, and store the old bitmap that was there: lhBMPOld = SelectObject(lhDC, lhBMP) ' Copy the contents of objFrom to the bitmap: BitBlt lhDC, 0, 0, lWidthPixels, lHeightPixels, objFrom.hDC, 0, 0, SRCCOPY ' Remove the bitmap from the DC: SelectObject lhDC, lhBMPOld ' Now set the clipboard to the bitmap: OpenClipboard 0 EmptyClipboard SetClipboardData CF_BITMAP, lhBMP CloseClipboard ' We don't delete the Bitmap here - it is now owned ' by the clipboard and Windows will delete it for us ' when the clipboard changes or the program exits. End If ' Clear up the device context we created: DeleteObject lhDC End If End Function Private Sub Command1_Click() CopyEntirePicture Picture1 End Sub Private Sub Form_Load() Dim i As Long ' Draw something in the Picture box: With Picture1.Font .Name = "Arial" .Bold = True .Size = 24 End With For i = 1 To 20 Picture1.ForeColor = QBColor(i Mod 15) Picture1.Print "vbAccelerator" Next i End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Александр Ответ ожидается по этому адресу Не подскажите,как из VB6 запустить программу(игру). Например у меня есть форма с кнопкой OK, я нажимаю и должна запуститься игрушка. Как прописать директорию, точнее как установить связь. Автор вопроса: Виталик Ответ ожидается по этому адресу Скажите, как можно из моей проги отослать письмо на мыло так, чтобы в обход всяких Outlook Express. Данные для письма брать из файла. И ещё эта прога не должна надоедать всякими глупыми запросами. Подскажите что делать. Можно кусочек кода (VB6). Автор вопроса: Кирко Владимир Ответ ожидается по этому адресу Подскажите как программно определить время проигрывания MIDI-файла? Автор вопроса: Виталик Ответ ожидается по этому адресу Скажите, как с помощью VB6 можно сделать программу, осуществляющую связь через TCP/IP с помощью интернета. Нужно чтобы моя прога слала текстовое сообщение на удаленный компьютер, а тот компьютер должен принять это сообщение и записать в переменную. Если нетрудно привидите кусочки кода клиента и сервера. Автор вопроса: Виталик Ответ ожидается по этому адресу Скажите, как сделать, чтобы моя прога определила мой IP когда я в сети. Это значение нужно присвоить какой либо переменной. Если нетрудно, приведите пример кода. Автор вопроса: Виталик Ответ ожидается по этому адресу Как с помощью VB_6 взять из реестра записи из нужного мне раздела. Можно кусок кода. Автор вопроса: Laguna Ukraine Ответ ожидается по этому адресу Как получить размер конкретной веб-страницы (по URL) не загружая эту страницу на компьютер? Буду благодарен, если приведете пример. Автор вопроса: KAS (c) Ответ ожидается по этому адресу Кто-нибудь знает как Windows XP отлавливает нажатие кнопки отключения компьютера? Автор вопроса: Tort Ответ ожидается по этому адресу Как можно ускорить открытие файла, если файл имеет произвольный доступ (Random)и содержит более ста тысяч записей? Автор вопроса: Игорь Ответ ожидается по этому адресу Процесс загруяки программы требует некоторого времени, в течение которого инициализируются базы данных выполняются некоторые базовые расчеты (SQL-яапросы) и т.д. Наличие заставки несколько улучшает ситуацию, но пользователь все равно может усомниться, не зависла ли программа. Как сделать "Индикатор" загрузки, привязав его к времени показа стартовой заставки? Автор вопроса: kuza Ответ ожидается по этому адресу Как сохранить рисунок из picture Box на диск в формате .jpg? Стандартный SavePicture не подходит! Автор вопроса: Данила Ответ ожидается по этому адресу Как в FlexGrid разукрашивать ячейки (одна красной, другая синей, строка снизу зелёной и т.д.). Если в нём нельзя, то где можно и как это пользовать? Автор вопроса: Alexey Ответ ожидается по этому адресу 1.Кто знает как на Visual Basic Script в документе HTML запрограммить чтение данных из файла, лежащего рядом (любые варианты). 2.Подскажите как передать хотябы переменную. Неплохо если поделитесь простыми примерами с Winsock'om на примере клиент-сервер... или дайте ссылки на общения, статьи, примеры... Автор вопроса: Евгений Ответ ожидается по этому адресу Как сохранить в таблице Access OLE-объект? Автор вопроса: Виталик Ответ ожидается по этому адресу Скажите как написать почтовую программу чтобы она умела только отсылать письма. Работа по протоколу POP3 и SMTP. Прошу, приведите код или подскажите где его достать. Автор вопроса: MAX Ответ ожидается по этому адресу Как считать значения ячеек в конкретном столбце DataGrid? Автор вопроса: XAM Ответ ожидается по этому адресу Кто-нить подскажет как работать с .dbf файлами? 1.Создание 2. Добавление записей 3. Чтение записей из конкретных ячеек таблицы 4. Обращение к таблице при помощи Recordset или ADO Data Control Автор вопроса: Сергей О. Ответ ожидается по этому адресу Подскажите как в файлах последовательного доступа или при работе с CommonDialog сохранять файл без появления диалогового окна (как в Word кнопка дискета) Автор вопроса: Виталик Ответ ожидается по этому адресу Подскажите как писать и использовать DLL на VB. Автор вопроса: VMJ Ответ ожидается по этому адресу Как средствами Vb можно добавить, изменить, удалить данные в таблице FoxPro Автор вопроса: Anatoliy Zhukov Ответ ожидается по этому адресу Нужна любая информация по MSMQ. Любый линки. Всё что можно найти в интернете: практически ничего. Милкасофтовский сайт содержит тоже не много, поэтому прошу не умничать и не посылать туда. :) Автор вопроса: serega435 Ответ ожидается по этому адресу Как в VB.NET выявать апи-функцию SetMenuItemBitmaps? В vb6 выяыв работает, но в net не могу органияовать корректный выяов. Ответы: Вопрос: Существует ли хороший ActiveX для отображения такой штуки: что-то среднее между гридом и диаграммой, По вертикали идут позиции, а по горизонтали даты. Надо отображать горизонтальные линии соответствующие периодам дат. например: 1.03 - 1.04 - 1.05 - 1.06 AAA Х=============Х BBB Х================... CCC ..=====================Х Данные будут браться из БД. Ответ: Автор ответа: Andrew Stephanoff Есть, это VSFlexGrid Control. У меня есть архив (3,5 МБт), а где в инете - не знаю. Если надо -- пиши. Вопрос: Существует какой-либо контрол для отображение полей БД в виде таблицы, и как им пользовааться. А то использовать несколько ListBox-ов кажется перегибом. Ответ: Автор ответа: Андрей для этого есть конторол Microsoft Flex Grid. В нем гораздо удобней это делать. описание есть на vb.net а сам контрол в стандартной винде. Ответ: Автор ответа: MAX Есть такая штука DataGrid называется Почти как несколько listbox-ов Вопрос: В Exel есть форма. 1-я строка(1) и столбец(А) с такими данными: день.месяц.год фамилия имя часы:минуты (это все в одной ячейке А1). Можно ли каким-то обраяом выделить только часы и минуты, скопировав часы в ячейку В1, минуты в С1? Данные каждый день вносятся в первый столбец до 200 строки(А200), накапливаются(1-й день в А1, 2-й в А2 и т.д). Можно решить этот вопрос средствами basic или макросами? Ответ: Автор ответа: Alex В ячейке А1 находится занчение: 25.02.2003 Иванов Иван Иванович 09:30 В ячейке В1 введи формулу: =WTime(A1,1) В ячейке C1 введи формулу: =WTime(A1,2) При этом напиши функцию на VB: Function WTime(s As String, k As Integer) If k = 1 Then ' часы WTime = Mid(s, Len(s) - 4, 2) Else WTime = Right(s, 2) End If End Function Вопрос: Есть ещё вопрос: как быстро вывести таблицу из базы на экран. Я использую MSFlexGrid. Проблема в том, что 36000 строк появляются примерно через 10 минут. Код такой: Set rs = db.OpenRecordset("звонки") rs.MoveFirst Do Until rs.EOF = True MSFlexGrid1.AddItem rs("ID_звонка") MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 MSFlexGrid1.Col = 1 MSFlexGrid1.Clip = rs("тип_звонка") MSFlexGrid1.Col = 2 MSFlexGrid1.Clip = rs("дата") MSFlexGrid1.Col = 3 MSFlexGrid1.Clip = rs("время") MSFlexGrid1.Col = 4 MSFlexGrid1.Clip = rs("код") MSFlexGrid1.Col = 5 MSFlexGrid1.Clip = rs("номер") MSFlexGrid1.Col = 6 MSFlexGrid1.Clip = rs("направление") MSFlexGrid1.Col = 7 MSFlexGrid1.Clip = rs("длительность") MSFlexGrid1.Col = 8 MSFlexGrid1.Clip = rs("стоимость") MSFlexGrid1.Col = 9 MSFlexGrid1.Clip = rs("валюта") rs.MoveNext Loop MSFlexGrid1.Visible = True MSFlexGrid1.Enabled = True Есть варианты? Нужно учесть, что данные в базе меняются и выводимую таблицу нужно будет обновлять. Ответ: Автор ответа: ShAdE Это наверно не самый лучший способ, но ускоряет процесс не меньше чем в два раза: перед заполнением данных я скрываю решетку (MSFlexGrid1.visible=false) а после того, как она заполнена всем необходимым снова ее показываю Ответ: Автор ответа: Andrew Stephanoff Используй лучше Microsoft DataGrid Control и Microsoft DataGrid Control установка соединения Option Explicit Dim cnn As ADODB.Connection Private Sub Form_Load() cnn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strPathToDatabase End Sub чтение данных из рекордсета (используется adodc, но можно использовать и переменную типа Recordset) Private Sub SetTable() Adodc1.ConnectionString = cnn.ConnectionString Adodc1.RecordSource = "SELECT field1, field2 FROM table1 WHERE field0='" & strParametr & "';" Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 DataGrid1.Refresh End Sub при изменении данных в таблице просто вызываешь снова эту процедуру, либо, если данные менялись у тебя в программе в объекте Recordset, заново указываешь источник строк и обновляешь: Set DataGrid1.DataSource = Adodc1 DataGrid1.Refresh Это тоже не самый быстрый вариант: на Celeron-800 под Win200 соединение с таблицей, содержащей 32 тыс. строк устанавливается секунд где-то за 10, но зато потом работает довольно шустро. У меня есть другой контрол - VideoSoft VSFlexGrid Control. В нем реализовано очень много дополнительных функций, которых нет ни в MSFlexGrid, ни в MSDataGrid. Но насчет быстродействия на больших таблицах я его не проверял. Если хочешь попробовать (а он того стоит) могу намылить (архив весит 3,5МБт). Ответ: Автор ответа: Дмитрий Державец Попробуйте заполнить так: Sub fgRefresh() Dim row As Double fg.Clear With fg 'Задаем колонки и шапку .Cols = 4 .FixedCols = 2 .Rows = 2 .FixedRows = 1 .TextMatrix(0, 2) = "Фотография" .ColWidth(0) = 0 .ColWidth(1) = 300 .ColWidth(2) = .Width - 400 .ColAlignment(2) = 1 .ColWidth(3) = 0 qry = "select * from imgs where type = " & cmb.ItemData(cmb.ListIndex) & " and id > 0" If Not DM_OpenRecordSet(rst, qry) Then Exit Sub If rst.EOF Then Exit Sub .Rows = rst.RecordCount + 1 r = 0 'и вот пощло заполнение - должно быть намного быстрее While Not rst.EOF r = r + 1 .TextMatrix(r, 0) = rst.Fields(0).Value .TextMatrix(r, 2) = rst.Fields(2).Value .TextMatrix(r, 3) = rst.Fields(3).Value If rst!Id = NewId Then row = r End If rst.MoveNext Wend End With End Sub Ответ: Автор ответа: Рафаиль Сразу никто не выводит такой массив. даже Jet 4.0 ;^) Действуй так -> сначала выводи столько записей сколько помещается на экране, то есть 24 первые строки (например) (супербыстро!) Потом отлавливай, при нажатиях клавиши вниз рассчитывай и выводи следующие 24 записи * счетчик количества нажатий также надо рассчитывать и переход вверх, можно отлавливать мышь. Идея в целом такова, отбирать не более Х строк, помещающихся на экране, все остальные все равно на экране не видны... Вопрос: Вот такая тупая ситуация... На форме есть filelistbox, в нём отображаются файлы, находящиеся в какой либо папке. Так вот после удаления файла никак не могу сделать чтобы сабж обновил список. Делал после удаления вот так: fileListBox.path = SomeCatalog где SomeCatalog - папка, содержащая данные файлы. Раньше делал подобное, а сейчас подзабыл как... Ответ: Автор ответа: Артем Кривокрисенко Попробуй filelistbox.refresh Вопрос: Подскажите пожалуйста, как преобразовать фаил. То есть открыть *bmp и сохранить как *jpg ??? Ответ: Автор ответа: Programmer По этому поводу был контрол на www.vbrussian.com Ответ: Автор ответа: Alexander Есть такая бесплатная библиотека GflSDK на сайте www.xnview.com. Там и примеры её применения. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |