Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.234.62] |
|
Прикр. сообщ.
#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 Кбайт, скачиваний: 5518) |
Сообщ.
#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 Кбайт, скачиваний: 2202) |
Сообщ.
#16
,
|
|
|
Класса! Не формы...
ps: А такой изврат с машинным кодом я знаю Едва ли он применим. |
Сообщ.
#17
,
|
|
|
почему нет ?
|
Сообщ.
#18
,
|
|
|
А что проще? Использовать такой класс или все-таки модуль? В данном случае принцип ведет к тому, что нужно стать полным извращенцем (при том, что цель, вобщем-то, та же). В данном случае, я пошел по пути наименьшего сопротивления, но если он (модуль) в мою же тему не подходит - удалю, пожалуй. Буду сам пользоваться.
|
Сообщ.
#19
,
|
|
|
Настаиваю на общем классе.
Можно ведь сделать AddHook(hwnd,Me) из класса. А в единственном модуле хука вести собственную коллекию, где будут связаны hWnd и Объекты классов/Контролов. |
Сообщ.
#20
,
|
|
|
ну не удобно же пользоваться модульскими извращениями. это вообще капец полный.
уж лучше asm или как я говорил одним общим модулем. |
Сообщ.
#21
,
|
|
|
Ну, удобнее машинным кодом пользоваться? Какие там извращения в модуле? Класс, не спорю, выглядит приятнее, но если следовать по этому же пути, то, в конечном итоге опять можно прийти к comctl32.ocx... Если есть возможность, почему бы ее не использовать? Впрочем, ладно, о вкусах не спорят. Накатаю класс, а обработку событий попробуй сам вживить.
|
Сообщ.
#22
,
|
|
|
Цитата это назывется возможность ?Цитата Если есть возможность, почему бы ее не использовать? WM_LBUTTONDOWN ладно действительно о вкусах не спорят. |
Сообщ.
#23
,
|
|
|
SCINER, не переживай Мне с асмом понравилось. Рульно.
|
Сообщ.
#24
,
|
|
|
ListView никто не реализовал, а?
|
Сообщ.
#25
,
|
|
|
Цитата B.V. @ ListView никто не реализовал, а? у меня есть. выложу. |
Сообщ.
#26
,
|
|
|
Решил вот попробывать и на основе кода SCINER'a "SysDateTimePick"
Сделал "SysMonthCal" Вот что получилось [Компонент помещен в общий пакет] |
Сообщ.
#27
,
|
|
|
ListView как и обещал:
[Компонент помещен в общий пакет] |
Сообщ.
#28
,
|
|
|
SCINER, а не мог бы ты оформить это в виде двух UserControl'ов?
|
Сообщ.
#29
,
|
|
|
SCINER, в ListView очень не хватает SelectRow и SelelectCol
|
Сообщ.
#30
,
|
|
|
Тут тока контролы выкладывать или можно и классы которые заменяют контролы? Могу выложить набор, который реализует класс вместо контрола Winsock.
Набор из нескольких классов и модуля (для глобализации запросов). Реализованы все события в одном из классов, еще в одном реализован синхронный запрос (ваша функция будет ждать пока не загрузятся данные, а потом продолжит обработку) по методам GET и POST. Немного правда надо описать как юзать в сложных ситуациях, но в простом варианте все просто как лыжи. |
Сообщ.
#31
,
|
|
|
Цитата Toleranto @ SCINER, в ListView очень не хватает SelectRow и SelelectCol Что-то не припомню в ListView возможности выделить столбец... Строку - еще понятно, а столбец как? |
Сообщ.
#32
,
|
|
|
Извените, если не правильно написал, просто хотелось бы знать именно строку... а вот про столбец....( бес попутал )
ALXR , забыл, в твоем варианте ProgressBar не работает установка ProgressBar.max и ProgressBar.min они всегда 100 и 0 в любом случае, что с ними не делай.... |
Сообщ.
#33
,
|
|
|
Цитата XPraptor @ Тут тока контролы выкладывать или можно и классы которые заменяют контролы? Можно и классы, только они должны быть автономны. |
Сообщ.
#34
,
|
|
|
Цитата Toleranto @ ALXR , забыл, в твоем варианте ProgressBar не работает установка ProgressBar.max и ProgressBar.min они всегда 100 и 0 в любом случае, что с ними не делай.... Исправил и поправил первый пост. Теперь работает. Если лень качать заново, то исправление заключается в следующем: Замени Property Let Max и Property Let Min на следующие: Property Let Min(ByVal v As Long) SendMessageA hProgress, PBM_SETRANGE, 0, Me.Max * 65536 + v End Property Property Let Max(ByVal v As Long) SendMessageA hProgress, PBM_SETRANGE, 0, v * 65536 + Me.Min End Property |
Сообщ.
#35
,
|
|
|
Я, кстати, отказался от использования UserControls по одной простой причине: он создает свой hWnd, на котором нужно создать свой контрол - еще один hWnd, и вместо одного получается 2 (два) окна. Класс в этом плане более оптимален, но менее гибок... Гибкость, правда, придается бОльшим объемом кода, но зато нет необходимости использовать UCTL. |
Сообщ.
#36
,
|
|
|
Еще 4 класса (включая доработанный clsProgress = 5) с примером.
- HotKey - StatusBar - SysAnimate - SysIPAddress Кто хочет, может добавить туда обработку событий и т.п. [Компонент помещен в общий пакет] |
Сообщ.
#37
,
|
|
|
Привет, а есть контрол вот такой?, извините если туплю
Прикреплённая картинка
|
Сообщ.
#38
,
|
|
|
И ещё бы TreeView
|
Сообщ.
#39
,
|
|
|
К Common Controls Splitter не относится, но есть класс, который можешь попробовать и, если надо, довести до ума.
TreeView/ListView/TabControl - довольно громоздкие контролы и в один класс не влезут... Как придем к соглашению, как с ними поступить - сделаем. |
Сообщ.
#40
,
|
|
|
Спасибо за внимание
Хоть сказал как называется такая вещь Сразу нашел кучу всего, и к тому же пример, сделанный тобой, спасибо большое! |
Сообщ.
#41
,
|
|
|
А чем такой вариант не устраивает.... Так мне кажется проще...
Прикреплённый файлResizeComponents.zip (1.76 Кбайт, скачиваний: 914) |
Сообщ.
#42
,
|
|
|
Цитата Toleranto @ А чем такой вариант не устраивает.... А где в твоем примере универсальность? |
Сообщ.
#43
,
|
|
|
А как для создаваемого на АПИ компонента задать шрифт и его размер?
|
Сообщ.
#44
,
|
|
|
Примерно так:
hFont = CreateFont(...) SendMessage(hMyControl, WM_SETFONT, hFont, True) Только не следует забывать вызывать DeleteObject(hFont) после того, как контрол (или данный шрифт) больше не нужен. |
Сообщ.
#45
,
|
|
|
Примеров по установке шрифтов в сети много, но не один не работает!
Шрифт становится жирным и всё. Цитата В SysDateTimePick32 есть один глюк (только на VB): открываем этот пример и добавляем на форму TextBox; переводим фокус на него (просто щёлкаем), а потом щелкаем на стрелочку контрола SysDateTimePick32. Стрелка остаётся нажатой а окошечка выбора даты не появляется. реализовано: - msctls_progress32 - SysDateTimePick32 Вот 4 API-контрола [Компонент помещен в общий пакет] |
Сообщ.
#46
,
|
|
|
класс TabStrip
всё в одном файле с примером... [Компонент помещен в общий пакет] |
Сообщ.
#47
,
|
|
|
Собрал все в один архив.
|
Сообщ.
#48
,
|
|
|
а на форуме vbstreets.ru от Antonariy есть сборка ucComCtl http://bbs.vbstreets.ru/viewtopic.php?t=34151&start=30
там чтото похожее, но может оттуда можно почерпнуть чтото для дела? А вообще, отличная затея с этим контролом. Спасибо ребята |
Сообщ.
#49
,
|
|
|
не могу понять, в ListView можно выставить чекбоксы?
|
Сообщ.
#50
,
|
|
|
Добавь стиль LVS_EX_CHECKBOXES
|
Сообщ.
#51
,
|
|
|
Arcady_XQST
я не могу понять где его врубить... если в этом кусочке кода: 'изменение стиля отображения With ListView1 .View = LVS_REPORT .GridLines = True .FullRowSelect = True End With то нет такого стиля |
Сообщ.
#52
,
|
|
|
'Добавить в раздел декларации Private Const LVS_EX_CHECKBOXES As Long = &H4& 'Добавить в раздел кода Property Get Style() As ListBoxConstants Dim dwStyle As Long Style = LView.Style And LVS_EX_CHECKBOXES End Property Property Let Style(ByVal vNewValue As ListBoxConstants) Call pSetExtendedStyle(LVS_EX_CHECKBOXES, vNewValue = vbListBoxCheckbox) End Property Как использовать новое свойство: 'изменение стиля отображения With lv .View = LVS_REPORT .GridLines = True .FullRowSelect = True .Style = vbListBoxCheckbox End With |
Сообщ.
#53
,
|
|
|
Обновил архив
Цитата 14:26 03.12.2007 ListView - Добавлены события Click, Check - Добавлен стиль CheckBox - Теперь получает и отдает фокус на форме, как стандартные VB контролы. |
Сообщ.
#54
,
|
|
|
SCINER
По поводу ListView В Style неплохо было бы добавить ещё LVS_SINGLESEL (&H4) Public Enum eListViewStyle LVS_ICON = &H0 LVS_REPORT = &H1 LVS_SMALLICON = &H2 LVS_LIST = &H3 LVS_SINGLESEL =&H4 End Enum |
Сообщ.
#55
,
|
|
|
Люди!
Не бросайте на полпути с этим контролом!! Вкинул в проект и хочу доделать. Помогите, чтобы было: 1. При клике на ListView_ItemClick(Index As Long) можно было бы получить Key(который добавляется через ItemAdd.) |
Сообщ.
#56
,
|
|
|
ok посмотрю
|
Сообщ.
#57
,
|
|
|
SCINER
вот человек один помог дописать, посмотри, может сгодится [прикрепленный файл удален модератором] |
Сообщ.
#58
,
|
|
|
Я уже сам сделал. Архив обновил.
-Added Цитата OneWay @ SCINER вот человек один помог дописать, посмотри, может сгодится [прикрепленный файл удален модератором] Не совсем неоптимально. |
Сообщ.
#59
,
|
|
|
Была ошибка в свойстве Key(index). Пофиксил.
Теперь для контролов TabStrip, TreeView и ListView при загрузке формы необходимов вызывать процедуру Initialize(). |
Сообщ.
#60
,
|
|
|
SCINER
о, супер! А скажи, для чего появилось: Dim g_hShell32 As Long ' LoadLibrary(shell32) Private Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long Public Declare Function SetFocusAPI Lib "user32.dll" Alias "SetFocus" (ByVal hWnd As Long) As Long это важные аспекты? И добавь пожалуйста событие: Public Event MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) нужно отслеживать, какой кнопкой мышатины кликнули по листвьюхе. |
Сообщ.
#61
,
|
|
|
SetFocusAPI важен, но эту функцию можно поместить внутрь контрола
shell32 не столь важен |
Сообщ.
#62
,
|
|
|
MouseDown, MouseUp в ListView1 сделал.
Добавил свойство StatusBar.Height |
Сообщ.
#63
,
|
|
|
SCINER
а что за косяки могут быть с MouseUp? Чего он выёживается? Я тоже пытаюсь присобачить, но до него чего-то событие вообще не доходит Добавлено: Прикрути пожалуйста в Lvw, если не сложно, ForeColor, и Bold к фонту... |
Сообщ.
#64
,
|
|
|
SCINER
воу, круто, наконец-то нашлись люди, которые думают как и я (насчёт перетаскивания mscomctl32) а действительно, будет ли возможность подключить это событие MouseUp? Ну очень нужно. П.С. могу поделиться изменением шрифта в ColumnHeader (цвет, наклонный, курсив) |
Сообщ.
#65
,
|
|
|
посмотрите внимательней сообщение №65.
|
Сообщ.
#66
,
|
|
|
А как справиться со странным глюком: при закрытии программы, использующей некоторые выложенные здесь контролы (проверял со статусбаром, прогрессбаром и табстрипом), выскакивает сообщение типа "Project1.exe - обнаружена ошибка... и бла-бла-бла". В примере, прилагающемся с контролами этого нет. Может быть я как-то некорректно высвобождаю ресурсы?
|
Сообщ.
#67
,
|
|
|
Lumen
так выложи на тест проект... а то мало ли что там может быть Добавлено SCINER! как ты смотришь на то, чтобы добавить к листвьюхе: 1. Background color 2. Item.Font (Bold, Color) 3. SubItem.Icon |
Сообщ.
#68
,
|
|
|
SCINER
ну скинер, будь другом. хотябы первые два пункта. или один из двух Добавлено: 01.01.2008 у меня появилось два важных вопроса: 1. Как уничтожить объект листвью? Т.к., если в мди-приложении закрыть форму с листвьюхой, то при следующем открытии и инициализации, возникают серьёзные ошибки (пропадают иконки, и последний чекбокс уходит выше всех фиелдов). 2. Если айтем выбран, и потом ещё раз кликнув на нём, то событие ListView1_ItemClick(Index As Long, ByVal Key As String) не выполняется. Как заставить повторно обработаться событию? |
Сообщ.
#69
,
|
|
|
Глюк с табстрипом как-то связан с манифестом и стилем XP. Без манифеста всё работает вроде нормально. Проект с демонстрацией глюка прикладываю:
Прикреплённый файлПроект.rar (14.85 Кбайт, скачиваний: 698) |
Сообщ.
#70
,
|
|
|
А какой глюк то?
|
Сообщ.
#71
,
|
|
|
Некорректно завершается программа. С этим компонентом и манифестом в ресурсах при закрытии вылетает сообщение "Обнаружена ошибка, приложение будет закрыто бла бла бла, отправить отчет/не отправлять"
|
Сообщ.
#72
,
|
|
|
В модуле добавь
Option Explicit Private Declare Sub InitCommonControls Lib "comctl32" () Public m_hMod As Long Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _ ByVal lpLibFileName As String) As Long Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Sub Main() m_hMod = LoadLibrary("shell32.dll") Call InitCommonControls Load "ФОРМА" end sub В форме: Private Sub Form_Unload(Cancel As Integer) FreeLibrary m_hMod end sub |
Сообщ.
#73
,
|
|
|
Причем можно(и даже лучше) без последнего...
|
Сообщ.
#74
,
|
|
|
Спасибо, заработало!
Только не совсем понятно, зачем надо принудительно грузить shell32.dll... Common Control'ы ведь находятся в comctl32.dll. Сорри если глупый вопрос, просто интересно разобраться... |
Сообщ.
#75
,
|
|
|
[Компонент помещен в общий пакет]
И где этот пакет? |
Сообщ.
#76
,
|
|
|
Не ответили...
Наверно комуниздили здесь.... http://www.planet-source-code.com/vb/scripts/BrowseCategoryOrSearchResults.asp?lngWId=1&blnAuthorSearch=TRUE&lngAuthorId=227143051&strAuthorName=Carles%20P.V.&txtMaxNumberOfEntriesPerPage=25 |
Сообщ.
#77
,
|
|
|
Читали первое сообщение?
Цитата ALXR @ Выделил данный набор в отдельный проект и выделил ему отдельную страничку на сайте — http://mega-set.com/comctl/ |
Сообщ.
#78
,
|
|
|
Ссылка внутри на страрый сайт
|
Сообщ.
#79
,
|
|
|
ALXR "Эту ссылку" минимум 10 раз открывал, было "нет страницы для отображения".
Насколько помню только там было что-то типа flashmobile, вот и поискал за бугром. Сейчас другая ссылка, а внутри старая http://flashmobile.ru/comctl/commctrl.rar и таже песня, Действие отменено нет страницы для отображения |
Сообщ.
#80
,
|
|
|
Цитата ANDLL @ Ссылка внутри на страрый сайт Окей, исправил. Только пока с хостингом проблема. Почему-то он не отдает бинарные файлы =( Хостер обещает починить. |
Сообщ.
#81
,
|
|
|
Поправьте TabStrip и ещё сделайте не всё в одном а для каждого контрола свой проэкт и всё в одну папку так лучше и нагляднее будет.
----------- Пишу как чурка, тороплюсь... |
Сообщ.
#82
,
|
|
|
Кто нибудь знает, можно у ListView увеличить высоту строки???
|
Сообщ.
#83
,
|
|
|
Увеличить FontSize
|
Сообщ.
#84
,
|
|
|
Ну не, такой вариант не катит. Менять размер шрифта не выход.
|
Сообщ.
#85
,
|
|
|
ownerdraw + WM_MEASUREITEM + MEASUREITEMSTRUCT
|
Сообщ.
#86
,
|
|
|
Может кому будет интересно:
Common Controls Vista >Button >ProgressBar >Frame >CheckBox >UpDown Конечно весь пакет Commoncontrol он не заменит, но для глаз приятно. Вот теперь получилось Прикреплённый файлVista.rar (19.88 Кбайт, скачиваний: 746) |
Сообщ.
#87
,
|
|
|
Примечательно, что архив находится в "Мусоре"...
|
Сообщ.
#88
,
|
|
|
Цитата B.V. @ Примечательно, что архив находится в "Мусоре"... Я как раз об этом думал, просто команда прикрепить работает через раз, вот приходится отдельно выделять место для хранения. |
Сообщ.
#89
,
|
|
|
VisualProg
Все, что нашел при беглом просмотре... 1. frame - Caption сразу не меняется... см. тут, нет Enable! 2. кнопки... посмотри API ReleaseCapture & SetCapture и выбрось таймеры... не нажимается 2 раза приDoubleClick 3. checkbox - вроде ок, но caption... 4. ап-даун - все плохо. Не работает! юзай val(text1.text) хотябы... 5. прогресбар - при max<1 работает! И нет выбора цвета! |
Сообщ.
#90
,
|
|
|
Цитата Black Star @ 1. frame - Caption сразу не меняется... см. тут, нет Enable! Для меня это слишком сложно, да и вроде не так это важно. Цитата Black Star @ нет Enable! Исправил Цитата Black Star @ 2. кнопки... посмотри API ReleaseCapture & SetCapture и выбрось таймеры... не нажимается 2 раза приDoubleClick Double Click срабатывает работает, а на счет ReleaseCapture и SetCapture по подробнее обьясни, на примере. Цитата Black Star @ 4. ап-даун - все плохо. Не работает! юзай val(text1.text) хотябы... Как не работает?! Ты ValueChange измени на число > 0 и всё ок. Цитата Black Star @ 5. прогресбар - при max<1 работает! И нет выбора цвета! Здесь сложность есть не большая, там в качестве Value используется Image растягиваемый по Width, так вот цвет у картинки изменить нельзя (ну традиционными методами)При максе изменил. Прикреплённый файлVista.rar (20.04 Кбайт, скачиваний: 726) |
Сообщ.
#91
,
|
|
|
Цитата ALXR @ Выделил данный набор в отдельный проект и выделил ему отдельную страничку на сайте — http://mega-set.com/comctl/ Так много выделил А страница не грузится... |
Сообщ.
#92
,
|
|
|
Нашел в нете такой архивчик, весь выложить не могу, тыт также исходники контролов, но вот почему-то не могу отдельно их использовать, не знаю правильно ли все делаю.... пробовал скомпилировать, неполучилось, посмотрите, может пригодиться кому
Прикреплённый файлvbComCtl.part01.rar (195.31 Кбайт, скачиваний: 784) |
Сообщ.
#93
,
|
|
|
Вот вторая часть архива
Прикреплённый файлvbComCtl.part02.rar (87.18 Кбайт, скачиваний: 774) |
Сообщ.
#94
,
|
|
|
Что-то в эту тему мало захаживают чтоли?
сам разобрался с двойным кликом делаю свой вклад, ImageList. мне понравился Прикреплённый файлImage_List.rar (84.9 Кбайт, скачиваний: 819) |
Сообщ.
#95
,
|
|
|
Поле iImage в структуре LV_ITEM. Получить структуру можно методом отправки сообщения LVM_INSERTITEM.
|
Сообщ.
#96
,
|
|
|
Ну что же, я продолжаю мучить тему контролов, которая для меня интерестна, но пока не понятна.
тот RichEdit который в основной паке лежит, меня не очень устроил и я нашел именно чтоб он был выполнен в виде контрола, исходники прилогаю, кому интерестно. так вот, у этого контрола не могу сделать свойства MultiLine, пробовал по всякому, пытался взять аналог из класа который лежал в паке, но всеравно ничего не получилось. кто сможет помочь. пока это единственное свойство, которое мне сейчас в нем дополнительно нужно. Прикреплённый файлctlKGRichTextBox.rar (6.34 Кбайт, скачиваний: 751) |
Сообщ.
#97
,
|
|
|
в Windows7 скомпилированный вариант не работает.
Падает на строке Call SendMessage(hTabStrip, TCM_INSERTITEMA, 10, tsItem) Текст ошибки: Цитата --------------------------- CommCtrl --------------------------- Run-time error '-2147417848 (80010108)': Automation error The object invoked has disconnected from its clients. --------------------------- ОК --------------------------- |
Сообщ.
#98
,
|
|
|
как вариант, манифест надо делать.
|
Сообщ.
#99
,
|
|
|
Цитата nash @ как вариант, манифест надо делать. манифест есть |
Сообщ.
#100
,
|
|
|
SCINER
Писал, так как понадобилось выделение нужной строки в ListView... Может быть понадобится... Public Property Get SelectedItem() As Long Dim lFlags As Long lFlags = LVNI_SELECTED If GetFocus() = hListView Then lFlags = lFlags Or LVNI_FOCUSED SelectedItem = SendMessage(hListView, LVM_GETNEXTITEM, &HFFFF, ByVal lFlags) End Property Public Property Let SelectedItem(ByVal lIndex As Long) Const LVIS_FOCUSED As Long = &H1 Const LVIS_SELECTED As Long = &H2 Call ListView_SetItemState(lIndex, LVIS_FOCUSED Or LVIS_SELECTED, LVIS_FOCUSED Or LVIS_SELECTED) End Property Private Function ListView_SetItemState(i As Long, State As Long, Mask As Long) As Boolean Dim lvi As LVITEM lvi.State = State lvi.stateMask = Mask ListView_SetItemState = SendMessage(hListView, LVM_SETITEMSTATE, ByVal i, lvi) End Function Да и ещё, попробуй вариант с работой под Se7en, у меня всё без проблем работает... PS Так как коменты под Toleranto оставлять не могу, пришлось завести нового пользователя Прикреплённый файлclsTabStrip.rar (2.8 Кбайт, скачиваний: 821) |
Сообщ.
#101
,
|
|
|
Проверил твой вариант. Не работает. При запуске из студии - работает, а скомпилированный вариант - нет.
Падает естественно в том-же месте. |
Сообщ.
#102
,
|
|
|
Сообщ.
#103
,
|
|
|
Цитата Dirk @ скомпилирована программа в WinXP кинь сюда пример скомпилированный в XP. гляну |
Сообщ.
#105
,
|
|
|
SCINER
Вопрос, какая версия Win7??? Тестировал на Win7 Максимальная x86 и x64 - работает без каких либо позывов на ошибку (сборка RTM 7600.16385) Возможно какая-то проблема в системе... Может кто другой у кого Win7 скачает, отпишется что да как??? P.S. Был удивлён, но под x64 почти в 3 раза меньше кушает оперативной памяти программа... |
Сообщ.
#106
,
|
|
|
Цитата Dirk @ SCINER Вопрос, какая версия Win7 ? Windows Server 2008 R2 7600 DataCenter |
Сообщ.
#107
,
|
|
|
Цитата SCINER @ Цитата Dirk @ SCINER Вопрос, какая версия Win7 ? Windows Server 2008 R2 7600 DataCenter Ну это не совсем Windows Se7en... Серверной версии у меня под рукой нет чтобы проверить... |
Сообщ.
#108
,
|
|
|
На висте тоже не работает.
|
Сообщ.
#109
,
|
|
|
Сообщ.
#110
,
|
|
|
Поставил Vista x86 в виртуалке, всё нормально.
Исходники прикрепил. Прикреплённый файлTS.rar (17.98 Кбайт, скачиваний: 691) |
Сообщ.
#111
,
|
|
|
Цитата Dirk @ SCINER, nash Попробуйте ещё раз Я уже снес к чертям этот Windows Server 2008 R2 и поставил XP. |
Сообщ.
#112
,
|
|
|
SCINER
Call SendMessage(hTabStrip, TCM_INSERTITEMA, 10, tsItem) При тестах TabStrip, заметил, что позиция, где указано значение 10, отвечает за то, где будет добавлена новая вкладка. Например если будет ноль, то все новые вкладки будут добавляться слева... Если поставить значение текущего количества вкладок, то все новые вкладки будут добавляться справа... Ну если не сложно, обнови в исходниках TabStrip. Добавлено возможность вкладок с иконками, и установка минимальной ширины вкладки |
Сообщ.
#113
,
|
|
|
а можно отключить чекбоксы в дереве? если да то как ?
|
Сообщ.
#114
,
|
|
|
Походу нельзя.
Цитата MSDN TVS_CHECKBOXES Once a tree-view control is created with this style, the style cannot be removed. Instead, you must destroy the control and create a new one in its place. Destroying the tree-view control does not destroy the check box state image list. You must destroy it explicitly. |
Сообщ.
#115
,
|
|
|
Здрвствуйте!
Предлагаю в топку ещё два контролла: Win16Text - контролл, имитирующий консоль Win16, который по своей функциональности не уступает TextBox-у (так как построен на его основе) IconContainer - контролл, хранящий в себе все изображения контейнера "*.ICO". Отличительной особенностью данных контроллов является отсутствие подключаемых библиотек и WinApi (это не значит, что этих библиотек я не прикреплял, это значит что они вообще не используются). Прикреплённый файлUserControls.rar (49,12 Кбайт, скачиваний: 719) |
Сообщ.
#116
,
|
|
|
Цитата VisualProg @ Предлагаю в топку ещё два контролла: Хорошо ты свой креатив назвал Win16Text - красиво, но... Цитата VisualProg @ уступает, так как нет переноса букофф. Просто уходят за пределы экрана и все. Недоделочка по своей функциональности не уступает TextBox-у IconContainer - вопрос: зачем это? Данный контрол имел бы смысл, если позволял хотя бы тыркать мышкой по иконкам и выбирать их (типа свойство сделать SelectedItem). А вывести в цикле несколько картинок на экран - проще сделать без контрола... |
Сообщ.
#117
,
|
|
|
Цитата Da$aD @ А вывести в цикле несколько картинок на экран - проще сделать без контрола... Цикл для показа, каждый элемент, если заметил, находится в своей "ячейке". О ней-же можно получить информацию (размер). |
Сообщ.
#118
,
|
|
|
Цитата VisualProg @ О ней-же можно получить информацию (размер). Не догнал. Где и как? |
Сообщ.
#119
,
|
|
|
Цитата Da$aD @ Где и как? IconContainer1.ReceiveGetImage([Size], [Depth]) - получить изображение ReceiveGetSize([Size], [Depth]) - получить размер изображения Как-то так... |
Сообщ.
#120
,
|
|
|
Автору предлагается предложить вариант того, как это сделать. Насчет стрелочек на sysheader тоже клевое замечание. По поводу всего остального, несмотря на пометку, звучит таки как требование. Как автор может заметить, данные исходники предлагаются для обсуждения и доработки участниками треда. Никто не мешает автору взять указанный исходник и доработать означенные недостатки, затем выложить обратно. |
Сообщ.
#122
,
|
|
|
Дак выложи. Мы обязательно добавим и код и описание в общую сборку.
|
Сообщ.
#123
,
|
|
|
Да, это - хорошая идея.
В CommonDialogControl у меня не работал FontDialog("говорит", что шрифты не установлены), надеюсь у вас такого не будет |
Сообщ.
#124
,
|
|
|
Цитата WareX @ В CommonDialogControl у меня не работал FontDialog("говорит", что шрифты не установлены) Я на эту тему топик создавал, проблема, оказывается, решается просто. No fonts exist |
Сообщ.
#125
,
|
|
|
2Trivu:
Цитата Trivu @ Ни один человек не удосужился взять контрол и включить в него свою наработку. Ни один. - всем все по фигу, - все дают только советы а показать свой ум в виде кода не суждено ибо дурь каждого видна будет. Цитата Trivu @ А вообще, я считаю, что раз уж выкладывать что-нибудь для общего блага, то выкладывать стОящее. а судьи кто. и противоречие следующей твоей фразе. Выкладывать надо законченное. Чтобы вот видно было. |
Сообщ.
#126
,
|
|
|
А я думал было профессионально написать все контролы, но теперь понял, что это нафиг никому не нужно.
Спасибо за внимание. |
Сообщ.
#127
,
|
|
|
Цитата Trivu @ А я думал было профессионально написать все контролы, но теперь понял, что это нафиг никому не нужно. Если есть возможность развивать это направление, то это здорово. Кому-то наверняка пригодится. Просто сейчас это уже не так актуально - спустя 13 лет. Даже по этому разделу форума это видно: сидят одни школьники и прогульщики-студенты, стареющий виндузовый админ и модерирует это все чел, у которого свои особые представления об общепринятых вещах. У меня была идея замутить что-то совсем глобальное, проистекающее от ВБ6, но не было и нет возможностей для этого. Да и поддержки это не снискало. PS: Я смотрел твой контрол - мне понравилось. При некоторых общих соглашениях об оформлении исходников можно было бы что-то замутить. Зря убрал его. Сообщения были разделены в тему "на чём же народ теперь тогда программирует?" |
Сообщ.
#128
,
|
|
|
Хорошо..
Вот огромная туча контролов, включая ВСЕ те, что так желались в текущей теме. Использовать в коммерческих продуктах не воспрещается. Автору на них уже давно наплевать, о чём он сам неоднократно говорил. Прикреплённый файлCodeBox.part01.rar (199,22 Кбайт, скачиваний: 1714) Прикреплённый файлCodeBox.part02.rar (199,22 Кбайт, скачиваний: 1454) Прикреплённый файлCodeBox.part03.rar (105,74 Кбайт, скачиваний: 1507) З.Ы. Все их можно использовать по отдельности без особых сложностей. Желаю удачи. |
Сообщ.
#129
,
|
|
|
Намедни пришло письмо от гражданина из Испании. Благодарит наш форум за компонент ipaddr (там указан мой старый e-mail). Дал ссылку на пример, где его использовал: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=73614&lngWId=1
|
Сообщ.
#130
,
|
|
|
Предлагаю очередной контролл - ServerCTR. Он позволяет имитировать сервер и позволяет связать десяток, другой пользователей, между собой. (ведь в обычном WinSock этого не придусмотренно). Всё описание и примеры находятся в архиве, но на всякий случай описание размещу и здесь:
========================================================= ServerCtr.ctl ========================================================= ServerCtr - контролл, работающий как сервер, на основе компа- нента WinSock.ocx. ========================================================= 1 Свойства ========================================================= Свойство: Значения: Описание: ************* ************* ************* Protocol (TCP/UDP) - Протокол работы всего се- рвера. Port (0...65535) - Порт/список портов, для каждого клиента сервера SeparatorPorts (String) - разделитель портов, для да- льнейшего парсинга. ServerIP (IP) - IP адрес компьютера, к ко- торому будут обращаться кли- енты (адрес ПК, где размещён сервер) ClientCount (0..255) - колличество связуемых кли- ентов. ========================================================= 2 Методы ========================================================= Connection(ClientIndex As Byte, Value As String) Момент подключения/выхода (Value) клиента ClientIndex. GetData(ClientIndex As Byte, Value As String) Момент получения данных Value от клиента ClientIndex. InitClients(ClientIndex As Byte, ClientPort As String) Момент инициализации ClientIndex клиента с портом ClientPort. Error(ClientIndex As Byte, Value As String) Момент ошибки Value, которая произошла в момент обращения к клиенту ClientIndex. ========================================================= 3 Процедуры ========================================================= InitServer() - процедура инициализации сервера, которая переводит все WinSock-и в режим ожидания, после чего к ним могут подклю- чаться клиенты. UnloadServer() - процедура позволяющая диструктировать сервер и сбросить все данные о нём. ToSendToClient(ClientIndex As Byte, Value As String) - процедура отправления клиенту ClientIndex сообщения Value. ToSendToAll(Value As String, Optional ByVal ExceptClient As Byte = 0) - процедура отправления сообщения Value всем пользователям, кроме пользователя ExceptClient (как правило, это текущий по- льзователь) ========================================================= 4 Функции ========================================================= GetClientConnect(ClientIndex As Byte) As Boolean - функция возраща- ющая логическое значение активности клиента ClientIndex. |
Сообщ.
#131
,
|
|
|
Малость переделал, теперь WinSock.ocx не нужен
Прикреплённый файлServerControl.rar (89,83 Кбайт, скачиваний: 2352) |
Сообщ.
#132
,
|
|
|
Вопрос такой
Разобрался Public Sub EnsureVisible(ByVal lIndex As Long) Call SendMessage(hwndLV, LVM_ENSUREVISIBLE, lIndex - vbNull, ByVal cNull) End Sub |
Сообщ.
#133
,
|
|
|
1.Ok = кучка API controls + WinApiForVb library contains over 900 KB of API declarations
только до RichEdit длл путь надо изменить там он прямой http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=62060&lngWId=1 2.и по-мелочи но много http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=69226&lngWId=1 регистрация tlb RegTlbRegTlb.rar (2,42 Кбайт, скачиваний: 1079) |
Сообщ.
#134
,
|
|
|
Компанент, написанный по мотивам ShellListView из Delphi. Смыслв том, чтобы заменить совокупность DirListBox и FileListBox одним, более привычным компанентом TreeView, но не простым TreeView-ом, а специализированным Explorer-ом. Не требует никаких сторонних библиотек (только самое необходимое - stdole2.tlb).
Отрисовка и прочие алгоритмы выполненны Основные свойтва: DragAndDrop As Long - включить/выключить режим DAD Path As String - путь (при смене пути происходит отрисовка) Filter As Long - фильтр отображаемых файлов и папок (vbFileAttributes) IntervalX - отступ между иконками по ширине SizeIconX/SizeIconY - размер иконок при отрисовке На данный момент реализовываю DragAndDrop технологию. Основные модули готовы, и компанент уже может применяться, однако хотелось бы довести его до ума. Explorer.rar Прикреплённый файлExplorer.rar (9,03 Кбайт, скачиваний: 1108) |
Сообщ.
#135
,
|
|
|
Для таких задач есть ShellExecute.
|
Сообщ.
#136
,
|
|
|
Цитата coder @ Для таких задач есть ShellExecute. Спасибо! даже не знал о подобном, думал Shell-ом всё ограничивается Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hWnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Declare Function ShellExecuteForExplore Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hWnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, lpParameters As Any, _ lpDirectory As Any, ByVal nShowCmd As Long) As Long буду применять |
Сообщ.
#137
,
|
|
|
Ещё в добавку: Для Shell нужно указать запускающую программу, а ShellExecute сам определяеть какой файл чем открыть.
|
Сообщ.
#138
,
|
|
|
Цитата coder @ ShellExecute сам определяеть какой файл чем открыть. Заметил, но в ОС должны быть ассоциации программ и файлов, поэтому всё равно придётся "учить" ос, что *.ini;*.inf и прочие файлы, можно открыть как текст |
Сообщ.
#139
,
|
|
|
Цитата VisualProg @ поэтому всё равно придётся "учить" ос, что *.ini;*.inf и прочие файлы, можно открыть как текст так вроде ini и inf и так по умолчанию открываются блокнотом... |
Сообщ.
#140
,
|
|
|
Эх, добавлю-ка сюда свою коллекцию контролов. Разрабатывались с нуля (без использования оберток) для одного крупного проекта, который сейчас заброшен, почти все компоненты поддерживают скины.
Ctrl.zip - библиотека, исходники и тестовый проект. GrayBlue.zip - скин. Кому понадобится, может причесать (хотя вроде бы все нормально работает). Если кто-нибудь захочет их использовать, просьба сообщить. файлы здесь Прикреплённый файлCtrl.part01.rar (195,31 Кбайт, скачиваний: 1179) Прикреплённый файлCtrl.part02.rar (163,28 Кбайт, скачиваний: 1202) Прикреплённый файлGrayBlue.part1.rar (195,31 Кбайт, скачиваний: 1175) Прикреплённый файлGrayBlue.part2.rar (13,79 Кбайт, скачиваний: 1250) |
Сообщ.
#141
,
|
|
|
Скинер, а помнишь, я тебе как-то давал свою реализацию HotKey контрола? Можешь её прикрепить, т.к. мои исходники канули в лету с винтом старым.
|
Сообщ.
#142
,
|
|
|
Если подключить в форму программы какой-нибудь контрол-элемент ActiveX, то возможен такой вариант, что при каждом запуске микрик будет выдавать MessageBox примерно следующего содержания:
This application is about to initialize ActiveX Controls that might be unsafe. If you trust the source of this document, select Yes and ... и т.д. и т.п. Скажу честно, это просто достает... Нашел выход: надо добавить в реестр HKEY_CURRENT_USERSoftwareMicrosoftVBASecurity значение DWORD параметра LoadControlsInForms = 1 тогда это сообщение перестает появляться Код: Сообщения были разделены в тему "Flood" |