VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Поздравляю прекрасную половину читателей этой рассылки с Международным Женским Днём!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Функция для изменения размеров картинки Добавьте на форму 2 PictureBox и 1 CommandButton. Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Const SRCCOPY = &HCC0020 Private Sub ImgResize(src As PictureBox, TmpPic As PictureBox, mWidth As Long, mHeight As Long) src.AutoRedraw = False TmpPic.AutoRedraw = True TmpPic.Height = mHeight 'установка размеров невидимого picturebox TmpPic.Width = mWidth StretchBlt TmpPic.hdc, 0, 0, mWidth, mHeight, src.hdc, 0, 0, src.Width, src.Height, SRCCOPY 'сохранить временной файл на диске SavePicture TmpPic.Image, App.Path + "\tempimg.bmp" 'перезагрузить оригинальный picturebox src.AutoSize = True src.Picture = LoadPicture(App.Path + "\tempimg.bmp") 'удалить временной файл Kill App.Path + "\tempimg.bmp" 'очистить невидимый picturebox TmpPic.Picture = LoadPicture() 'пример для вызова функции 'ImgResize Picture1, Picture2, Picture1.Width / 2, Picture1.Height / 2 End Sub Private Sub Command1_Click() ImgResize Picture1, Picture2, Picture1.Width / 2, Picture1.Height / 2 End Sub Private Sub Form_Load() Picture2.Visible = False End Sub наверх Скопировать содержимое PictureBox в буфер обмена Интересный пример, правда не до конца понятый мною. Расположите на форме элемент PictureBox и элемент CommandButton. Запустите проект, нажмите на кнопку. Затем откройте приложение Paint и нажмите сочетание клавиш Ctrl + V. Option Explicit 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 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 GetClipboardFormatName Lib "user32" Alias "GetClipboardFormatNameA" (ByVal wFormat As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long Private Declare Function EmptyClipboard Lib "user32" () As Long Private Declare Function CountClipboardFormats Lib "user32" () As Long Private Declare Function EnumClipboardFormats Lib "user32" (ByVal wFormat As Long) As Long Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) Public Enum EPredefinedClipboardFormatConstants [_First] = 1 CF_TEXT = 1 CF_BITMAP = 2 CF_METAFILEPICT = 3 CF_SYLK = 4 CF_DIF = 5 CF_TIFF = 6 CF_OEMTEXT = 7 CF_DIB = 8 CF_PALETTE = 9 CF_PENDATA = 10 CF_RIFF = 11 CF_WAVE = 12 CF_UNICODETEXT = 13 CF_ENHMETAFILE = 14 CF_HDROP = 15 CF_LOCALE = 16 CF_MAX = 17 [_Last] = 17 End Enum Public Function CopyEntirePictureToClipboard(ByRef objFrom As Object) As Boolean Dim lhDC As Long Dim lhBmp As Long Dim lhBmpOld As Long lhDC = CreateCompatibleDC(objFrom.hdc) If (lhDC <> 0) Then lhBmp = CreateCompatibleBitmap(objFrom.hdc, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY) If (lhBmp <> 0) Then lhBmpOld = SelectObject(lhDC, lhBmp) BitBlt lhDC, 0, 0, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY, objFrom.hdc, 0, 0, SRCCOPY SelectObject lhDC, lhBmpOld EmptyClipboard OpenClipboard 0 SetClipboardData CF_BITMAP, lhBmp CloseClipboard End If DeleteObject lhDC CopyEntirePictureToClipboard = True Else CopyEntirePictureToClipboard = False End If End Function Private Sub Command1_Click() Call CopyEntirePictureToClipboard(Picture1) End Sub наверх Определение типа рисунка и его размеров Данный пример позволяет узнать такие параметры файла рисунка в формате GIF или JPG как: тип картинки, размер по ширине и размер по высоте Private Type ThePicInfo Type As String Width As Long Height As Long End Type Private Function CheckPicSpecs(TheFile) As ThePicInfo Dim TheContent, TheImageInfo As ThePicInfo, TheVar, TheFreeFile TheFreeFile = FreeFile Open TheFile For Binary As TheFreeFile TheContent = Input(10, TheFreeFile) Close TheFreeFile If Mid(TheContent, 7, 4) = "JFIF" Then TheImageInfo.Type = "JPG" Open TheFile For Binary As TheFreeFile TheContent = Input(167, TheFreeFile) Close TheFreeFile TheImageInfo.Height = Asc(Mid(TheContent, 165, 1)) + 256 * Asc(Mid(TheContent, 164, 1)) TheImageInfo.Width = Asc(Mid(TheContent, 167, 1)) + 256 * Asc(Mid(TheContent, 166, 1)) End If If Mid(TheContent, 1, 3) = "GIF" Then TheImageInfo.Type = "GIF" TheImageInfo.Width = Asc(Mid(TheContent, 7, 1)) + 256 * Asc(Mid(TheContent, 8, 1)) TheImageInfo.Height = Asc(Mid(TheContent, 9, 1)) + 256 * Asc(Mid(TheContent, 10, 1)) End If CheckPicSpecs = TheImageInfo End Function Private Sub Command1_Click() Dim a As ThePicInfo 'в качестве параметра функции CheckPicSpecs установите путь к вашей картинке a = CheckPicSpecs("D:\garbage\way2house.gif") MsgBox a.Type MsgBox a.Width MsgBox a.Height End Sub наверх CommonDialog: Выбор нескольких файлов для открытия Некоторое время назад я натолкнулся на одном из сайтов на вопрос: "А как мне с помощью CommonDialog выбрать несколько файлов для открытия". Ответ кроется в устанавливаемом флажке cdlOFNAllowMultiselect. Подробности? Пожалуйста. Скопирова код, запустите программу на выполнение. Нажмите на кнопку, выберите несколько файлов, нажмите "Открыть". Вы получите строку, содержащую полный путь к отрываемой папке, а также разделенные пробелами список файлов для открытия. Вам останется только разделить полученную строку на отдельные элементы. Я могу это сделать, а Вы? Private Sub ShowOpen() On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "All Files (*.*)|*.*|Word Documents (*.doc )|*.doc |Text Files (*.txt)|*.txt|" CommonDialog1.FilterIndex = 3 CommonDialog1.InitDir = "D:\DOCUMENTS" CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNAllowMultiselect CommonDialog1.Action = 1 'Или же CommonDialog1.ShowOpen '*********** 'Здесь распологается Ваш код (не забудьте, что путь к выбранному файлу Вы считываете из свойства FileName) MsgBox CommonDialog1.FileName '********** Exit Sub ErrorHandler: If Err.Number = 32755 Then Exit Sub End Sub Private Sub Command1_Click() Call ShowOpen End Sub наверх Определение, виден ли СкроллБар у элемента Разместите на форме элемент ListBox. (В оригинале примера на форме был размещен элемент TreeView из библиотеки Microsoft Common Dialog Control 6.0. Можете разместить и его, только не забудьте снять комментарии, относящиеся к элементу TreeView). Private Const GWL_STYLE = (-16) Private Const WS_HSCROLL = &H100000 Private Const WS_VSCROLL = &H200000 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Sub Command1_Click() Dim wndStyle As Long wndStyle = GetWindowLong(List1.hwnd, GWL_STYLE) 'wndStyle = GetWindowLong(TreeView1.hwnd, GWL_STYLE) If (wndStyle And WS_HSCROLL) <> 0 Then MsgBox "A horizontal scroll bar is visible." Else MsgBox "A horizontal scroll bar is NOT visible." End If If (wndStyle And WS_VSCROLL) <> 0 Then MsgBox "A vertical scroll bar is visible." Else MsgBox "A vertical scroll bar is NOT visible." End If End Sub Private Sub Command2_Click() List1.Move 250, 900, 1000, 1000 'TreeView1.Move 250, 900, 1000, 1000 End Sub Private Sub Form_Load() ' Size and position the form and controls. Form1.ScaleMode = 1 Form1.Move 0, 0, 5100, 5040 Command1.Caption = "Scroll Bar Test" Command1.Move 120, 120, 1700, 500 Command2.Caption = "Size Control" Command2.Move 2000, 120, 1700, 500 List1.Move 250, 900, 3000, 1500 'TreeView1.Move 250, 900, 3000, 1500 List1.AddItem "1: Sample Text" List1.AddItem "2: Sample Text" List1.AddItem "3: Sample Text" List1.AddItem "4: Sample Text" List1.AddItem "5: Sample Text" List1.AddItem "6: Sample Text" 'TreeView1.Nodes.Add , , , "1: Sample Text" 'TreeView1.Nodes.Add , , , "2: Sample Text" 'TreeView1.Nodes.Add , , , "3: Sample Text" 'TreeView1.Nodes.Add , , , "4: Sample Text" End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: DeDMoRoZ Ответ ожидается по этому адресу Мой вопрос связан с API. Заключается он в следующем. Мне нужно помещать в ListBox все запускаемые exe и com приложения в Windows 95. А так же все открываемые папки. И после клика в ListBox переходить к выполнению тои или иной задачи. К примеру у меня открыта папка Windows и работает exe файл Nootpade.exe они помещены в этот ListBox. Первая строка c:\windows вторая c:\windows\nootpade.exe (в ListBox). Пощелчки по 1 строке мы переходим к папке Windows а по второй переходим к nootpade.exe. Вообщем получить что то вроде панели задач (нижняя часть экрана) как Windows. Так же нужно поместить обсалютно все работающие процессы в системе во второй ListBox и по щелчку нужно что бы задача снималась. То есть что вроде "Заверщение работы програм" как Windows по нажатию на Alt+Ctrl+Del. МОЖЕТ кто нибудь знает где достать такой компонент или пример (только не очень сложный) а ещё лучше OCX. Автор вопроса: Лёха Ответ ожидается по этому адресу Если кто хочет переписывоться-пишите skorpion200284@mail.ru (одна голова хорошо, а с туловищем лучше!) Автор вопроса: bad_tula@msn.com Ответ ожидается по этому адресу Поиогите исходниками, доками, про то как можно сделать программу для соединения с ИНТЕРНЕТ. Ответы намыльте сюда: bad_tula@msn.com Автор вопроса: mikl Ответ ожидается по этому адресу 1) Как сделать так, чтоб при попытке удаления определённой папки в программу поступал сигал. 2) Пишу программу запрашивающую пароль при попытке открыть папку. Как при получении правильного пароля открыть обычную Windows-кую папку Автор вопроса: LexSys Ответ ожидается по этому адресу Как сделать чтото типо видео захвата? А именно: У меня есть тюнер к которому подключена миникамера("скрытая"). Как перехватить видео сигнал и поместить его куданибудь(Пикчер, может контрол какой). Но ето не самое главное: мне надо чтобы программа следила за изобр. и кодга ино изменялось происходило мной закодир. действие. PC: К примеру камера смотрит в комнату(ниче не двигается) и вдруг появляется какойнить чел, и моя прога реагирует на ияменение и сообщяет мне. Ето все для того, чтобы мне не слидить яа монитором, а смотреть только когда чтото происходит... Может таймер подключить который сравнивает картинку и если она отличается от прежней, делается что-либо, может как по др... Пожалуйста помогитееееее, или хотябы скажите вояможно ли это??? Если это поможет то тюнет - AverTV Studio Автор вопроса: Алексей Кувалин Ответ ожидается по этому адресу Вот такой вопрос: в текстбоксе есть определенный текст. Так вот что требуется: если первые 6 символов соответсвуют образцу (например If six number = "sobaka" Then) то будет происходить какое-то действие. Как это осуществить? Автор вопроса: Анатолий Ответ ожидается по этому адресу Мой проект (VB6) испольяует DAO 3.50, работал бея проблем (Win 95/98/2000). Появились машины с той же самой операционкой, не открывающие баяу данных при работе ия exe-шника. При работе в среде отладки все отлично. Тогда меняю DAO 3.50 на DAO 3.60. На этих машинах все отлично, но на части тех, где раньше проблем не было (не на всех!) баяа яагружаться перестала. Новую .dll я, естественно, нормально устанавливаю и регистрирую. Да, проблема не из легких. Я тоже столкнулся с ней при установке своей программы на другую машину (испольяуя Setup Vizard VB5). Помогло, когда вручную удалил все *.dll драйвера DAO (они оказались, если судить по дате более поздние), затем снова установил Office. Иначе если переустанавливать Office, нерабочие драйвера оставались к сожалению, нетронутыми, т.к. похоже - это особенность Windows, при установке не трогать более свежие драйвера. Думаю, проблема тут вояникает изза версий библиотек - на машине должен стоять неконфликтный набор. Теперь делаю установочный комплект дискет на той машине, где яаведомо янаю, что драйвера DAO самые древние. Если начинать устанавливать свою программу на машину с более свежими драйверами (рабочими), то они не затруться, а те, которых не хватает - добавятся. Или делать установочный комплект другими средствами, например InstallShield. При подготовке установочного комплекта, он берет драйвера не из системы Windows, как родной Setup Vizard VB5, а из своего каталога. Возможно я, конечно, ошибаюсь и есть более разумный способ. Но факт остается фактом - конфликт библиотек в VB существует. Это ему большой минус. Автор вопроса: Vladimir Ответ ожидается по этому адресу Как на VB6 из буфера обмена извлечь только URL и вставить его в ListBox без кнопок. Автор вопроса: Loki Ответ ожидается по этому адресу Кто может мен расказать как объщаться с ИК портом (USB) с помощью VB! Автор вопроса: Dr.Max Ответ ожидается по этому адресу Только что узнал, что vbnet имеет смысл только для серверных программ. Это что ли, писать на нем не серверные проги (типа игр и т.п.) бесполезно??? Да и вообще как у него со скоростью, в сравнении вб6???7 Автор вопроса: Lord207 Ответ ожидается по этому адресу Люди, кто-нибудь знает как сделать инсталляшку IE5.5 раямером 4-7м. все 70м таскать неохота изза простого юзания пары файликов типа mshtml.dll да shdocvw.dll. просто заменить их не канает - форты умирают :-) Автор вопроса: MC Green Ответ ожидается по этому адресу Какие есть API-функции для работы с *.ini файлами (если можно, пример кода). Ответы: Вопрос: Помагите с решением проблема такая. Есть функции как copy, cut, paste можно воспользаватся с помащю как Clipboard и как через WinApi Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long,_ LParam As Any) As Long Какая разнится между ними разнится и какая из них боле эфектвна. Ответ: Автор ответа: Tibor Ни какой. Вопрос: Подскажите, плз, как можно перетаскивать объект по форме мышкой (хорошо бы, что-бы было видно контур, как в нормальных приложениях) и как можно соединить два объекта на форме линией (опять же, с помощью крысы). Ответ: Автор ответа: P@Ssword Для удобства кладём поверх контрола лейбл с такими же размерами и BackStyle = Transparent. По событию Маус_Мув пишем: If Button = vbLeftButton then Контрол.Move Лейбл.Left + X, Лейбл.Top + Y End If А в Маус_Ап Лейбл.Move Контрол.Left, Контрол.Top Вопрос: Как ияменить цвет фона отдельной кнопки, не меняя при этом основные настройки Windows? Ответ: Автор ответа: Алексей Свойства смотрел? В рунтайме так: Command1.Background = цвет Вопрос: Подскажите, плз как преобразовать документ DOC (Word) в RTF. Слышал, что эти функции есть в библиотеках WordPad, но как с ними работать? Ответ: Автор ответа: Лозовский Антон Борисович Попробуй через ole automation загрузить из своей программы текст в ворд, а потом сохрани его в нужном формате. Вопрос: Как сделать, чтобы программа запускалась как сервис в Win NT/2000/XP (Service NT)? Я смотрю, что на этот вопрос никто не знает ответа. Ламеры задают вопросы наподобие "Как засунуть программу в Systray, там где часики", а продвинутые ламеры на них отвечают. Вопрос задаешь чуть посложней, так все кричат в один голос: "это на VB нельзя сделать". Что никто не может толком программировать на VB? В общем я частично согласен, что на VB сервисы не пишутся. Но можно использовать ocx, написанные на с/с++ или создать сервис используя API. Может кто-то сталкивался с этим, или есть готовый пример? Ответ: Автор ответа: Sergey Y. Tkachev Раз тебе так интересно, а все вокруг ламеры, то сходи на Microsoft. Там ооочень даже хорошо написано, как на Бэйсике делать сервисы :-) Если ты ленивый, то могу сразу выслать контрол. Пиши, если что. Ответ: Автор ответа: Eugene Ну ты обиделся! Я чуть не зарыдал! Можно сделать как сервис, но для этого нужна одна .dll библиотечка! У меня где-то была, запустит твое веяние как сервис и в 95 и в ХР, давно я ее на доставал из кобуры - надо поискать. Пиши на личный - обсудим, если больше некому, иль присоединяйся к Сообчанинам. Вопрос: Мой проект (VB6) использует DAO 3.50, работал без проблем (Win 95/98/2000). Появились машины с той же самой операционкой, не открывающие базу данных при работе из exe-шника. При работе в среде отладки все отлично. Тогда меняю DAO 3.50 на DAO 3.60. На этих машинах все отлично, но на части тех, где раньше проблем не было (не на всех!) база загружаться перестала. Новую .dll я, естественно, нормально устанавливаю и регистрирую. Ответ: Автор ответа: Yory Спасибо за то, что Вы откликнулись на мою просьбу помочь. Речь идет о проблемах DAO 3.50/3.60. Именно в Reference я меняю ссылку на ту или иную библиотеку, и тем не менее на части машин Dao360.dll нормально работать не желает - при первом же обращении возвращает "не могу создать объект". Еще раз повторяю, что все библиотеки я нормальным образом инсталлирую и регистрирую. Ответ: Автор ответа: Лозовский Антон Борисович Может быть, там нужно переставить последнюю версию MSDAC. Вопрос: Мой вопрос связан с API. Заключается он в следующем. Мне нужно помещать в ListBox все запускаемые exe и com приложения в Windows 95. А так же все открываемые папки. И после клика в ListBox переходить к выполнению тои или иной задачи. К примеру у меня открыта папка Windows и работает exe файл Nootpade.exe они помещены в этот ListBox. Первая строка c:\windows вторая c:\windows\nootpade.exe (в ListBox). Пощелчки по 1 строке мы переходим к папке Windows а по второй переходим к nootpade.exe. Вообщем получить что то вроде панели задач (нижняя часть экрана) как Windows. Так же нужно поместить обсалютно все работающие процессы в системе во второй ListBox и по щелчку нужно что бы задача снималась. То есть что вроде "Заверщение работы програм" как Windows по нажатию на Alt+Ctrl+Del. МОЖЕТ кто нибудь знает где достать такой компонент или пример (только не очень сложный) а ещё лучше OCX. Ответ: Автор ответа: gav Ссылка на чтото подобное - когдато и я это делал... http://v-b.nm.ru/PROJECT5.ZIP Вопрос: Можно ли в VB вставлять в код программы подпрограммы "на лету"? Так это приблизительно выглядит на Паскале: if <какое-то условие> then ... <тело программы> ... begin ... <код подпрограммы> ... end; ... <тело программы> ... А как в Visual Basic? Ответ: Автор ответа: Иван ака Atlanoff Не понял, что именно имеется в виду. Может имеется в виду конструкция If ...условие... Then ...делать... End if Но это не "на лету". Если присать на VBA, то можно например загнуть так: Sub test() Modules.Item("testModule").InsertText ("Public Sub test1()") Modules.Item("testModule").InsertText (" msgBox ""Hello World!!!""") Modules.Item("testModule").InsertText ("End sub") Run "test1" End Sub В VB6 такого конечно нельзя, зато какой простор для мысли!!!! Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |