На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Кстати, об AddressOf.
    Код...
    ExpandedWrap disabled
      ProcPtr = Val(AddressOf ProcName)

    ...замечательно заменяет код...
    ExpandedWrap disabled
      ProcPtr = GetAddr(AddressOf ProcName)
      ' ...
      Function GetAddr(ByVal ProcAddr As Long) As Long
      GetAddr = ProcAddr
      End Function


    Предлагаю в FAQ :rolleyes:
    Сообщение отредактировано: ALXR -
      MSDN
      Цитата
      To assign a function pointer to an element in a structure, you write a wrapper function. For example, the following code creates the wrapper function FnPtrToLong, which can be used to put a function pointer in any structure:

      Function FnPtrToLong (ByVal lngFnPtr As Long) As Long
      FnPtrToLong = lngFnPtr
      End Function

      To use the function, you first declare the type, then call FnPtrToLong. You pass AddressOf plus your callback function name for the second argument.

      Dim mt as MyType
      mt.MyPtr = FnPtrToLong(AddressOf MyCallBackFunction)


      Цитата ALXR @
      Предлагаю в FAQ

      Что тут нового?
        Respect
        Цитата
        Что тут нового?
        Как бы это помягче?
          FAQ = frequently asked questions. Вопросы про AddressOf задаются нечасто и чел, дошедший до уровня пойнтеров, обычно задает нестандартные вопросы. AddressOf не место в FAQ.
            MIF
            Иными словами, в ФАК можно помещать только топики для чайников?
            Сообщение отредактировано: ANDLL -
              Цитата ALXR @
              Предлагаю в FAQ


              Распиши хоть один пример применения этого кода, можно и в FAQ.
                Хм. Ну вот такой примерчик, например:

                Навешивание заголовка диалогу выбора папок SHBrowseForFolder:
                ExpandedWrap disabled
                  Option Explicit
                  Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long
                  Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
                  Private Declare Function SendMessageA Lib "user32.dll" (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, _
                  ByVal lParam As Any) As Long
                   
                  Const WM_CREATE As Long = 1
                   
                  Private Type BROWSEINFO
                      hwndOwner      As Long
                      pIDLRoot       As Long
                      pszDisplayName As String
                      lpszTitle      As String
                      ulFlags        As Long
                      lpfnCallback   As Long
                      lParam         As Long
                      iImage         As Long
                  End Type
                   
                  Function GetFolder(ByVal hWnd As Long, ByVal sTitle As String, ByVal sCaption As String) As String
                  Dim lpIDList As Long
                  Dim sBuffer As String
                  Dim szTitle As String
                  Dim tBrowseInfo As BROWSEINFO
                          
                  With tBrowseInfo
                      .hwndOwner = hWnd                   ' Parent window
                      .lpszTitle = sTitle                 ' Title of folders list
                      .pszDisplayName = App.Title
                      .lpfnCallback = Val(AddressOf BrowseFolderCallback) ' Pointer to callback procedure
                          sCaption = StrConv(sCaption, vbFromUnicode)     ' Convert string
                          .lParam = StrPtr(sCaption)              ' Pass the caption through lParam
                  End With
                  lpIDList = SHBrowseForFolder(tBrowseInfo)
                      
                  If (lpIDList) Then
                      sBuffer = String(260, 0)
                      SHGetPathFromIDList lpIDList, sBuffer
                      If InStr(sBuffer, vbNullChar) <> 0 Then sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
                      GetFolder = sBuffer
                  End If
                  End Function
                   
                  Private Function BrowseFolderCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As _
                  Long) As Long
                  Select Case uMsg
                  Case WM_CREATE: SendMessageA hWnd, 12, 0, lParam        ' Sets our caption (pointer in lParam) to dialogbox
                  End Select
                  BrowseFolderCallback = 0
                  End Function
                Сообщение отредактировано: ALXR -
                  Done.
                    Следует однако помнить, что головастые парни из мелкософта плохого не посоветуют!
                    Потому помните, что метод ALXR почти в 4 раза медленнее, чем пример из MSDN !
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,1061 ]   [ 16 queries used ]   [ Generated: 9.07.25, 01:11 GMT ]