 Common Controls
    Common Controls
    
  |  | Наши проекты: Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту | |
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.107] | 
|   | 
 | 
 Правила раздела Visual Basic: Общие вопросы
    Правила раздела Visual Basic: Общие вопросы
   FAQ Сайта
 FAQ Сайта  FAQ Раздела
 FAQ Раздела  Кладовка
 Кладовка  Наши Исходники
 Наши Исходники  API-Guide
 API-Guide  Поиск по Разделу
 Поиск по Разделу  MSDN Library Online
 MSDN Library Online  Google
 Google SCINER,
 SCINER,  B.V.
 B.V.| Страницы: (10) [1] 2 3 ... 9 10 все ( Перейти к последнему сообщению ) | 
 Common Controls
    Common Controls
    
  |   | 
         
         
          
           Прикр. сообщ.
           #1
          
          , 
          
         
         | 
|  |  Есть небольшое предложение, сделать набор классов или 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 Прикреплённый файл  commctrl.zip (171.21 Кбайт, скачиваний: 5671) | 
| 
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         | |
|  |  Не можно, а нужно. Вношу лепту. Делал не я, но думаю автор нас простит. [Компонент помещен в общий пакет] | 
| 
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         | |
|  |  парни, вы про клавишу Tab не забывайте.   | 
|   | 
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         | 
|  |  Ну, если очень хочется табулировать, то вот это самый оптимальный способ, как мне кажется, в случае использования классов (не UserControls). Видел где-то еще пример с вызовами OLE-ф-ций, но, по словам автора, он не ахти как работает. 	  | 
|   | 
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         | 
|  |  Полезная тема. Как наберется более-менее весь состав общих элементов, накопленное можно будет скинуть в кладовку. | 
| 
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         | |
|  | Цитата  то вот это самый оптимальный способ да, самый простой. я тоже подложки делаю из PictureBox'ов. но есть проблемы: не срабатывает событие потери фокуса у "корректного" контрола при переводе фокуса сразу на апи-контрол по мыше, и плюс ко всему порядок перехода по таб становиться не корректным. для продакшена это важно. | 
|   | 
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         | 
|  |  Насчет потери фокуса - согласен. Это минус. А вот насчет порядка перехода - так установи нужный TabIndex на PictureBox и будет корректный порядок. Во всяком случае, я обнаружил только первый недостаток. В остальном все ОК... 	  | 
|   | 
         
         
          
           Сообщ.
           #7
          
          , 
          
         
         | 
|  |  С потерей фокуса можно бороться. Просто контрол надо размещать в UserControl'е и при UserControl_EnterFocus посылать   Call SendMessage(WM_SETFOCUS, hControl, 0 , 0) | 
|   | 
         
         
          
           Сообщ.
           #8
          
          , 
          
         
         | 
|  |  Модули приниматься не будут. Что делть если я например хочу 2 табстрипа добавить на форму =??? | 
|   | 
         
         
          
           Сообщ.
           #9
          
          , 
          
         
         | 
|  |  Все очень просто. Изменил attach для наглядности. Он и сделан под класс, дабы быть ОДНИМ файлом. Единственное отличие от класса - сохранять его hWnd самому и ссылаться на него не по имени класса, а по hWnd, в остальном - полная аналогия.   | 
|   | 
         
         
          
           Сообщ.
           #10
          
          , 
          
         
         | 
|  | Цитата ALXR @  Все очень просто. Изменил attach для наглядности. Он и сделан под класс, дабы быть ОДНИМ файлом. Единственное отличие от класса - сохранять его hWnd самому и ссылаться на него не по имени класса, а по hWnd, в остальном - полная аналогия. а события как реализовать ? | 
|   | 
         
         
          
           Сообщ.
           #11
          
          , 
          
         
         | 
|  |  Посылать дочерним Frame/PictureBox'ам определенные сообщения и их же обрабатывать. К примеру WM_LBUTTONDOWN с X=-1 и Y=-1, которое не может быть сгенерированно действиями пользователя.   Ну или этот вариант. Мне больше интересно, как в модуле класса или UserControl'а организовать subclassing. Или таскать тот же модуль за собой? Это было бы лучше, если бы в VB работали директивы INCLUDE (как в QB 4.5, к примеру), иначе, я считаю, такое решение будет хуже моего, даже с обработкой событий через WM_LBUTTONDOWN. | 
|   | 
         
         
          
           Сообщ.
           #12
          
          , 
          
         
         | 
|  |  модуль можно написать один на все контролы. хранить в нем структуру где связаны объект класса и hwnd все параметры процедуры передавать на обработку классам. нормальное решение. | 
| 
         
         
          
           Сообщ.
           #13
          
          , 
          
         
         | |
|  |  у меня есть все коммон контролы... ну они все вместе так завязаны... что выдрать только один проблематично   а таскать все за собой тоже не выход, ... хотя правда осх таскать уже не надо все в ехе | 
|   | 
         
         
          
           Сообщ.
           #14
          
          , 
          
         
         | 
|  |  2 ALXR: Цитата  А как процедуре обработки узнать, какой инстанции класса отправлять уведомление о том или ином сообщении?   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 | 
|   | 
         
         
          
           Сообщ.
           #15
          
          , 
          
         
         | 
|  |  А вообще, вот сабклассинг без модуля. В классе.   Прикреплённый файл  SubclassInClass.rar (2.33 Кбайт, скачиваний: 2281) |