На главную Наши проекты:
Журнал   ·   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.
Страницы: (10) [1] 2 3 ...  9 10 все  ( Перейти к последнему сообщению )  
> Common Controls
    Есть небольшое предложение, сделать набор классов или UserControls (хотя, более чем уверен, что он уже существует в том или ином виде), которые смогут полностью заменить ActiveX MS Common Control, дабы не возникало тем, вроде этой, а так же в целях избавить себя от перетаскивания почти 1 МБ, чтобы пользовать, к примеру, банальный ProgressBar. Если тема имеет смысл, то могу набросать еще для TabControl по прототипу PropertySheet с возможностью добавлять Frame. В качестве поддержки темы набросал класс ProgressBar'а...

    Реализовано:
    SysListView32 — ListView.ctl — Обновлено 10/12/2007
    msctls_progress32 — Progress.ctl
    SysDateTimePick32 — SysDateTimePick.ctl
    SysTabControl32 — TabStrip.ctl — Обновлено 10/12/2007
    SysTreeView32 — TreeView.ctl
    msctls_statusbar32 — StatusBar.ctl — Обновлено 10/12/2007
    SysIpAddress32 — IpAddress.ctl


    CODEBOX controls
    CodeBox.part01.rar
    CodeBox.part02.rar
    CodeBox.part03.rar
    EOF CODEBOX controls
    Сообщение отредактировано: ALXR -

    Прикреплённый файлПрикреплённый файлcommctrl.zip (171.21 Кбайт, скачиваний: 5509)
      Не можно, а нужно. Вношу лепту. Делал не я, но думаю автор нас простит.

      [Компонент помещен в общий пакет]
      Сообщение отредактировано: SCINER -
        парни, вы про клавишу Tab не забывайте.
          Ну, если очень хочется табулировать, то вот это самый оптимальный способ, как мне кажется, в случае использования классов (не UserControls). Видел где-то еще пример с вызовами OLE-ф-ций, но, по словам автора, он не ахти как работает.
          Сообщение отредактировано: ALXR -
            Полезная тема.
            Как наберется более-менее весь состав общих элементов, накопленное можно будет скинуть в кладовку.
              Цитата
              то вот это самый оптимальный способ

              да, самый простой. я тоже подложки делаю из PictureBox'ов.

              но есть проблемы: не срабатывает событие потери фокуса у "корректного" контрола при переводе фокуса сразу на апи-контрол по мыше, и плюс ко всему порядок перехода по таб становиться не корректным. для продакшена это важно.
                Насчет потери фокуса - согласен. Это минус. А вот насчет порядка перехода - так установи нужный TabIndex на PictureBox и будет корректный порядок. Во всяком случае, я обнаружил только первый недостаток. В остальном все ОК...
                Сообщение отредактировано: ALXR -
                  С потерей фокуса можно бороться.
                  Просто контрол надо размещать в UserControl'е
                  и при UserControl_EnterFocus посылать
                  ExpandedWrap disabled
                    Call SendMessage(WM_SETFOCUS, hControl, 0 , 0)
                    Модули приниматься не будут.
                    Что делть если я например хочу 2 табстрипа добавить на форму =???
                      Все очень просто. Изменил attach для наглядности. Он и сделан под класс, дабы быть ОДНИМ файлом. Единственное отличие от класса - сохранять его hWnd самому и ссылаться на него не по имени класса, а по hWnd, в остальном - полная аналогия.
                        Цитата ALXR @
                        Все очень просто. Изменил attach для наглядности. Он и сделан под класс, дабы быть ОДНИМ файлом. Единственное отличие от класса - сохранять его hWnd самому и ссылаться на него не по имени класса, а по hWnd, в остальном - полная аналогия.

                        а события как реализовать ?
                          Посылать дочерним Frame/PictureBox'ам определенные сообщения и их же обрабатывать. К примеру WM_LBUTTONDOWN с X=-1 и Y=-1, которое не может быть сгенерированно действиями пользователя. ;) Ну или этот вариант.

                          Мне больше интересно, как в модуле класса или UserControl'а организовать subclassing. Или таскать тот же модуль за собой? Это было бы лучше, если бы в VB работали директивы INCLUDE (как в QB 4.5, к примеру), иначе, я считаю, такое решение будет хуже моего, даже с обработкой событий через WM_LBUTTONDOWN.
                          Сообщение отредактировано: ALXR -
                            модуль можно написать один на все контролы.
                            хранить в нем структуру где связаны объект класса и hwnd
                            все параметры процедуры передавать на обработку классам.
                            нормальное решение.
                              у меня есть все коммон контролы... ну они все вместе так завязаны... что выдрать только один проблематично :( а таскать все за собой тоже не выход, ... хотя правда осх таскать уже не надо все в ехе
                                2 ALXR:
                                Цитата
                                А как процедуре обработки узнать, какой инстанции класса отправлять уведомление о том или ином сообщении?

                                ExpandedWrap disabled
                                  Option Explicit
                                   
                                  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _
                                  ByVal Length 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 GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, _
                                  ByVal lpString As String) As Long
                                   
                                  Private Sub Form_Load()
                                    Dim obj As Object
                                    'Записываем указатель на объект в свойства hWnd
                                    Call SetProp(Me.hwnd, "object", ObjPtr(Me))
                                    'Считываем указатель на объект из свойств hWnd
                                    Call CopyMemory(obj, GetProp(Me.hwnd, "object"), 4)
                                    'Проверка
                                    Call MsgBox(obj.hwnd)
                                    'Освобождаем указатель
                                    Call CopyMemory(obj, 0&, 4)
                                  End Sub
                                  А вообще, вот сабклассинг без модуля. В классе.
                                  Прикреплённый файлПрикреплённый файлSubclassInClass.rar (2.33 Кбайт, скачиваний: 2196)
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:
                                  Страницы: (10) [1] 2 3 ...  9 10 все


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0576 ]   [ 21 queries used ]   [ Generated: 19.03.24, 11:56 GMT ]