powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цвет заголовка активной формы
21 сообщений из 21, страница 1 из 1
Цвет заголовка активной формы
    #37778999
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Сделал отдельную форму с календарем (BorderStyle формы равен 0 - none), которую предполагаю использовать как ниспадающий календарь из грида.
При показе моего календаря (юзер нажимает кнопку в ячейке грида) текущая форма теряет фокус и становится неактивной, о чем свидетельствует потускневший цвет заголовка формы. (Оно и понятно, ведь фокус перешел на форму с календарем.)
Но можно ли как-то избежать этого нежелательного в данном случае эффекта?
Наверное, есть какая-то API-фукнция для установки цвета заголовка текущей формы...
Начиная с XP, там не просто цвет, а градиент. Это несколько усложняет задачу.
Может кто-нибудь что-то подсказать по этому поводу?

Заранее спасибо.
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779018
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам надо было окно делать другого класса. посмотрите api setwindowlong
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779026
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделать вместо формы activex control
поместить его на ту же форму что и грид
и показывать скрывать в нужном месте

авторНаверное, есть какая-то API-фукнция для установки цвета заголовка текущей формы


есть и даже будет работать
только потребуется перехват оконной процедуры окна
окна формы которую хотим показывать активной даже когда она не активна
тк это специальное сообщение WM_...
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779034
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторsetwindowlong


не поможет

я делал именно это именно так как написал
через wm_...

но если есть возможность сделать через activex control
то надо делать через activex control
это правильней как мне кажется

1 делаем свой UserControl в бейсике
2 добавляем туда грид
3 добавляем туда календарь выпадающий
4 вставляем этот UserControl вместо грида на нужную форму
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779040
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какого конкретно другого класса? Я по VB6 вопрос сейчас задаю, не по VB.NET.
User Control вы имеете в виду? Но в этом случае большим минусом будет то, что он не сможет быть показан за рамками текущей формы, а в случае отдельной формы тут все ОК.
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779053
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все так и сделано - грид это у меня UserControl, календарь там есть. Но сейчас я хочу его убрать от туда. Причина - рамки формы.
Как установить цвет заголовка для формы, чтобы оно выглядело как активное?
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779073
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может установить свойство окна как ToolWindow в дизайнере форм?
а может попробовать стиль окна поменять на toolwindow
не пробовал

я делал перехватом этих сообщений
WM_NCACTIVATE - здесь можно задать что окно должно рисоваться активным даже если оно не активно
WM_ACTIVATEAPP
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779085
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле причина еще вот в чем.
На форме много гридов-моих UserControl-ов.
Соответственно, календарь, содержащийся на всякий случай в каждом из них множится.
А ведь он может даже и не понадобиться (полей DateTime может вообще не быть в гридах).
Помимо календаря, есть еще ряд других подобных ниспадающих типов - ниспадающая таблица, ниспадающий список с чекбоксами... В общем, я решил, что это неэффективно, когда они множатся, и именно поэтому пробую сейчас сделать вынести их в отдельную форму. Которая будет одна на все случаи.
Ставлю вопрос боле точно - как не дать форме изменить цвет своего заголовка при показе другой формы?
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779117
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПомимо календаря, есть еще ряд других подобных ниспадающих типов - ниспадающая таблица, ниспадающий список с чекбоксами..


задача понятна
только по-моему стандартным решением как раз является создания своего UserControl
напихивания в него дополнительных конторолов на все случаи жизни
в результате получится улучшенный грид
и его уже пихать куда попало вместо стандартного грида


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

надо пробовать стиль окна ToolWindow (ну как-то так он называется)
есть и в дизайнере такое свойство для формы
и в winapi
по-моему есть даже два стиля для ToolWindow чем-то отличающиеся

ну а если не поможет сделать перехват wm_ncactivate как я делал это работает
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779123
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот стиль
WS_EX_TOOLWINDOW

для его установки действительно надо использовать SetWindowLong
как предлагал Konst_One
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779126
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь1973В общем, я решил, что это неэффективно, когда они множатся, и именно поэтому пробую сейчас сделать вынести их в отдельную формуКонтрол можно грузить динамически, то есть только при необходимости. Может этим путем пойти?
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779149
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКонтрол можно грузить динамически, то есть только при необходимости. Может этим путем пойти?


не понял это
как это поможет тому что заголовок окна будет всегда активен
понятно можно динамически грузить только те контролы которые нужны
особенно если эти контролы тяжелые и не всегда используются
ускорится вывод на экран что важно


я понимаю так (и так было у меня)
есть главное окно
в нем кнопка
нажимаю кнопку показвается новое окно
очевидно заголовок у этого окна активен
а главного окна не активен
те стандартное поведение окон

а надо чтобы после появления второго окна
заголовок остался активным

я это делал через wm_ncactivate wm_activateapp

попробовал в дизайнере установить toolwindow - не помогло
окно активное только одно
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779179
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может таккак это поможет тому что заголовок окна будет всегда активеня ответил только на то, что процитировал. То есть если напрягает то, что грузится много контролов ненужных при открытии формы, можно контролы подгружать при необходимости.
А что касается заголовка окна - на это уже ответили без меня.
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779427
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лично у меня ничего не получилось с субклассингом по непонятым причинам.
Использовал вот такой код, размещенный в модуле:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Option Explicit

Const WM_NCACTIVATE = &H86
Private Const GWL_WNDPROC As Long = (-4)
Private m_frmA As Form
Private m_lDefWindowProc 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 Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Sub SubClassForNoLostFocus(frmA As Form)
    Dim hWnd As Long
    hWnd = frmA.hWnd 'get handler
    Set m_frmA = frmA

    m_lDefWindowProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub

Public Sub UnSubClassForNoLostFocus(frmA As Form)
    Dim hWnd As Long
    hWnd = frmA.hWnd 'get handler

    SetWindowLong hWnd, GWL_WNDPROC, m_lDefWindowProc

    Set m_frmA = Nothing
End Sub

Private Function WndProc(ByVal hWnd As Long, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim lResult As Long

    If hWnd = m_frmA.hWnd Then
        Select Case lMsg 
            Case WM_NCACTIVATE
                wParam = 1
                lResult = CallWindowProc(m_lDefWindowProc, hWnd, lMsg, wParam, lParam)
            Case Else
                lResult = CallWindowProc(m_lDefWindowProc, hWnd, lMsg, wParam, lParam)
        End Select
    End If

    WndProc = lResult
End Function
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779451
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем сабклассить то? вот так попробуйте свою форму-календарик открыть


может таквот стиль
WS_EX_TOOLWINDOW

для его установки действительно надо использовать SetWindowLong
как предлагал Konst_One
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779466
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на первый взгляд так и надо
сейчас у себя попробую

просто это давно было у меня исходника нет
но у меня точно работало

авторKonst_One


ToolWindow не работает
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779490
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну вот у себя проверил
все работает
ничего не менял
может просто забыли вызов subclass.. сделать на Form_Load Form_Unload
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779554
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторможет так
У вас все работает в случае сабклассинга (мой код) или в случае установки стиля WS_EX_TOOLWINDOW с помощью SetWindowLong?
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779571
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работает код который я Ctrl+C Ctrl+V ничего не изменив
а какая версия ОС может это как-то влияет? или тоже хр?
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779577
может так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну может
не на ту форму сабклассинг
...
Рейтинг: 0 / 0
Цвет заголовка активной формы
    #37779628
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С этим сабклассингом проблемы возникает неслабые в разлиных других ситуациях - показываются другие формы из формы в режиме Modeless. Хотя внешне все казалось бы работает в простейшем примитивном варианте, как вы тестировали.
Я, в общем, пару раз увидел вылет VB в других местах, и от сабклассинга решил отказаться. Сейчас остановился на варианте UserControl. Вроде бы все нормально получилось. Спасибо всем за помощь ))
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цвет заголовка активной формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]