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


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

Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.

Нет тем.

Рассылки Subscribe.Ru
Мир программирования на Visual BASIC 5.0 и HTML.


Рассылки Subscribe.Ru
Старые игры

Доска почёта:

Sergey Y. Tkachev
Кононенко Роман
Kirill
Sergey Sapozhnikov
Sobic

Ссылки:

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

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

       Очередной 45-ый выпуск рассылки.
    Читайте!


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




    Книги

    ADO и Visual Basic. Руководство разработчика

    В книге описано использование технологии доступа к данным (ADO) с помощью основного инструмента разработки приложений Microsoft - Visual Basic 6.0. Из книги вы узнаете, как можно исследовать источники данных при помощи окна Data View, как создавать формы для ввода и запроса данных, используя связанные элементы управления, и подсоединяться к источникам данных со сложной иерархической структурой средствами Data Environment. Далее вы изучите, как можно, используя Data Report, представлять информацию в форме, подходящей для печати, или как следует исполнять некоторые, наиболее широко распространенные задачи, связанные с обработкой данных, используя ADO внутри кода Visual Basic. В последних главах книги рассмотрены дополнительные операции, используемые в коде, в том числе формирование данных, для создания иерархических наборов записей, применение ADO в сети Internet и даже создание собственных источников данных. Чтобы более полно использовать средства ADO для извлечения информации из различных источников, в приложении к книге вы найдете справочник по языку SQL, в котором обсуждаются основы работы с оператором SQL SELECT.


    Автор: Гандерлой М.
    Издательсвто: Энтроп, Век
    Год издания: 2001
    Кол-во страниц: 336
    Стоимость: 177 р.
    Формат: 70х100/16
    Переплёт: мягкий

    Excel, VBA, Internet в экономике и финансах

    Книга является руководством по использованию Microsoft Excel, разработке офисных бизнес-приложений средствами VBA и конструированию Web-страниц на базе DHTML и VBScript. Рассматриваются приемы создания отчетной финансовой и экономической документации средствами MS Excel, способы анализа и обработки собранной информации для принятия на ее основе оптимального решения; даются ответы на вопросы, которые возникают у программиста при разработке автоматизированных и интегрированных систем с помощью VBA; описываются особенности конструирования пользовательских элементов управления ActiveX, а также написания Windows-сценариев. Большое внимание уделено принципам создания интерактивных Web-страниц, виртуальных каталогов и магазинов. Книга содержит уникальную коллекцию типичных примеров. Почти каждая глава заканчивается списком упражнений, способствующих закреплению материала


    Автор: Гарнаев А
    Издательсвто: BHV - Санкт - Петербург
    Год издания: 2001
    Кол-во страниц: 816
    Стоимость: 230 р.
    Формат: 70х100/16
    Переплёт: мягкий

    MCSD. Сертификационный экзамен 70-175. Разработка распределенных приложений на Visual Basic 6.0. Учебный курс (+ CD-ROM)

    Настоящий учебный курс рекомендован корпорацией Microsoft как официальное пособие для подготовки к экзамену 70-175 «Designing and Implementing Distributed Applications with Microsoft Visual Basic 6.0» по программе сертификации разработчиков программных решений на основе продуктов Microsoft (Microsoft Certified Solutions Developer, MCSD). Эта книга познакомит Вас с основными понятиями, концепциями и методами, необходимыми для разработок распределенных программных решений на базе Visual Basic 6.0.


    Автор: MCSD Training Kit
    Издательсвто: Русская Редакция
    Год издания: 2000
    Кол-во страниц: 400
    Стоимость: 272 р.
    Формат: 70х100/1670х100/16
    Переплёт: мягкий

    Microsoft Visual Basic 5.0

    В книге рассматривается новая пятая версия Microsoft Visual Basic - языка программирования, являющегося фактическим стандартом визуального проектирования приложений. Описываются общие черты Visual Basic, реализованные в нем концепции объектно-ориентированного программирования, среда разработки (IDE). Далее рассматривается объектно-ориентированная модель Visual Basic и доступные разработчику объектные компоненты. Подробно описываются технологии программирования на языке Visual Basic и SQL, отладка и оптимизация кода приложения, вопросы компиляции исполняемых модулей. В последующих главах освещаются практические вопросы построения приложений - работа с текстом и графикой, механизмы доступа и управления данными, работа с внешними базами данных и создание приложений клиент/сервер. Книга предназначена для широкого круга программистов, работающих в области обработки данных и информационных систем.


    Автор: Шмидт В
    Издательсвто: ABF
    Год издания: 1997
    Кол-во страниц: 688
    Стоимость: 85 р.
    Формат: 84x108/16
    Переплёт: мягкий

    Microsoft Visual Basic 6.0

    Нет описания


    Автор: Лабор В, Макарчук Д
    Издательсвто: нет данных
    Год издания: 2001
    Кол-во страниц: 160
    Стоимость: 60 р.
    Формат: 70х100/16
    Переплёт: мягкий

    Microsoft Visual Basic 6.0. Мастерская разработчика (+ CD-ROM)

    Книга состоит из 3 частей (34 главы) и предметного указателя. Написанная живо и доходчиво, она позволит освоить множество полезных приемов программирования, в том числе объектно-ориентированного, и научит, как создавать 32-разрядные приложения для Windows 95/98 и Windows NT — от экранных заставок до программ, ориентированных на Интернет. Кроме того, Вы узнаете, как расширить возможности языка за счет функций Win32 API и воспользоваться преимуществами технологии ActiveX.


    Автор: Джон Кларк Крейг, Джефф Уэбб
    Издательсвто: Русская Редакция
    Год издания: 2001
    Кол-во страниц: 720
    Стоимость: 272 р.
    Формат: 70х100/16
    Переплёт: твёрдый

    VB Script и ActiveX

    Книга предназначена для разработчиков Web - приложений на языке VBScript, желающих повысить свой профессиональный уровень и стать экспертами в этой области. В ней подробно рассказывается о новых возможностях VBScript, включая использование именованных констант, функций, переменных и коллекций, приводится вся необходимая информация о технологии ActiveX, принципах взаимодействия VBScript и Visual Basic при создании приложений, работающих на сервере. Прочитав эту книгу, вы научитесь использовать звуковые эффекты, создавать анимированную графику, строить формы для ввода данных, узнаете, как с помощью VBScript создать в Web электронный магазин и отслеживать число посетителей и деланные ими покупки. Вы даже сумеете написать увлекательную мультимедийную игру для Web.


    Автор: Скотт Палмер
    Издательсвто: Питер
    Год издания: 1999
    Кол-во страниц: 368
    Стоимость: 94 р.
    Формат: 70х100/16
    Переплёт: мягкий

    VBA 2000. Самоучитель

    В книге содержится краткий курс по использованию языка и системы VBA для Word и Excel 2000. Книга предназначена для начинающих программировать в среде Windows 95/98 с использованием в качестве базовых таких объектов Word и Excel, как документы, рабочие книги, листы и так далее. Материала книги достаточно для создания как простых макросов, помогающих автоматизировать рутинную повторяющуюся работу над документами и электронными таблицами, так и для разработки достаточно сложных приложений, обрабатывающих данные в диалоговых окнах, обеспечивающих пользователя самыми современными интерфейсными средствами.


    Автор: Кузьменко В
    Издательсвто: Бином
    Год издания: 2000
    Кол-во страниц: 416
    Стоимость: 116 р.
    Формат: 70х100/16
    Переплёт: мягкий

    Visual Basic 6 Desktop. Экзамен 70-176

    Книги серии `Экзамен – экстерном` представляют собой удобные, сжатые, хорошо структурированные конспекты для подготовки к сдаче сертификационных экзаменов на звание Microsoft Certified Solution Developer. Книга `Visual Basic 6.0 Desktop. Экзамен 70-176` содержит только действительно необходимый материал, типовые вопросы с ответами и пример экзамена. Возможно, некоторые подходы, применяемые автором, покажутся вам не совсем привычными - не удивляйтесь: это не учебник по Visual Basic; организация материала в этой книге призвана максимально облегчить задачу экзаменуемого. Учтите, что в ряде случаев экзаменационные вопросы выходят за рамки тем, отраженных в документации по Visual Basic, а иной раз правильные ответы на них даже входят в противоречие с `официальной` информацией.


    Автор: Майкл Макдоналд
    Издательсвто: Питер
    Год издания: 2001
    Кол-во страниц: 608
    Стоимость: 123 р.
    Формат: 60x90/16
    Переплёт: мягкий

    Visual Basic 6. Руководство разработчика (+ CD-ROM)

    Эта книга, написанная известным специалистом и неутомимым пропагандистом Visual Basic, представляет собой прекрасный путеводитель по одному из наиболее популярных визуальных средств разработки Windows-приложений. Подробно освещаются такие ключевые темы программирования на Visual Basic, как проектирование и использование элементов ActiveX, программирование баз данных и разработка Web-приложений. Несомненный интерес представляют главы, посвященные работе с графикой. Большое количество тщательно продуманных примеров облегчает восприятие материала. Подбор материала и стиль изложения делают издание интересным и полезным для программистов разных уровней.


    Автор: Евангелос Петрусос
    Издательсвто: BHV, Ирина, SYBEX Inc
    Год издания: 2000
    Кол-во страниц: 1072
    Стоимость: 267 р.
    Формат: 70x100/32
    Переплёт: твёрдый


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

    наверх


    Основы работы с формой

    Максимальные размеры формы при определенном разрешении экрана (в пикселях)

    Разрешение - Размеры: высота/ширина

    640x480 - 7200 / 9600

    800x600 - 9000 / 12000

    1024x768 - 11520 / 15360

    Форма без заголовка

    Если вы хотите, чтобы на форме отсутствовало поле заголовка, измените свойства формы:
    Caption = ""
    ControlBox = False

    Отцентрировать контрол на форме

    Добавьте 1 CommandButton. При нажатии на кнопку, она переместится в центр вашей формы. Все кнопки вы можете использовать любой контрол.

    Private Sub Command1_Click()
    'Replace all the 'Command1' below with the name of the control you want to center.
    Command1.Left = (Form1.Width - Command1.Width) / 2
    Command1.Top = (Form1.Height / 2 - Command1.Height)
    End Sub

    наверх


    Заблокировать кнопку X на форме

    'Вариант 1

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Const SC_CLOSE = &HF060
    Const MF_BYCOMMAND = &H0
    Public Sub DisableXbutton(ByVal frmHwnd As Long)
    Dim hMenu As Long
    hMenu = GetSystemMenu(frmHwnd, 0&)
    If hMenu Then
    Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
    DrawMenuBar (frmHwnd)
    End If
    End Sub

    Private Sub Form_Load()
    DisableXbutton (Me.hwnd)
    End Sub

    'Вариант 2

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Const MF_BYPOSITION = &H400&
    Public Sub DisableCloseButton(F As Form)
    Dim hSysMenu As Long
    hSysMenu = GetSystemMenu(F.hwnd, 0)
    RemoveMenu hSysMenu, 6, MF_BYPOSITION
    RemoveMenu hSysMenu, 5, MF_BYPOSITION
    End Sub
    Private Sub Command1_Click()
    Call DisableCloseButton(Form1)
    End Sub

    наверх


    Сделать вашу форм поверх всех

    Добавьте 2 CommandButton (под именем Command1 и Command2). Когда вы нажимаете первую кнопку, ваша форма поверх всех

    Private Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, ByVal Y%, ByVal cx%, ByVal cy%, ByVal F%) As Integer
    Const SWP_NOMOVE = 2
    Const SWP_NOSIZE = 1
    Const flags = SWP_NOMOVE Or SWP_NOSIZE
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2

    Private Sub Command1_Click()
    res = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags) 'Форма on-top
    End Sub
    Private Sub Command2_Click()
    res = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags) 'Форма non-on-top
    End Sub

    наверх


    Создать градиент-Title Bar

    Добавьте модуль в ваш проект

    'КОД ФОРМЫ

    Private Sub Form_Load()
    GradForceColors = True
    'Замените 'True' на 'False' если хотите получить горизонтальную прорисовку
    GradVerticalGradient = True
    'Установить цвет активного заголовка
    GradForcedText = vbWhite
    'Замените две установки цвета ниже для изменения цвета фона активного заголовка
    GradForcedFirst = &H800000
    GradForcedSecond = &H8000
    'Установить цвет неактивного заголовка
    GradForcedTextA = &HC0C0C0
    'Замените две установки цвета ниже для изменения цвета фона неактивного заголовка
    GradForcedFirstA = vbBlack
    GradForcedSecondA = vbBlue
    GradientGetCapsFont
    GradientForm Me
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    GradientReleaseForm Me
    End Sub

    'КОД МОДУЛЯ

    Public GradForceColors As Boolean
    Public GradVerticalGradient As Boolean
    Public GradForcedText As Long, GradForcedTextA As Long
    Public GradForcedFirst As Long, GradForcedSecond As Long
    Public GradForcedFirstA As Long, GradForcedSecondA As Long
    Dim GradhWnd As Long, GradIcon As Long
    Dim DrawDC As Long, tmpDC As Long
    Dim hRgn As Long
    Dim tmpGradFont As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Const GWL_WNDPROC = (-4)
    Private Const GWL_STYLE = (-16)
    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 Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hWnd As Long, ByVal lpString As String) As Long
    Private Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hWnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
    Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hWnd As Long, ByVal lpString As String) As Long
    Private Const LF_FACESIZE = 32
    Private Type LOGFONT
    lfHeight As Long
    lfWidth As Long
    lfEscapement As Long
    lfOrientation As Long
    lfWeight As Long
    lfItalic As Byte
    lfUnderline As Byte
    lfStrikeOut As Byte
    lfCharSet As Byte
    lfOutPrecision As Byte
    lfClipPrecision As Byte
    lfQuality As Byte
    lfPitchAndFamily As Byte
    lfFaceName(1 To LF_FACESIZE) As Byte
    End Type
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
    Private Const SPI_GETNONCLIENTMETRICS = 41
    Private Type NONCLIENTMETRICS
    cbSize As Long
    iBorderWidth As Long
    iScrollWidth As Long
    iScrollHeight As Long
    iCaptionWidth As Long
    iCaptionHeight As Long
    lfCaptionFont As LOGFONT
    iSMCaptionWidth As Long
    iSMCaptionHeight As Long
    lfSMCaptionFont As LOGFONT
    iMenuWidth As Long
    iMenuHeight As Long
    lfMenuFont As LOGFONT
    lfStatusFont As LOGFONT
    lfMessageFont As LOGFONT
    End Type
    Dim CaptionFont As LOGFONT
    Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function IsZoomed Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
    Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
    Private Const IDC_SIZENS = 32645&
    Private Const IDC_SIZEWE = 32644&
    Private Const IDC_SIZENWSE = 32642&
    Private Const IDC_SIZENESW = 32643&
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Private Const WS_BORDER = &H800000
    Private Const WS_CAPTION = &HC00000
    Private Const WS_DLGFRAME = &H400000
    Private Const WS_MINIMIZE = &H20000000
    Private Const WS_MAXIMIZE = &H1000000
    Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_OVERLAPPED = &H0&
    Private Const WS_SYSMENU = &H80000
    Private Const WS_THICKFRAME = &H40000
    Private Const WS_POPUP = &H80000000
    Private Const WS_SIZEBOX = WS_THICKFRAME
    Private Const WS_TILED = WS_OVERLAPPED
    Private Const WS_VISIBLE = &H10000000
    Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function OffsetClipRgn Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal Y As Long) As Long
    Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal Y As Long) As Long
    Private Declare Function DrawIconEx Lib "user32" (ByVal hDC As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
    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 Const DT_SINGLELINE = &H20
    Private Const DT_VCENTER = &H4
    Private Const DT_END_ELLIPSIS = &H8000&
    Private Declare Function SelectClipRgn Lib "gdi32" (ByVal hDC As Long, ByVal hRgn As Long) As Long
    Private Declare Function GetClipRgn Lib "gdi32" (ByVal hDC As Long, ByVal hRgn As Long) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject 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 GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
    Private Const COLOR_ACTIVECAPTION = 2
    Private Const COLOR_CAPTIONTEXT = 9
    Private Const COLOR_INACTIVECAPTION = 3
    Private Const COLOR_INACTIVECAPTIONTEXT = 19
    Private Declare Function SetBkMode Lib "gdi32" (ByVal hDC As Long, ByVal nBkMode As Long) As Long
    Private Const TRANSPARENT = 1
    Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Private Const SM_CXBORDER = 5
    Private Const SM_CXDLGFRAME = 7
    Private Const SM_CXFRAME = 32
    Private Const SM_CXICON = 11
    Private Const SM_CXSMSIZE = 30
    Private Const SM_CYBORDER = 6
    Private Const SM_CYCAPTION = 4
    Private Const SM_CYDLGFRAME = 8
    Private Const SM_CYFRAME = 33
    Private Const SM_CYICON = 12
    Private Const SM_CYMENU = 15
    Private Const SM_CYSMSIZE = 31
    Private Declare Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
    Private Declare Function DeleteDC 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 CreateRectRgnIndirect Lib "gdi32" (lpRect As RECT) As Long
    Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function ExcludeClipRect Lib "gdi32" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
    Private Declare Function DrawFrameControl Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal un1 As Long, ByVal un2 As Long) As Long
    Private Const DFC_CAPTION = 1
    Private Const DFCS_CAPTIONRESTORE = &H3
    Private Const DFCS_CAPTIONMIN = &H1
    Private Const DFCS_CAPTIONMAX = &H2
    Private Const DFCS_CAPTIONHELP = &H4
    Private Const DFCS_CAPTIONCLOSE = &H0
    Private Const DFCS_INACTIVE = &H100
    Private Const WM_SIZE = &H5
    Private Const WM_SETCURSOR = &H20
    Private Const WM_GETICON = &H7F
    Private Const WM_SETICON = &H80
    Private Const WM_NCACTIVATE = &H86
    Private Const WM_MDIACTIVATE = &H222
    Private Const WM_KILLFOCUS = &H8
    Private Const WM_MOUSEACTIVATE = &H21
    Private Const WM_MDIGETACTIVE = &H229
    Private Const MA_ACTIVATE = 1
    Private Const WM_SETTEXT = &HC
    Private Const WM_NCPAINT = &H85
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const WM_NCRBUTTONDOWN = &HA4
    Private Const WM_SYSCOMMAND = &H112
    Private Const WM_INITMENUPOPUP = &H117
    Private Const SC_MOUSEMENU = &HF090&
    Private Const SC_MOVE = &HF010&
    Private Const HTCAPTION = 2
    Private Const HTSYSMENU = 3
    Private Const HTLEFT = 10
    Private Const HTRIGHT = 11
    Private Const HTTOP = 12
    Private Const HTTOPLEFT = 13
    Private Const HTTOPRIGHT = 14
    Private Const HTBOTTOM = 15
    Private Const HTBOTTOMLEFT = 16
    Private Const HTBOTTOMRIGHT = 17
    Private Function LoWord(LongIn As Long) As Integer
    If (LongIn And &HFFFF&) > &H7FFF Then
    LoWord = (LongIn And &HFFFF&) - &H10000
    Else
    LoWord = LongIn And &HFFFF&
    End If
    End Function
    Private Sub GetColors(IsActive As Boolean, LColor As Long, RColor As Long)
    If IsActive Then
    If GradForceColors Then
    LColor = GradForcedFirst
    RColor = GradForcedSecond
    Else
    LColor = vbBlack
    RColor = GetSysColor(COLOR_ACTIVECAPTION)
    End If
    Else
    If GradForceColors Then
    LColor = GradForcedFirstA
    RColor = GradForcedSecondA
    Else
    LColor = vbBlack
    RColor = GetSysColor(COLOR_INACTIVECAPTION)
    End If
    End If
    End Sub

    Public Sub GradientGetCapsFont()
    Dim NCM As NONCLIENTMETRICS
    Dim lfNew As LOGFONT
    NCM.cbSize = Len(NCM)
    Call SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, NCM, 0)
    CaptionFont = NCM.lfCaptionFont
    End Sub
    Private Sub GetCaptionRect(hWnd As Long, rct As RECT)
    Dim XBorder As Long
    Dim fStyle As Long
    Dim YHeight As Long
    YHeight = GetSystemMetrics(SM_CYCAPTION)
    fStyle = GetWindowLong(hWnd, GWL_STYLE)
    Select Case fStyle And &H80
    Case &H80
    XBorder = GetSystemMetrics(SM_CXDLGFRAME)
    Case Else
    XBorder = GetSystemMetrics(SM_CXFRAME)
    End Select
    rct.Left = XBorder
    rct.Right = XBorder
    rct.Top = XBorder
    rct.Bottom = rct.Top + YHeight - 1
    End Sub
    Private Sub GradateColors(Colors() As Long, ByVal Color1 As Long, ByVal Color2 As Long)
    Dim i As Long
    Dim dblR As Double, dblG As Double, dblB As Double
    Dim addR As Double, addG As Double, addB As Double
    Dim bckR As Double, bckG As Double, bckB As Double
    dblR = CDbl(Color1 And &HFF)
    dblG = CDbl(Color1 And &HFF00&) / 255
    dblB = CDbl(Color1 And &HFF0000) / &HFF00&
    bckR = CDbl(Color2 And &HFF&)
    bckG = CDbl(Color2 And &HFF00&) / 255
    bckB = CDbl(Color2 And &HFF0000) / &HFF00&
    addR = (bckR - dblR) / UBound(Colors)
    addG = (bckG - dblG) / UBound(Colors)
    addB = (bckB - dblB) / UBound(Colors)
    For i = 0 To UBound(Colors)
    dblR = dblR + addR
    dblG = dblG + addG
    dblB = dblB + addB
    If dblR > 255 Then dblR = 255
    If dblG > 255 Then dblG = 255
    If dblB > 255 Then dblB = 255
    If dblR < 0 Then dblR = 0
    If dblG < 0 Then dblG = 0
    If dblG < 0 Then dblB = 0
    Colors(i) = RGB(dblR, dblG, dblB)
    Next
    End Sub
    Private Function DrawGradient(ByVal Color1 As Long, ByVal Color2 As Long) As Long
    Dim i As Long
    Dim DestWidth As Long, DestHeight As Long
    Dim StartPnt As Long, EndPnt As Long
    Dim PixelStep As Long, XBorder As Long
    Dim WndRect As RECT
    Dim OldFont As Long
    Dim fStyle As Long, fText As String
    Dim SMSize As Long, SMSizeY As Long
    On Error Resume Next
    SMSize = GetSystemMetrics(SM_CXSMSIZE)
    SMSizeY = GetSystemMetrics(SM_CYSMSIZE)
    GetWindowRect GradhWnd, WndRect
    With WndRect
    DestWidth = .Right - .Left
    End With
    DestHeight = GetSystemMetrics(SM_CYCAPTION)
    fText = Space$(255)
    Call GetWindowText(GradhWnd, fText, 255)
    fText = Trim$(fText)
    fStyle = GetWindowLong(GradhWnd, GWL_STYLE)
    Select Case fStyle And &H80
    Case &H80
    XBorder = GetSystemMetrics(SM_CXDLGFRAME)
    DestWidth = (DestWidth - XBorder)
    Case Else
    XBorder = GetSystemMetrics(SM_CXFRAME)
    DestWidth = DestWidth - XBorder
    End Select
    StartPnt = XBorder
    EndPnt = XBorder + DestWidth - 4
    Dim rct As RECT
    Dim hBr As Long
    With rct
    If Not GradVerticalGradient Then
    PixelStep = DestWidth \ 8
    ReDim Colors(PixelStep) As Long
    GradateColors Colors(), Color1, Color2
    .Top = XBorder
    .Left = XBorder
    .Right = XBorder + (DestWidth \ PixelStep)
    .Bottom = (XBorder + DestHeight - 1)
    If (fStyle And &H80) = &H80 Then EndPnt = EndPnt + 1
    For i = 0 To PixelStep - 1
    hBr = CreateSolidBrush(Colors(i))
    FillRect DrawDC, rct, hBr
    DeleteObject hBr
    OffsetRect rct, (DestWidth \ PixelStep), 0
    If i = PixelStep - 2 Then .Right = EndPnt
    Next
    Else
    PixelStep = DestHeight \ 1
    ReDim Colors(PixelStep) As Long
    GradateColors Colors(), Color2, Color1
    .Top = XBorder
    .Left = XBorder
    If (fStyle And &H80) = &H80 Then
    .Right = (XBorder * 2) + DestWidth + 2
    Else
    .Right = (XBorder * 2) + DestWidth
    End If
    .Bottom = XBorder + (DestHeight \ PixelStep)
    For i = 0 To PixelStep - 1
    hBr = CreateSolidBrush(Colors(i))
    FillRect DrawDC, rct, hBr
    DeleteObject hBr
    OffsetRect rct, 0, (DestHeight \ PixelStep)
    If i = PixelStep - 2 Then .Bottom = XBorder + (DestHeight - 1)
    .Bottom = XBorder + (DestHeight - 1)
    Next
    End If
    .Top = XBorder
    If GradIcon <> 0 Then
    .Left = XBorder + SMSize + 2
    DrawIconEx DrawDC, XBorder + 1, XBorder + 1, GradIcon, SMSize - 2, SMSize - 2, ByVal 0&, ByVal 0&, 2
    Else
    .Left = XBorder
    End If
    tmpGradFont = CreateFontIndirect(CaptionFont)
    OldFont = SelectObject(DrawDC, tmpGradFont)
    SetBkMode DrawDC, TRANSPARENT
    If GradForceColors Then
    If Color1 = GradForcedFirst Then
    SetTextColor DrawDC, GradForcedText
    Else
    SetTextColor DrawDC, GradForcedTextA
    End If
    Else
    If Color2 = GetSysColor(COLOR_ACTIVECAPTION) Then
    SetTextColor DrawDC, GetSysColor(COLOR_CAPTIONTEXT)
    Else
    SetTextColor DrawDC, GetSysColor(COLOR_INACTIVECAPTIONTEXT)
    End If
    End If
    .Left = .Left + 2
    .Right = .Right - 10
    DrawText DrawDC, fText, Len(fText) - 1, rct, DT_SINGLELINE Or DT_END_ELLIPSIS Or DT_VCENTER
    SelectObject DrawDC, OldFont
    DeleteObject tmpGradFont
    tmpGradFont = 0
    Dim frct As RECT
    If (fStyle And WS_SYSMENU) = WS_SYSMENU Then
    Dim CurMaxPic As Long
    If IsZoomed(GradhWnd) Then
    CurMaxPic = DFCS_CAPTIONRESTORE
    Else
    CurMaxPic = DFCS_CAPTIONMAX
    End If
    With frct
    .Right = DestWidth - 2
    .Left = .Right - SMSize + 2
    .Top = XBorder + 2
    .Bottom = .Top + (DestHeight - 5)
    End With
    DrawFrameControl DrawDC, frct, DFC_CAPTION, DFCS_CAPTIONCLOSE
    OffsetRect frct, -(SMSize), 0
    If (fStyle And WS_MAXIMIZEBOX) = WS_MAXIMIZEBOX And (fStyle And WS_MINIMIZEBOX) = WS_MINIMIZEBOX Then
    DrawFrameControl DrawDC, frct, DFC_CAPTION, CurMaxPic
    OffsetRect frct, -(SMSize) + 2, 0
    DrawFrameControl DrawDC, frct, DFC_CAPTION, DFCS_CAPTIONMIN
    ElseIf (fStyle And WS_MAXIMIZEBOX) = WS_MAXIMIZEBOX Then
    DrawFrameControl DrawDC, frct, DFC_CAPTION, CurMaxPic
    OffsetRect frct, -(SMSize) + 2, 0
    DrawFrameControl DrawDC, frct, DFC_CAPTION, DFCS_CAPTIONMIN Or DFCS_INACTIVE
    ElseIf (fStyle And WS_MINIMIZEBOX) = WS_MINIMIZEBOX Then
    DrawFrameControl DrawDC, frct, DFC_CAPTION, CurMaxPic Or DFCS_INACTIVE
    OffsetRect frct, -(SMSize) + 2, 0
    DrawFrameControl DrawDC, frct, DFC_CAPTION, DFCS_CAPTIONMIN
    End If
    End If
    .Left = XBorder
    .Right = .Right + 12
    If tmpDC <> 0 Then
    BitBlt tmpDC, .Left, .Top, .Right - .Left - 10, .Bottom - .Top, DrawDC, .Left, .Top, vbSrcCopy
    ExcludeClipRect tmpDC, XBorder, XBorder, DestWidth, XBorder(DestHeight - 1)
    End If
    End With
    End Function
    Public Function GradientCallback(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim OldGradProc As Long
    Dim OldBMP As Long, NewBMP As Long
    Dim rcWnd As RECT
    Dim tmpFrm As Form
    Dim tmpCol1 As Long, tmpCol2 As Long
    Static GettingIcon As Boolean
    GradhWnd = hWnd
    OldGradProc = GetProp(GradhWnd, "OldMeProc")
    If Not GettingIcon Then
    GettingIcon = True
    GradIcon = SendMessage(hWnd, WM_GETICON, 0, ByVal 0&)
    GettingIcon = False
    End If
    Select Case wMsg
    Case WM_NCACTIVATE, WM_MDIACTIVATE, WM_KILLFOCUS, WM_MOUSEACTIVATE
    GetWindowRect GradhWnd, rcWnd
    tmpDC = GetWindowDC(GradhWnd)
    DrawDC = CreateCompatibleDC(tmpDC)
    NewBMP = CreateCompatibleBitmap(tmpDC, rcWnd.Right - rcWnd.Left, 50)
    OldBMP = SelectObject(DrawDC, NewBMP)
    With rcWnd
    hRgn = CreateRectRgn(.Left, .Top, .Right, .Bottom)
    SelectClipRgn tmpDC, hRgn
    OffsetClipRgn tmpDC, -.Left, -.Top
    End With
    If wMsg = WM_KILLFOCUS And GetParent(GradhWnd) <> 0 Then
    GetColors False, tmpCol1, tmpCol2
    ElseIf wMsg = WM_NCACTIVATE And wParam And _
    (GetParent(GradhWnd) = 0) Then
    GetColors True, tmpCol1, tmpCol2
    ElseIf wMsg = WM_NCACTIVATE And wParam = 0 And (GetParent(GradhWnd) = 0) Then
    GetColors False, tmpCol1, tmpCol2
    ElseIf wParam = GradhWnd And GetParent(GradhWnd) <> 0 Then
    GetColors False, tmpCol1, tmpCol2
    ElseIf SendMessage(GetParent(GradhWnd), WM_MDIGETACTIVE, 0, 0) = GradhWnd Then
    GetColors True, tmpCol1, tmpCol2
    ElseIf GetActiveWindow() = GradhWnd Then
    GetColors True, tmpCol1, tmpCol2
    Else
    GetColors False, tmpCol1, tmpCol2
    End If
    DrawGradient tmpCol1, tmpCol2
    SelectObject DrawDC, OldBMP
    DeleteObject NewBMP
    DeleteDC DrawDC
    OffsetClipRgn tmpDC, rcWnd.Left, rcWnd.Top
    GetClipRgn tmpDC, hRgn
    If wMsg = WM_MOUSEACTIVATE Then
    GradientCallback = MA_ACTIVATE
    Else
    GradientCallback = 1
    End If
    ReleaseDC GradhWnd, tmpDC
    DeleteObject hRgn
    tmpDC = 0
    Exit Function
    Case WM_SETTEXT, WM_NCPAINT, WM_NCLBUTTONDOWN, _
    WM_NCRBUTTONDOWN, WM_SYSCOMMAND, WM_INITMENUPOPUP
    GetWindowRect GradhWnd, rcWnd
    tmpDC = GetWindowDC(GradhWnd)
    DrawDC = CreateCompatibleDC(tmpDC)
    NewBMP = CreateCompatibleBitmap(tmpDC, rcWnd.Right - rcWnd.Left, 50)
    OldBMP = SelectObject(DrawDC, NewBMP)
    With rcWnd
    hRgn = CreateRectRgn(.Left, .Top, .Right, .Bottom)
    SelectClipRgn tmpDC, hRgn
    OffsetClipRgn tmpDC, -.Left, -.Top
    End With
    If (GetActiveWindow() = GradhWnd) Then
    GetColors True, tmpCol1, tmpCol2
    ElseIf SendMessage(GetParent(GradhWnd), WM_MDIGETACTIVE, 0, 0) = GradhWnd Then
    GetColors True, tmpCol1, tmpCol2
    Else
    GetColors False, tmpCol1, tmpCol2
    End If
    DrawGradient tmpCol1, tmpCol2
    SelectObject DrawDC, OldBMP
    DeleteObject NewBMP
    DeleteDC DrawDC
    OffsetClipRgn tmpDC, rcWnd.Left, rcWnd.Top
    GetClipRgn tmpDC, hRgn
    GradientCallback = CallWindowProc(OldGradProc, hWnd, WM_NCPAINT, hRgn, lParam)
    ReleaseDC GradhWnd, tmpDC
    DeleteObject hRgn
    tmpDC = 0
    If wMsg = (WM_NCLBUTTONDOWN And wParam <> HTSYSMENU And wParam <> HTCAPTION) Or wMsg = _
    (WM_SYSCOMMAND And Not (wParam = SC_MOUSEMENU)) Then
    GetCaptionRect GradhWnd, rcWnd
    ExcludeClipRect tmpDC, rcWnd.Left, rcWnd.Top, rcWnd.Right, rcWnd.Bottom
    ElseIf wMsg = WM_NCLBUTTONDOWN And wParam = HTCAPTION Then
    If IsZoomed(GradhWnd) = 0 Then
    GradientCallback = SendMessage(GradhWnd, WM_SYSCOMMAND, SC_MOVE, ByVal 0&)
    End If
    Exit Function
    Else
    Exit Function
    End If
    Case WM_SIZE
    If hWnd = GradhWnd Then
    SendMessage GradhWnd, WM_NCPAINT, 0, 0
    End If
    Case WM_SETCURSOR
    Select Case LoWord(lParam)
    Case HTTOP, HTBOTTOM
    SetCursor LoadCursor(ByVal 0&, IDC_SIZENS)
    Case HTLEFT, HTRIGHT
    SetCursor LoadCursor(ByVal 0&, IDC_SIZEWE)
    Case HTTOPLEFT, HTBOTTOMRIGHT
    SetCursor LoadCursor(ByVal 0&, IDC_SIZENWSE)
    Case HTTOPRIGHT, HTBOTTOMLEFT
    SetCursor LoadCursor(ByVal 0&, IDC_SIZENESW)
    Case Else
    GoTo JustCallBack
    End Select
    GradientCallback = 1
    Exit Function
    End Select
    JustCallBack:
    GradientCallback = CallWindowProc(OldGradProc, hWnd, wMsg, wParam, lParam)
    End Function
    Public Sub GradientForm(frm As Form)
    Dim tmpProc As Long
    tmpProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf GradientCallback)
    SetProp frm.hWnd, "OldMeProc", tmpProc
    End Sub
    Public Sub GradientReleaseForm(frm As Form)
    Dim tmpProc As Long
    tmpProc = GetProp(frm.hWnd, "OldMeProc")
    RemoveProp frm.hWnd, "OldMeProc"
    If tmpProc = 0 Then Exit Sub
    SetWindowLong frm.hWnd, GWL_WNDPROC, tmpProc
    End Sub

    наверх


    Спрятать/показать панель заголовка

    Добавьте 2 CommandButton на форму

    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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Const GWL_STYLE = (-16)
    Private Const WS_CAPTION = &HC00000
    Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_SYSMENU = &H80000
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Enum ESetWindowPosStyles
    SWP_SHOWWINDOW = &H40
    SWP_HIDEWINDOW = &H80
    SWP_FRAMECHANGED = &H20
    SWP_NOACTIVATE = &H10
    SWP_NOCOPYBITS = &H100
    SWP_NOMOVE = &H2
    SWP_NOOWNERZORDER = &H200
    SWP_NOREDRAW = &H8
    SWP_NOREPOSITION = SWP_NOOWNERZORDER
    SWP_NOSIZE = &H1
    SWP_NOZORDER = &H4
    SWP_DRAWFRAME = SWP_FRAMECHANGED
    HWND_NOTOPMOST = -2
    End Enum
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    Private Function ShowTitleBar(ByVal bState As Boolean)
    Dim lStyle As Long
    Dim tR As RECT
    GetWindowRect Me.hwnd, tR
    lStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
    If (bState) Then
    Me.Caption = Me.Tag
    If Me.ControlBox Then
    lStyle = lStyle Or WS_SYSMENU
    End If
    If Me.MaxButton Then
    lStyle = lStyle Or WS_MAXIMIZEBOX
    End If
    If Me.MinButton Then
    lStyle = lStyle Or WS_MINIMIZEBOX
    End If
    If Me.Caption = "" Then
    lStyle = lStyle Or WS_CAPTION
    End If
    Else
    Me.Tag = Me.Caption
    Me.Caption = ""
    lStyle = lStyle And Not WS_SYSMENU
    lStyle = lStyle And Not WS_MAXIMIZEBOX
    lStyle = lStyle And Not WS_MINIMIZEBOX
    lStyle = lStyle And Not WS_CAPTION
    End If
    SetWindowLong Me.hwnd, GWL_STYLE, lStyle
    SetWindowPos Me.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED
    Me.Refresh
    End Function
    Private Sub Command1_Click()
    ShowTitleBar False
    End Sub
    Private Sub Command2_Click()
    ShowTitleBar True
    End Sub

    наверх


    Определить, загружена ли форма

    Добавьте 2 CommandButton и другую форму (Form 2)

    Function FormLoadedByName(FormName As String) As Boolean
    Dim i As Integer, fnamelc As String
    fnamelc = LCase$(FormName)
    FormLoadedByName = False
    For i = 0 To Forms.Count - 1
    If LCase$(Forms(i).Name) = fnamelc Then
    FormLoadedByName = True
    Exit Function
    End If
    Next
    End Function
    Private Sub Command1_Click()
    'Замените 'Form2' именем формы, про которую хотите знать...
    If FormLoadedByName("Form2") = True Then
    MsgBox "Форма загружена"
    Else
    MsgBox "Форма не загружена"
    End If
    End Sub
    Private Sub Command2_Click()
    Load Form2
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


    Автор вопроса:
    P@Ssword

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

       Может, у кого есть описания протоколов SMTP и POP3? Скиньте мне, plz.


    Автор вопроса: Иван

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

       Я яапускаю программу EXE, сделанную во Flash таким обраяом:

    Shell App.Path & "\" & "Times.exe", vbMaximizedFocus

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


    Автор вопроса: Саша

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

       Как скопировать текст находящейся вне формы.


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

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

       Как из Excel сохранить данные в *.dbf файл, но не лист целеком (сохранить как...), а выборочно


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

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

       Как можно непосредственно из программы отсылать письма без почтового клиента?


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

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

       Кто нибудь сталкивался с такой проблемой: если создается соединение между 2 компьютерами через Winsock, а потом закрыть соединение то неудастся соединиться заново пока не закроешь и не откроешь программу ?


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

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

       Плиз кто нибудь киньте на мыло программу перекодировщик VB в VC. Очень нужно.


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

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

       Как средствами VBA for Excel 97 получить список файлов в папке и каким обрпзом их всех последовательно пооткрывать (все *.xls)?


    Автор вопроса: Ревягин_Алексей

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

       Вписал этот код:

    Option Explicit
    Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
    Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
    Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
    Private Const MF_BITMAP = &H4&
    Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
    Private Declare Function GetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
    Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
    Private Type LOGBRUSH
    lbStyle As Long
    lbColor As Long
    lbHatch As Long
    End Type

    Private Type tagMENUINFO
    cbSize As Long
    fMask As Long
    dwStyle As Long
    cyMax As Long
    hbrBack As Long
    dwContextHelpID As Long
    dwMenuData As Long
    End Type

    Private Const BS_SOLID = 0
    Private Const MIM_APPLYTOSUBMENUS = &H80000000
    Private Const MIM_BACKGROUND = &H2

    Private Sub Form_Load()
    Dim ret As Long
    Dim hMenu As Long
    Dim hBrush As Long
    Dim lbBrushInfo As LOGBRUSH
    Dim miMenuInfo As tagMENUINFO
    lbBrushInfo.lbStyle = BS_SOLID
    lbBrushInfo.lbColor = <цвет>
    lbBrushInfo.lbHatch = 0
    hBrush = CreateBrushIndirect(lbBrushInfo)
    hMenu = GetMenu(Me.hwnd)
    miMenuInfo.cbSize = Len(miMenuInfo)
    ret = GetMenuInfo(hMenu, miMenuInfo)
    miMenuInfo.fMask = MIM_APPLYTOSUBMENUS Or MIM_BACKGROUND
    miMenuInfo.hbrBack = hBrush
    ret = SetMenuInfo(hMenu, miMenuInfo)
    SetMenuItemBitmaps hMenu, GetMenuItemID(GetSubMenu(hMenu, 0), 0), MF_BITMAP, LoadResPicture(101, vbResBitmap), LoadResPicture(101, vbResBitmap)
    SetMenuItemBitmaps hMenu, GetMenuItemID(GetSubMenu(hMenu, 0), 1), MF_BITMAP, LoadResPicture(104, vbResBitmap), LoadResPicture(104, vbResBitmap)
    SetMenuItemBitmaps hMenu, GetMenuItemID(GetSubMenu(hMenu, 0), 2), MF_BITMAP, LoadResPicture(107, vbResBitmap), LoadResPicture(107, vbResBitmap)
    End Sub

    1) Почему при каждом вызове PopupMenu или просто при нажатии на кнопку меню появляются разные картинки, имеющиеся у меня на форме, а не которые надо(из файла ресурсов либо с формы(например:

    SetMenuItemBitmaps hMenu, GetMenuItemID(GetSubMenu(hMenu, 0), 2), MF_BITMAP,Picture1(0).Picture),Picture1(0).Picture))).

    2)как из файла ресурсов читать: GIF'ы, JPG, EXE? (BMP в 5 раз больше по размеру чем соответстующий ему GIF или JPG)


    Автор вопроса: rul@langepas.wsnet.ru

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

       Подскажите пожалуйста, как в VB 3.0 использовать WinSoket. А лучше отошлите (если есть) исходничок.


    Автор вопроса: Андрей

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

       Пишу прогу на visual basic 5.0, сталкнулся с такой проблемой, как при нажатии на кнопку раявернуть окно выбора документов и нажатии на соответсвующий документ открыть Word.


    Автор вопроса: Андрей

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

       Народ требуется ХЕЛП, как в Visual Basic 5.0 сделать чтоб при нажатии, например кнопки Command1 открывалась программа Word. Если можно подробнее об этом.


    Автор вопроса: Саша

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

       Что такое hwnd. Что можно сделать зная hwnd чужего окна.




    Ответы:


    Вопрос:

       У меня в базе данных, в одной таблице два поля. В первом названия клипов, во втором названия файлов. Первое поле выводится на ListBox. Как сделать, чтобы при двойном нажатии на какой-либо строке в поле 1, в MediaPlayer загружался файл из соответствующего поля 2?

    Ответ:

    Автор ответа: Ревягин_Алексей

       Помести но форму объект Windows MediaPlayer и обзови его так : MP1
       Помести на форму TextBox1 с Visible=false и укажи у него меню

       Properties->DataSource=ОБЪЕКТ_КОТОРЫЙ_ПРИСОЕДИНЁН К_БД (напр, Data1)
    Properties->DataField=ИМЯ_ПОЛЯ_ГДЕ_ХРАНЯТСЯ_НАЗВАНИЯ_ФАЙЛОВ

       и впиши следующий код:

       Private Sub ListBox1_dblclick()
          'так как у тебя в поле 2 хранятся названия файлов, то
          Data1.recordset.absoluteposition=listbox1.listindex
          MP1.FileName="_ПУТЬ_ДО_ПАПКИ_С_ФАЙЛАМИ_" & textbox1.text
       end sub


    Вопрос:

       Как мне соядать SETUP не более 2Мб.
    Хочу поделиться своей ОЧЕНЬ ПРРОСТОЙ программкой, которая всего лишь соядает текстовый файл, а SETUP к нему весит от 10 до 14 Мб.
    Можно как-нибудь справиться с этим?
    Понимаю, что эта тема всех достала, но еще никто мне доступно не ответил, все как-то абстрактно.

    Ответ:

    Автор ответа: Мунгалов Андрей

    проблема в том что программы написанные на VB не работают без библиотеки исполнения а она одна для VB6 весит около 1,3 мега + если используешь какие-то ActiveX компоненты они тоже прилагаются к дистрибутиву. поэтому даже если программа делает просто 2+2 она все равно будет много места занимать. выход можно попробовать такой узнать на той машине куда будешь ставить программу, есть библиотека или нет, может ее уже с другой программой ставили. тогда можно просто один EXE файл скопировать.


    Вопрос:

       Как мне соядать SETUP не более 2Мб.
    Хочу поделиться своей ОЧЕНЬ ПРРОСТОЙ программкой, которая всего лишь соядает текстовый файл, а SETUP к нему весит от 10 до 14 Мб.
    Можно как-нибудь справиться с этим?
    Понимаю, что эта тема всех достала, но еще никто мне доступно не ответил, все как-то абстрактно.

    Ответ:

    Автор ответа: Иван

    С папки System скопируй в директорию где лежит твоя программа следующие файлы: Richtx32.ocx, Msvbvm60.dll. Вот пожалуй и всё.
    Ещё очень важно, чтобы на компе, на котором будет ставиться программа, эти файлы лежали либо в одной директории с exe, либо в папке System. Да и ещё на всякий случай замечу, что всегда тебе придётся к своим проектам ложить Msvbvm60.dll, т.к. именно он отвечает за основные элементы VB. А если используешь дополнительные библиотеки, то просто необходимо посмотреть на какой ocx он ссылается. Можно обойтись и без инсталяшки, если использовать программу Fusion, но она немного замедляет работу программы.


    Вопрос:

       Подскажите плз, как мне безоговорочно переписать существующий файл.
       Вот что у меня есть:

       excelapp.Workbooks(1).SaveAs FileName:="c:\tmp.xls", AccessMode:=xlShared

       Сейчас, если файл c:\tmp.xls есть, то задается вопрос, переписать ли поверх. Мне же надо, чтобы он это не спрашивал, а сразу, молча переписывал.

    Ответ:

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

    Чтоб не выводились предупреждения в офисных приложениях надо свойство DisplayAlerts установить в False:

    excelapp.DisplayAlerts = False
    ...
    excelapp.Workbooks(1).SaveAs FileName:="c:\tmp.xls", AccessMode:=xlShared
    ...
    excelapp.DisplayAlerts = True


    Вопрос:

       Подскажите плз, как мне безоговорочно переписать существующий файл.
       Вот что у меня есть:

       excelapp.Workbooks(1).SaveAs FileName:="c:\tmp.xls", AccessMode:=xlShared

       Сейчас, если файл c:\tmp.xls есть, то задается вопрос, переписать ли поверх. Мне же надо, чтобы он это не спрашивал, а сразу, молча переписывал.

    Ответ:

    Автор ответа: Ревягин_Алексей

       в модуле:
       Public Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long

    В процедуре перемещения

    Kill ПУТЬ_К_СТАРОМУ_ФАЙЛУ
    MoveFile ПУТЬ_К_НОВОМУ_ФАЙЛУ, ПУТЬ_К_СТАРОМУ_ФАЙЛУ


    Вопрос:

       Какие вояможности VB поддерживает VBScript? или какие не поддерживает?

    Ответ:

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

    VBScript это практечески одно и тоже, что и VB. Т.е. ты можешь без проблем код из VBScript ксопировать в VB и все будет работать. А вот наоборот сложнее из-за объектов =). Короче говоря, то, что ты можешь сделать на VB, ты можешь сделать и на VBScript, за исключением, пожалуй, работы с объектами и формами, но и там можно кое-что придумать...


    Вопрос:

       Помогите разобраться в функцией "open" чтения данных из файла. Я запутался с типом "input,output,random,binary" и присвоением. Подскажите где можно найти подробнее об этом операторе..

    Ответ:

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

    В общем функция Open служит для работы с файлами.
    Open File For Output as 1 - создает файл File, а если таковой был, то очищает его.
    Open File For Append as 1 - создает файл, но если файл существует, то открывает его и добавляет в конец запись, которую ты укажешь (Print #1 или Write #1)
    Open File For Input as 1 - открывает файл для чтения из него информации.
    Open File For Random as 1 - открывает файл для чтения\записи из\в файла типы данных, например

         Type My
             a as string*4
             b as long
         End Type
         Open File For Random as 1
         Get #1,,My
         
         В этом случае 4 байта окажется в My.a, и 4 байта (тип Long) в My.b
      
    Open File For Binary as 1 - делает с файлом то же, что и Random, но используется для двоичного доступа к файлу: например, считать байт определенным номером и т.п.


    Вопрос:

       Помогите разобраться в функцией "open" чтения данных из файла. Я запутался с типом "input,output,random,binary" и присвоением. Подскажите где можно найти подробнее об этом операторе..

    Ответ:

    Автор ответа: Filippov Anton Sergeevich

    Тут все просто. Формат такой:
    open "полное_имя_файла" for <опция> as #n
      
    open - Команда открытия файла;
      
    полное_имя_файла - полное имя файла, который требуется открыть;
      
    <опция> - для чего открывается файл:
         input - чтение данных,
         output - перезапись файла (если он не существовал, то будет создан)
         append - устанавливает счтитывающе-записывающее устройство на конец файла, для добавления данных в конец файла.
      
    #n - номер от #1 до #256. Например первый файл открывается как #1, второй как #2...
      
    После завершения операций ввода-вывода файл следует закрыть
    close #n - для закрытия файла с номером N или close для закрытия всех открытых файлов.
      
    вывод:
    input #n, "куда_выводить"
      
    #n - номер файла, из которого выводится строка "куда_выводить" - переменная, textbox, label и т.д.
      
    запись:
    print #n,"строка"
    в качестве "строки" может быть конкретная строка, переменная, текстовое поле, параметр (Например Form1.caption).


    Вопрос:

       Помогите разобраться в функцией "open" чтения данных из файла. Я запутался с типом "input,output,random,binary" и присвоением. Подскажите где можно найти подробнее об этом операторе..

    Ответ:

    Автор ответа: Ревягин_Алексей

       dim FNumber as integer

       Private Sub Command1_click()
       fnumber=freefile
       open "ПУТЬ_К_НОВОМУ_ФАЙЛУ" for output as fnumber
       print #fnumber,"СТРОКИ_В_ФАЙЛЕ"
       close fnumber
       end sub

       Private Sub Command2_click()
       fnumber=freefile
       open "ПУТЬ_К_СУЩЕСТВУЮЩЕМУ_ФАЙЛУ" for input as fnumber
       line input #fnumber, "ПЕРЕМЕННАЯ_В_КОТОРУЮ_СОХРАНЯЕТСЯ_СТРОКА"
       close fnumber
       end sub

       Private Sub Command3_Click()
       fnumber=freefile
       open "ПУТЬ_К_СУЩЕСТВУЮЩЕМУ_ФАЙЛУ" for append as fnumber
       print #fnumber, "СТРОКА_КОТОРАЯ_БУДЕТ_ДОБАВЛЕНА_В_КОНЕЦ_ФАЙЛА"
       close fnumber
       end sub


    Вопрос:

       1)Как реально прописать прогу в реестре ?
    2)Как найти в richtextbox слова какие выберешь ну там и изменить их цвет ?
    3)Как сделать так чтоб комп проверял столкнулись объекты или нет для игры очень надо ?

    Ответ:

    Автор ответа: Roman 'Devil' Yuakovlev

    2) Функция instr и дальше selstart, sellenght
    3) Проверять их координаты... или заплатить мне 1000 долларов, я буду проверять за него... Конкретнее вопрос можно?


    Вопрос:

       1)Как реально прописать прогу в реестре ?
    2)Как найти в richtextbox слова какие выберешь ну там и изменить их цвет ?
    3)Как сделать так чтоб комп проверял столкнулись объекты или нет для игры очень надо ?

    Ответ:

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

    2. Ну например ищешь в тексте слово "комп", для этого используй следующий код:
         MyWord="комп" ' Это слово которое нужно найти
         MyColor=RGB(255,0,0) ' Каким цветом выделить слово
         FindText=Instr(RichTextBox1.Text,MyWord) 'Ищет слово в тексте
         If FindText<>0 Then 'Если удалось что-то найти
             RichTextBox1.SelStart = FindText 'Начинаем помечать слово
             RichTextBox1.SelLength = Len(MyWord) 'Заканчиваем
             RichTextBox1.SelColor = MyColor 'Меняем цвет текста
             RichTextBox1.SelLength = 0 'Снимаем выделение
         End IF
    3. Если я тебя правильно понял, то посмотри на http://www.igoryksoft.narod.ru/vb/vb12.htm


    Вопрос:

       1)Как реально прописать прогу в реестре ?
    2)Как найти в richtextbox слова какие выберешь ну там и изменить их цвет ?
    3)Как сделать так чтоб комп проверял столкнулись объекты или нет для игры очень надо ?

    Ответ:

    Автор ответа: Ревягин_Алексей

    dim pos as long

    Private Function _ПОИСК_СЛОВ_(slovo as string)
    With RTFBox
         if pos=0 then
             pos = .Find(slovo, 0, Len(.Text))
         else
             pos = .Find(slovo, pos + 1, Len(.Text))
         endif
         If pos = -1 Then
             pos = 0
             i = i + 1
         Else
             .SelStart = pos
             .SelLength = Len(slovo)
             .SelColor = ЦВЕТ_КАКИМ_НАДО_ВЫДЕЛИТЬ_НАЙДЕНОЕ_СЛОВО
             .SelLength=0
         End If
    End With
    End Function


    Вопрос:

       Подскажите, как отправить готовый отчет ия Access или Exele по почте (адрес всегда один и тот же)

    Ответ:

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

    для отправки книги EXEL по Email пользуюсь функцией:

    Application.Dialogs(xlDialogSendMail).Show ("adress@yahoo.com")
      
    но при этом адрес получателя должен быть, также, записан в адресную книгу.


    Вопрос:

       Я подключаюсь к базе данных .mdb используя ADODB. Одно из полей "word" таблицы "Catalog" содержит данные типа OLE-объект. Там находятся файлы *.doc. Каким образом я смогу получить их содержимое (хотябы добраться до Object.Words.Item(#).Text)?

    Ответ:

    Автор ответа: Н. Шувалов

    Посмотри по этому адресу:
    http://vbnet.ru/faq/showtopic.asp?id=133


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

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

    наверх


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

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