Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 145.


VBNet VBMania
Голосование:

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • Snoozex Design
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Вот началась новая война... Наглые американцы теперь лезут в Ирак... И никто им по морде за это не даст... Грустно...
    Читайте!


    Содержание выпуска




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    Получение содержимого целой строки в элементе TextBox

    На сайте уже расположен один пример получения содержимого строки - с использованием API - Получение содержимого n-ой строки в Multiline TextBox
    Данила Беляев предлагает свой вариант - без использования API

    Данный пример покажет содержимое строки, на которой установлен курсор.

    Public Function GetLine(ByVal strString As String, ByVal lngPos As Long) As String
    If InStr(1, strString, vbCrLf) Then
    If lngPos < Len(Left(strString, InStr(1, strString, vbCrLf))) Then
    GetLine = Left(strString, InStr(1, strString, vbCrLf))
    Else
    For lngPos = lngPos To 1 Step -1
    If Mid(strString, lngPos, 2) = vbCrLf Then
    If InStr(lngPos + 2, strString, vbCrLf) Then GetLine = Mid(strString, lngPos + 2, InStr(lngPos + 2, strString, vbCrLf) - lngPos) Else GetLine = Mid(strString, lngPos + 2, Len(strString) - lngPos)
    Exit Function
    End If
    Next
    End If
    Else
    GetLine = strString
    End If
    End Function

    Private Sub Command1_Click()
    MsgBox GetLine(Text1, Text1.SelStart)
    End Sub

    наверх


    Элементы {Drive | Dir | File} ListBox. Краткое описание

    Данные элементы управления обеспечивают наиболее простой доступ к файловой системе компьютера. Элемент DriveListBox служит для доступа к списку устройств, элемент DirListBox обеспечивает просмотр папок текущего устройства, элемент FileListBox отображает файлы, определенные значением элемента DirListBox.

    Когда пользователь выбирает различные устройства с помощью элемента  DirListBox, программа переключается на новое устройство и модифицирует содержимое окна DirListBox. Аналогично, когда пользователь выбирает папку с помощью элемента управления DirListBox, программа переключается на выбранную папку и соответствующим образом модифицирует содержимое окна FileListBox.

    Чтобы соединить элементы управления, необходимо назначить соответствующие значения их свойствам. Чтобы отобразить в элементе DirListBox папки диска, необходимо гарантировать, что при каждом выборе друго диска свойство Path элемента DirListBox соответствовало свойству Drive элемента DriveListBox.

    Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
    End Sub

    При каждом изменении текущей выборки элемента DirListBox необходимо установить свойство Path элемента FileListBox равным новому пути элемента DirListBox.

    Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    End Sub

    Данный код вы можете смело вставлять на форму при создании любого приложения с использованием компонентов DriveListBox/DirListBox/FileListBox. В данном примере добавлен обработчик ошибок при выборе устройства, доступ к которому нельзя получить (к примеру, когда вы пытаетесь подключиться к CD-Rom'у, а компакт-диска внутри привода нет).

    И еще мне хотелось бы обратить ваше внимание на пример, целиком использующий данные контролы - Рекурсивный перебор все подпапок в указанной папке

    Dim DriveTmp As Integer
    Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    End Sub
    Private Sub Drive1_Change()
    On Error GoTo ErrorHandler
    Dir1.Path = Drive1.Drive
    DriveTmp = Drive1.ListIndex
    Exit Sub
    ErrorHandler:
    Drive1.ListIndex = DriveTmp
    End Sub
    Private Sub Form_Load()
    DriveTmp = Drive1.ListIndex
    End Sub
    Private Sub Dir1_Click()
    With Dir1
    .Path = .List(.ListIndex)
    End With
    End Sub

    наверх


    Cкриншот экрана, активного окна, печать и сохранение в файл

    Данный пример покажет, как можно сделать скриншот всего экрана, текущего окна (с заголовком и без), текущего окна по таймеру. А также пример печати скриншота и сохранения в файл.

    Расположите на форме 7 элементов CommandButton, элемент PictureBox (растяните изображение PictureBox как можно больше). А также расположите на форме элемент Microsoft Common Dialog Control 6.0 через меню Project | Components.

    Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
    End Type
    Private Type PALETTEENTRY
    peRed As Byte
    peGreen As Byte
    peBlue As Byte
    peFlags As Byte
    End Type
    Private Type LOGPALETTE
    palVersion As Integer
    palNumEntries As Integer
    palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors.
    End Type
    Private Type PicBmp
    Size As Long
    Type As Long
    hBmp As Long
    hPal As Long
    Reserved As Long
    End Type
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type

    Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long
    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 CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) As Long
    Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long
    Private Declare Function GetDesktopWindow Lib "USER32" () As Long
    Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long
    Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal iCapabilitiy As Long) As Long
    Private Declare Function GetForegroundWindow Lib "USER32" () As Long
    Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
    Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long
    Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long
    Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
    Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
    Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject As Long) As Long
    Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long

    Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture
    Dim hDCMemory As Long
    Dim hBmp As Long
    Dim hBmpPrev As Long
    Dim r As Long
    Dim hDCSrc As Long
    Dim hPal As Long
    Dim hPalPrev As Long
    Dim RasterCapsScrn As Long
    Dim HasPaletteScrn As Long
    Dim PaletteSizeScrn As Long
    Dim LogPal As LOGPALETTE
    If Client Then
    hDCSrc = GetDC(hWndSrc)
    Else
    hDCSrc = GetWindowDC(hWndSrc)
    End If
    hDCMemory = CreateCompatibleDC(hDCSrc)
    hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
    hBmpPrev = SelectObject(hDCMemory, hBmp)
    RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS)
    HasPaletteScrn = RasterCapsScrn And RC_PALETTE
    PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)
    If HasPaletteScrn And (PaletteSizeScrn = 256) Then
    LogPal.palVersion = &H300
    LogPal.palNumEntries = 256
    r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
    hPal = CreatePalette(LogPal)
    hPalPrev = SelectPalette(hDCMemory, hPal, 0)
    r = RealizePalette(hDCMemory)
    End If
    r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)
    hBmp = SelectObject(hDCMemory, hBmpPrev)
    If HasPaletteScrn And (PaletteSizeScrn = 256) Then
    hPal = SelectPalette(hDCMemory, hPalPrev, 0)
    End If
    r = DeleteDC(hDCMemory)
    r = ReleaseDC(hWndSrc, hDCSrc)
    Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)
    End Function

    Public Function CaptureActiveWindow() As Picture
    Dim hWndActive As Long
    Dim r As Long
    Dim RectActive As RECT
    hWndActive = GetForegroundWindow()
    r = GetWindowRect(hWndActive, RectActive)
    Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, RectActive.Right - RectActive.Left, RectActive.Bottom - RectActive.Top)
    End Function

    Public Function CaptureClient(frmSrc As Form) As Picture
    Set CaptureClient = CaptureWindow(frmSrc.hWnd, True, 0, 0, frmSrc.ScaleX(frmSrc.ScaleWidth, frmSrc.ScaleMode, vbPixels), frmSrc.ScaleY(frmSrc.ScaleHeight, frmSrc.ScaleMode, vbPixels))
    End Function

    Public Function CaptureScreen() As Picture
    Dim hWndScreen As Long
    hWndScreen = GetDesktopWindow()
    Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, Screen.Width \ Screen.TwipsPerPixelX, Screen.Height \ Screen.TwipsPerPixelY)
    End Function

    Public Function CaptureForm(frmSrc As Form) As Picture
    Set CaptureForm = CaptureWindow(frmSrc.hWnd, False, 0, 0, frmSrc.ScaleX(frmSrc.Width, vbTwips, vbPixels), frmSrc.ScaleY(frmSrc.Height, vbTwips, vbPixels))
    End Function

    Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
    Dim r As Long
    Dim Pic As PicBmp
    Dim IPic As IPicture
    Dim IID_IDispatch As GUID
    With IID_IDispatch
    .Data1 = &H20400
    .Data4(0) = &HC0
    .Data4(7) = &H46
    End With
    With Pic
    .Size = Len(Pic)
    .Type = vbPicTypeBitmap
    .hBmp = hBmp
    .hPal = hPal
    End With
    r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
    Set CreateBitmapPicture = IPic
    End Function

    Public Sub PrintPictureToFitPage(Prn As Printer, Pic As Picture)
    Const vbHiMetric As Integer = 8
    Dim PicRatio As Double
    Dim PrnWidth As Double
    Dim PrnHeight As Double
    Dim PrnRatio As Double
    Dim PrnPicWidth As Double
    Dim PrnPicHeight As Double
    If Pic.Height >= Pic.Width Then
    Prn.Orientation = vbPRORPortrait
    Else
    Prn.Orientation = vbPRORLandscape
    End If
    PicRatio = Pic.Width / Pic.Height
    PrnWidth = Prn.ScaleX(Prn.ScaleWidth, Prn.ScaleMode, vbHiMetric)
    PrnHeight = Prn.ScaleY(Prn.ScaleHeight, Prn.ScaleMode, vbHiMetric)
    PrnRatio = PrnWidth / PrnHeight
    If PicRatio >= PrnRatio Then
    PrnPicWidth = Prn.ScaleX(PrnWidth, vbHiMetric, Prn.ScaleMode)
    PrnPicHeight = Prn.ScaleY(PrnWidth / PicRatio, vbHiMetric, Prn.ScaleMode)
    Else
    PrnPicHeight = Prn.ScaleY(PrnHeight, vbHiMetric, Prn.ScaleMode)
    PrnPicWidth = Prn.ScaleX(PrnHeight * PicRatio, vbHiMetric, Prn.ScaleMode)
    End If
    Prn.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeight
    End Sub

    Private Sub Command1_Click()
    Set Picture1.Picture = CaptureScreen()
    End Sub
    Private Sub Command2_Click()
    Set Picture1.Picture = CaptureForm(Me)
    End Sub
    Private Sub Command3_Click()
    MsgBox "Через 3 секунды после закрытия окна вы получите изображение окна"
    Dim EndTime As Date
    EndTime = DateAdd("s", 3, Now)
    Do Until Now > EndTime
    DoEvents
    Loop
    Set Picture1.Picture = CaptureActiveWindow()
    Me.SetFocus
    End Sub
    Private Sub Command4_Click()
    Set Picture1.Picture = CaptureClient(Me)
    End Sub
    Private Sub Command5_Click()
    PrintPictureToFitPage Printer, Picture1.Picture
    Printer.EndDoc
    End Sub
    Private Sub Command6_Click()
    CommonDialog1.DefaultExt = ".BMP"
    CommonDialog1.Filter = "Bitmap Image (*.bmp)|*.bmp"
    CommonDialog1.ShowSave
    If CommonDialog1.FileName <> "" Then
    SavePicture Picture1.Picture, CommonDialog1.FileName
    End If
    End Sub
    Private Sub Command7_Click()
    Set Picture1.Picture = Nothing
    End Sub
    Private Sub Form_Load()
    Command1.Caption = "Весь экран"
    Command2.Caption = "Активное окно"
    Command3.Caption = "Активное окно (3 сек)"
    Command4.Caption = "Акт. окно бе загол."
    Command5.Caption = "Напечатать картинку"
    Command6.Caption = "Сохранить картинку"
    Command7.Caption = "Очистить"
    End Sub

    наверх


    Cкриншот экрана, формы или контрола

    Данный пример покажет, как можно сделать скриншот всего экрана, формы, 2 разных контрола   и сохранить их изображения в файл.

    Расположите на форме 4 элемента CommandButton и элемент DirListBox (или любой другой контрол).

    Не забудьте проверить, чтобы папка "C:\1\" существовала.

    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    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 Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) 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 CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long

    Private Const CCHDEVICENAME = 32
    Private Const CCHFORMNAME = 32
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * CCHFORMNAME
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
    End Type

    Public Sub Capture(control_hWnd As Long, fNAME As String, Optional OnlyToClipBoard As Boolean = False)
    On Error GoTo ErrorCapture
    Dim sp As RECT, x As Long
    If fNAME <> "" Then
    x = GetWindowRect(control_hWnd, sp)
    ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
    If OnlyToClipBoard = False Then
    SavePicture Clipboard.GetData, fNAME
    End If
    End If
    Exit Sub
    ErrorCapture:
    MsgBox Err & ":Error in Caputre(). Error Message:" & Err.Description, vbCritical, "Warning"
    Exit Sub
    End Sub

    Private Sub ScrnCap(Lt, Top, Rt, Bot)
    On Error GoTo ErrorScrnCap
    Dim rWIDTH As Long, rHEIGHT As Long
    Dim SourceDC As Long, DestDC As Long, bHANDLE As Long, Wnd As Long
    Dim dHANDLE As Long, dm As DEVMODE
    rWIDTH = Rt - Lt
    rHEIGHT = Bot - Top
    SourceDC = CreateDC("DISPLAY", 0&, 0&, dm)
    DestDC = CreateCompatibleDC(SourceDC)
    bHANDLE = CreateCompatibleBitmap(SourceDC, rWIDTH, rHEIGHT)
    SelectObject DestDC, bHANDLE
    BitBlt DestDC, 0, 0, rWIDTH, rHEIGHT, SourceDC, Lt, Top, &HCC0020
    Wnd = 0
    OpenClipboard Wnd
    EmptyClipboard
    SetClipboardData 2, bHANDLE
    CloseClipboard
    DeleteDC DestDC
    ReleaseDC dHANDLE, SourceDC
    Exit Sub
    ErrorScrnCap:
    MsgBox Err & ":Error in ScrnCap(). Error Message:" & Err.Description, vbCritical, "Warning"
    Exit Sub
    End Sub

    Public Sub CaptureDesktop()
    On Error GoTo ErrorCaptureDesktop
    Dim dhWND As Long, sp As RECT, x As Long
    dhWND = GetDesktopWindow
    If dhWND <> 0 Then
    x = GetWindowRect(dhWND, sp)
    ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
    End If
    Exit Sub
    ErrorCaptureDesktop:
    MsgBox Err & ":Error in CaptureDesktop. Error Message: " & Err.Description, vbCritical, "Warning"
    Exit Sub
    End Sub

    Private Sub Form_Load()
    Command1.Caption = "Экран"
    Command2.Caption = "Форма"
    Command3.Caption = "Кнопка"
    Command4.Caption = "Текстовое окно"
    End Sub

    Private Sub Command1_Click()
    On Error Resume Next
    Call CaptureDesktop
    SavePicture Clipboard.GetData, "C:\1\desktop.bmp"
    MsgBox "Картинка экрана сохранена в C:\1\desktop.bmp"
    End Sub

    Private Sub Command2_Click()
    On Error Resume Next
    Call Capture(Me.hwnd, "C:\1\form.bmp")
    MsgBox "Картинка формы сохранена в C:\1\form.bmp"
    End Sub

    Private Sub Command3_Click()
    On Error Resume Next
    Call Capture(Me.Command1.hwnd, "C:\1\button.bmp")
    MsgBox "Картинка кнопки сохранена в C:\1\button.bmp"
    End Sub

    Private Sub Command4_Click()
    On Error Resume Next
    Call Capture(Me.Dir1.hwnd, "C:\1\drv.bmp")
    MsgBox "Картинка DriveListBox сохранена в C:\1\drv.bmp"
    End Sub

    наверх


    Пример, характеризующий работу элемента ProgressBar

    Расположите на форме элементы ProgressBar, Label и Timer

    Dim time1 As Integer
    Private Sub Form_Load()
    Timer1.Interval = 10
    ProgressBar1.Min = 1
    ProgressBar1.Max = 100
    End Sub
    Private Sub Timer1_Timer()
    time1 = time1 + 1
    If time1 < 101 Then
    ProgressBar1.Value = time1
    Label1.Caption = time1 & " %"
    Else
    time1 = 0
    Label1.Caption = "0 %"
    End If
    End Sub

    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

    Автора: Шатрыкин Иван и Павел Сурменок.

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Dmitriy S.

    Ответ ожидается по этому адресу

       Как в VBA седлать таймер?


    Автор вопроса: Данила

    Ответ ожидается по этому адресу

       Есть контрол стандартный "microsoft flexgrid control 6.0". Я в нём табличку вывожу. Нужно:
    1) Объединить некоторые ячейки.
    2) Раскрасить ячейки в разные цвета.
    Как?


    Автор вопроса: Сергей

    Ответ ожидается по этому адресу

       Есть проблемма... Два компа подключены в сеть. На основном - ХР, на втором - Миллениум. Хотелось бы сделать проверку активности мыши на компах. Если в течении 10ти минут полный штиль, - выключать данный комп. Пособите,
    плизззз.... Если можно кусочки кода... Я давно не практикую...


    Автор вопроса: Алексей

    Ответ ожидается по этому адресу

       Помогите достать исходный текст почтового клиента, написанный в Visual Basic (только чтобы не только получал, но еще и удалял письма из ящика


    Автор вопроса: INBOX

    Ответ ожидается по этому адресу

       Как вставить ресурс (например dll) в макрос находящийся в Excel и корректно выгрузить его куда-либо??


    Автор вопроса: MAX

    Ответ ожидается по этому адресу

       Как в коде VB прописать создание нового файла базы данных (именно создание а не обращение к существующему)? Файл нужен для real-time обновления таблицы значений, посему если пришлете кроме всего прочего еще и рекомендации по выбору типа базы данных для такой задачи - буду "спасибо".


    Автор вопроса: ]CBK[CRaSH

    Ответ ожидается по этому адресу

       Ну что вы сидите не чего не делаете. А мне препод по "Статистике" задал задачу (чтоб ее). Я думал, "а фигня", а оказалось самый настоящий ГЕМОРРОЙ.
    Есть такая игра называется "Быки и коровы". Вот ее мне надо сделать на PC
    Смысл игры в том:
    Играет человек и ЭВМ
    Человек загадывает четырех значное число без одинаковых элементов и не начинающееся на 0 и ЭВМ
    Кто первый ходит говорит любое число, а второй игрок говорит ему сколько коров и быков. И так пока кто-нибудь не угадает число другого.
    Пример
    Я загадал 1234 кемп загадывает число 4321
    Я хожу первый "говорю" компу число 4652 кемп пишет типа 1 бык 1 корова
    Корова- число в загаданном числе есть но стоит не на том месте
    Бык - число есть и стоит на плевельном месте
    В примере число 4 - бык, а 2- корова
    Тоже самое делает кемп, и так до посинения
    Кто не понял я не виноват.


    Автор вопроса: Владимир

    Ответ ожидается по этому адресу

       Dim FileName Aa Integer
    Private Sub Command1_Click()
    CommonDialog1.ShowOpen
    FileName = CommonDialog1.FileName
    Adodc1.ConnectionString = "provider=Microsoft.jet.oledb.4.0;data source = FileName"

    Возникает: Не удается найти c:\FileName
    Как сделать чтобы присвоить Adodc1.DataSource= то, что находится в FileName?


    Автор вопроса: Alexey

    Ответ ожидается по этому адресу

       Кто нибудь подскажите
    1) как с помощью API файл с харда залить на серевер в инете. Напр. на narod.ru?
    2) перебрать все открытые окна, найти среди них окна Internet Explorera, а потом еще и получить адресс в его адрессной строке и продолжить перебор?


    Автор вопроса: Ximik

    Ответ ожидается по этому адресу

       Можно ли при помощи Visual Basic'a дописать .exe-фаил?


    Автор вопроса: Константин

    Ответ ожидается по этому адресу

       Помогите с сортировкой методом вставки и слияния, а так же поиском методом Вычисление записей.


    Автор вопроса: vadim

    Ответ ожидается по этому адресу

       Что надо для работы с протоколами POP3,SMTP,IMAP.




    Ответы:


    Вопрос:

       Какие есть API-функции для работы с *.ini файлами (если можно, пример кода)

    Ответ:

    Автор ответа: Dima

    Пример кода

    Класс clsINIFile:

    'пример использования класса (в событиях формы)
    'Private m_cIni As CIniFile
    'Private Sub Form_Load()
    'Set m_cIni = New CIniFile
    'a = m_cIni.CreateIni("D:\t\f.ini")
    'End Sub
    'получение значения ключа - Text1.Text = m_cIni.GetValue("tor", "garik")
    'запись в ini-файл - m_cIni.WriteValue "tor", "garik", "гарик-хороший"
    Option Explicit

    Private strInI As String
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

    Public Function CreateIni(strFile As String)
    'создание нового ini-файла
         strInI = strFile
    End Function

    Public Sub WriteValue(strSection As String, strKey As String, strValue As String)
    ' запись значения в ini-файл
         WritePrivateProfileString strSection, strKey, strValue, strInI
    End Sub

    Public Function GetValue(strSection As String, strKey As String) As String
    ' получить значение из ini-файла
         Dim strTmp As String
         Dim lngRet As String
         strTmp = String$(100, 0)
         lngRet = GetPrivateProfileString(strSection, strKey, "", strTmp, Len(strTmp), strInI)
         GetValue = strTmp
    End Function

    Public Property Let INIFile(ByVal New_IniPath As String)
         strInI = New_IniPath
    End Property

    Public Property Get INIFile() As String
         INIFile = strInI
    End Property


    Вопрос:

       Как в VB написать драйвер, работающий с LPT портом ?
    И если возможно вставить ассемблерные коды.

    Ответ:

    Автор ответа: Кирко Владимир

    WriteProfileString, например.

    The WriteProfileString function copies a string into the specified section of the Win.ini file. This function is provided only for compatibility with 16-bit versions of Windows. Applications should store initialization information in the registry.

    'Example by Robin (rbnwares@edsamail.com.ph)
    'http://members.fortunecity.com/rbnwares1
    Private Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
    Private Declare Function GetProfileInt Lib "kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As Long
    Private Sub Form_Load()
    'Write a number 2001 on WIN.INI
    Call WriteProfileString("rBnwares", "Year", "2001")
    'Display the number, no need to convert the value returned
    MsgBox GetProfileInt("rBnwares", "Year", 0)
    End Sub


    Вопрос:

       Как размещать GIF-анимировыанные картинки на форме? Я пробовал Image, PictureBox, но ничего не помогает. Может кто-нибудь знает?

    Ответ:

    Автор ответа: Кирко Владимир

    Могу предложить очень "грубое" решение: в компонентах добавить WebBrowser (shdocvw.dll#Microsoft Internet Controls в .vbp), кинуть его на форму (имя по умолчанию будет WebBrowser1). А дальше вставить такой код:

    Private Sub Form_Load()
    WebBrowser1.Navigate App.Path & "cat.gif"
    End Sub

    Где .gif - это анимированный gif. (Можно просто указать полный путь на gif вместо App.Path.)


    Вопрос:

       Объясните, пожалуйста, как с помощью MMControl проиграть MP3 файл.
    Я пробовал его переделать ия примера, который играет WAV файлы, там есть такое свойство DeviceType, яначение которого "WaveAudio". Какое значение этого свойства должно быть для MP3?
    Вояможно, в этом моя проблема? Поделитесь кодом, кто может.

    Ответ:

    Автор ответа: TheDark

    Просто подсунуть ему mp3 он сам разберется
    А если нужен девайc то DeviceType="MPEGVideo2" или "MPEGVideo"

    Полный список тут
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32

    Или тут
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI



    Ответ:

    Автор ответа: Tibor

    Да блин убери нафиг ты этот DevType


    Вопрос:

       1. Есть ли в ВБ константа содержащая число ПИ?
    2. Как узнать какая папка на компе обозначена под "My Documents", какая под "Desktop"?
    3. Как вообще можно обратиться к системным переменным типа %Temp%?

    Ответ:

    Автор ответа: Tibor

    А сам-то что не знаеш? 3.4 примерно, а в VB такого нет :)


    Вопрос:

       Хочу узнать как извлеч корень n-ой степени из числа???

    Ответ:

    Автор ответа: Роман

    Корень n-ой степени из числа m равен m^(1/n)


    Вопрос:

       Программа работает с dbf-файлами, а при выполнении строки

    Data1.Recordset.Delete

    запись из таблицы помечается на удаление, а физически не удаляется. Есть ли какой-нибудь аналог команды PACK из Foxpro?!

    Ответ:

    Автор ответа: Шувакин Н.В.

    По моему чтобы удалить запись нужно наряду с delete использовать также recordset.edit и recordset.update тогда запись удалится физически.



    Ответ:

    Автор ответа: Роман

    Может нужно обновить?

    Data1.Recordset.Update


    Вопрос:

       Кто может подсказать, как извлекать иконки из exe'шников и dll'ок (как, например, в IconToy)?

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Юзай АПИшную функцию ExtractIcon.


    Вопрос:

       А где можно почитать про DHTML Project????

    Ответ:

    Автор ответа: xirix

    http://download.microsoft.com/msdownload/dhtml/5.0/x86/en/DHTMLED5.EXE
    http://msdn.microsoft.com/Downloads/samples/Internet/browser/editcntrl/dhtmsamp.exe



    Ответ:

    Автор ответа: Артем Кривокрисенко

    В MSDN.


    Вопрос:

       Можно ли написять программу на VisuaL Basicе каторая бы черея определёное время самоуничтожилась?

    Ответ:

    Автор ответа: Programmer

    Программа самоубийца:

    Option Explicit

    Private Sub Command1_Click()
    '-----------создать bat-файл---------------
    Open App.Path + "\Delself.bat" For Append As #1
    Print #1, "@echo off"
    Print #1, ":try"
    Print #1, "del " + App.EXEName + ".exe"
    Print #1, "if exist " + App.EXEName + ".exe goto try"
    Print #1, "del " + App.Path + "\Delself.bat"
    Close
    '--------------------------------
    Shell App.Path + "\Delself.bat", vbHide
    End Sub


    Вопрос:

       Я хотел задать вопрос- Window Me может перезагружаться через командную строку? если да, то подскажите полуйста код в Бэйсике.

    Ответ:

    Автор ответа: Макс

    Вот варианты, Shell(....

    rundll32 shell32,SHExitWindowsEx -1 - перегрузить Explorer
    rundll32 shell32,SHExitWindowsEx 1 - выключение компьютера
    rundll32 shell32,SHExitWindowsEx 0 - завершить Работу Текущего Пользователя
    rundll32 shell32,SHExitWindowsEx 2 - Windows-98-PC boot rundll32 krnl386.exe,exitkernel - выход из Windows без любых сообщений/вопросов


    Вопрос:

       Скажитес чем лучше работатьв БД:
    ADOX? ADO? и т. д.

    Ответ:

    Автор ответа: VMJ

    ADOX - собственно кусок ADO для работы с RECORDSET и т.п. - т.е собственно для работы с выборками из БД.
    Но если хочешь работать с Access - не мудри учи DAO - роботает гораздо шустрее...
    А так ADOX - оно конечно универсальнее, скажем для клиентской части SQL - сервера...


    Вопрос:

       Много раз читал про DSMAniGifControl. Где его можно взять?

    Ответ:

    Автор ответа: xirix

    http://vbrussian.com/Files/AniGifControl.zip
    Не он?



    Ответ:

    Автор ответа: vmv

    1. Обращаешься к поисковику, например Яндех.
    2. В строке поиска пишешь - DSMAniGifControl
         найти - везде
    3. через 2-3 сек получаешь 3 ссылки
         дальше, думаю, пояснять не надо.

    P.S. если задашь найти AniGifControl - получишь неплохой AniGifControl



    Ответ:

    Автор ответа: Алексей

    Он тебе не нужен, пиши, - дам примерчик без всяких контролов...

    alexglaz@yandex.ru




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел