Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19

ChooseColor ! предварительные настройки

15.04.2014, 16:59. Показов 1628. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обновил свой блог ! где я веду разработку компонентов
ниже картинки с достигнутыми результатами

хотелось бы попросить помощи вот в чем...
там есть диалог вызова цвета вызываемой функцией WinApi ChooseColor

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

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

так-же любопытно как в подсказке отобразить предупреждающий значёк ?
например значёк треугольника с восклицательным знаком ...
Миниатюры
ChooseColor ! предварительные настройки   ChooseColor ! предварительные настройки  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2014, 16:59
Ответы с готовыми решениями:

ChooseColor() не меняется цвет
По нажатии на кнопку, появляется диалог выбора цвета. После нажатия "OK" цвет остается прежним(черным). Что неверно?? #include...

Предварительные сведения.
Всем привет. Какие предварительные знания нужны для изучения теории вероятностей?

Предварительные вычисления в видеоиграх
Добрый вечер, прошу помочь статьями на эту тему, необходимо провести исследование в этой области, вот ищу статьи разнообразные, если у...

16
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.04.2014, 17:33
Лучший ответ Сообщение было отмечено Антихакер32 как решение

Решение

Цитата Сообщение от FelixMacintosh Посмотреть сообщение
так-же любопытно как в подсказке отобразить предупреждающий значёк ?
В константах:
Visual Basic
1
2
3
Private Const TOOLTIP_WARNING_ICON = 3
Private Const TOOLTIP_ERROR_ICON = 2
Private Const TOOLTIP_INFO_ICON = 1
в коде:
Visual Basic
1
2
3
If Title <> vbNullString Then 'если мы хотим, чтобы был заголовок или значок
            SendMessage mHwnd, TTM_SETTITLE, TOOLTIP_INFO_ICON, ByVal Title
        End If
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 18:19  [ТС]
Pro_grammer Спасибо один вопрос отпал !
внес изменения ...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'----------------------------------------------------------[ Enums ]
Public Enum ttStyleEnum
    TTStandard
    TTBalloon
End Enum
 
Public Enum ttDelayTimeConstants 'Константы времени задержки
    [Задержка по умолчанию] = 0
    [Повторный просмотр] = 1
    [Задержка показа] = 2
    [Начальная задержка] = 3
End Enum
 
Public Enum ttIconsConst 'Отображение иконок
    [Восклецательный знак] = 3
    [Знак ошибки] = 2
    [Важная информация] = 1
End Enum

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Event Help(NameControl$, Title$, Message$, ttIcon%)
 
Private Sub Is_Help(Obj As Object, Button As Integer)
    Dim Title$, Message$, ttIcon%
    If Button = 2 Then
        Title = Obj.Caption
        RaiseEvent Help(Obj.Name, Title$, Message, ttIcon)
        If Len(Message) Then
            mToolTip.Create Obj.hwnd, Title, Message, TTBalloon, ttIcon
        End If
    End If
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub dlgColor1_Help(NameControl As String, Title As String, Message As String, ttIcon As Integer)
    '
    '   Пример возникновения события подсказки и вызова окна с сообщением
    '
    ttIcon = 2
     If NameControl = "Command1" Then
        Message = "вызванна из dlgColor1"
    End If
End Sub
Миниатюры
ChooseColor ! предварительные настройки  
Вложения
Тип файла: rar grDLG (изменено ! 15 апреля ) .rar (25.6 Кб, 4 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 18:39  [ТС]
так-же заметил несоответствия и сразу-же поправил мои консты

Visual Basic
1
2
3
4
5
Public Enum ttIconsConst 'Отображение иконок
    [Важная информация] = 1
    [Восклецательный знак] = 2
    [Знак ошибки] = 3
End Enum
Добавлено через 3 минуты
проэксперементировал и понял что еще 7 это знак вопроса
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.04.2014, 18:40
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
предворительно перед вызовом задать координаты ?
Предварительно не знаю. А вот быстренько - быстренько потом переместить можно, если задействовать
Visual Basic
1
2
3
4
5
6
Declare Function MoveWindow Lib "user32.dll" (ByVal hwnd As _
Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As _
Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
 
' hWnd это окна диалога
retval = MoveWindow(hWnd, 200, 150, 175, 300, 1)
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 18:52  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
быстренько - быстренько потом переместить можно
это то я знал, просто я думал может у ChooseColor свои настройки есть ..

Добавлено через 1 минуту
а то сделаю , опубликую ...
начну радостно хвастать ..
а The Trick меня обломает тем что это бад-код
1
15.04.2014, 19:06

Не по теме:

Цитата Сообщение от FelixMacintosh Посмотреть сообщение
а The Trick меня обломает тем что это бад-код
Куда нам до него, мужикам-лапотникам:) Он профи!

0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 19:17  [ТС]
Ладно ... пойду пытаться чтото делать, само-же оно не сделается ..
а то буду чуствовать дискомфорт и не усну ...
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
15.04.2014, 19:26
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Он профи!
Спасибо!
Я знаю 2 способа задать позицию.
Использовать процедуру хука (это правильное решение которое надо использовать). Смотри флаг CC_ENABLEHOOK, и функцию обратного вызова CCHookProc
Поставить хук на открытие окна и там задать координаты (это более извратный метод).
FelixMacintosh, твой тултип с точки зрения производительности и правильности несовершенен (не в обиду), но т.к. ты не гуру в WinAPI то для тебя это вполне хорошее решение, я и сам раньше писал так как мог. Хотя тебе я писал о флагах и показах тултипа, но ты выбрал свое решение. Ты можешь сам риовать на тултипе если тебе хочется красоты.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 22:17  [ТС]
исправил ошибку дико извиняюсь если кто начал пользоваться компонентом...
Восклицательный

Добавлено через 5 минут
Цитата Сообщение от The trick Посмотреть сообщение
Поставить хук на открытие окна
спасибо за наводку, возможно в интернете найду

Добавлено через 2 часа 41 минуту
и уже кое что нашел
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
15.04.2014, 22:20
Лучший ответ Сообщение было отмечено Антихакер32 как решение

Решение

Вот сделал небольшой пример, разбирайся.
Visual Basic
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
43
44
45
46
47
48
49
Option Explicit
 
Public Type tagChooseColor
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
 
Public Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As tagChooseColor) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
 
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const CC_ENABLEHOOK = &H10&
Public Const WM_INITDIALOG = &H110
 
Public CustomColor(15) As Long
 
Public Function ColorDlg(ByVal hWnd As Long, Ret As Long) As Boolean
    Dim cc As tagChooseColor
    
    cc.lStructSize = Len(cc)
    cc.hwndOwner = hWnd
    cc.lpCustColors = VarPtr(CustomColor(0))
    cc.flags = CC_ENABLEHOOK
    cc.lpfnHook = GetAddr(AddressOf CCHookProc)
    
    ColorDlg = ChooseColor(cc)
    
    Ret = cc.rgbResult
End Function
Public Function CCHookProc(ByVal hWnd As Long, ByVal uiMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uiMsg
    Case WM_INITDIALOG
        Dim x As Long, y As Long
        x = 1000: y = 0 ' Çàäàåì ïîçèöèþ
        SetWindowPos hWnd, 0, x, y, 0, 0, SWP_NOZORDER Or SWP_NOSIZE
    End Select
End Function
 
Public Function GetAddr(ByVal Addr As Long) As Long
    GetAddr = Addr
End Function
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 22:39  [ТС]
Огромное тебе спасибо !
мне главное было понять как реализовать хук
а все остальное я сделаю как надо !
теперь у меня будет все по суперски ..
в титрах About Programm в каждой второй строчке буду тебя указывать
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
16.04.2014, 00:12
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Вот тебе еще примерчик.
Visual Basic
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Option Explicit
 
Public Type tagChooseColor
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As tagChooseColor) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
 
Public Const GWL_ID = (-12)
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const CC_ENABLEHOOK = &H10&
Public Const WM_INITDIALOG = &H110
Public Const WM_COMMAND = &H111
Public Const WM_DESTROY = &H2
 
Public Const IDOK = 1
Public Const IDCANCEL = 2
Public Const IDMYBUTTON = 12345
 
Public CustomColor(15) As Long
 
Dim cmd As CommandButton
 
Public Function ColorDlg(ByVal hwnd As Long, Ret As Long) As Boolean
    Dim cc As tagChooseColor
    
    cc.lStructSize = Len(cc)
    cc.hwndOwner = hwnd
    cc.lpCustColors = VarPtr(CustomColor(0))
    cc.flags = CC_ENABLEHOOK
    cc.lpfnHook = GetAddr(AddressOf CCHookProc)
    
    ColorDlg = ChooseColor(cc)
    
    Ret = cc.rgbResult
End Function
Public Function CCHookProc(ByVal hwnd As Long, ByVal uiMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uiMsg
    Case WM_INITDIALOG
        Dim hOk As Long, hCancel As Long, hMy As Long, _
            rc As RECT, w As Long, h As Long, x As Long, _
            y As Long
        
        Set cmd = frmMain.Controls.Add("VB.CommandButton", "cmd")
        cmd.Visible = True
        cmd.Caption = "Кликни!"
        
        SetParent cmd.hwnd, hwnd
        SetWindowLong cmd.hwnd, GWL_ID, IDMYBUTTON
        
        hOk = GetDlgItem(hwnd, IDOK)
        hCancel = GetDlgItem(hwnd, IDCANCEL)
        hMy = cmd.hwnd
        GetClientRect hwnd, rc
        y = rc.Bottom
        w = rc.Right - rc.Left
        w = (w - 4) \ 3
        h = 23
        y = y - h - 4
        
        SetWindowPos hOk, 0, 4, y, w - 4, h, SWP_NOZORDER
        SetWindowPos hCancel, 0, 4 + w, y, w - 4, h, SWP_NOZORDER
        SetWindowPos hMy, 0, 4 + w * 2, y, w - 4, h, SWP_NOZORDER
    Case WM_COMMAND
        Select Case wParam
        Case IDMYBUTTON
            MsgBox "Привет FelixMacintosh!"
            CCHookProc = 1
        End Select
    Case WM_DESTROY
        frmMain.Controls.Remove ("cmd")
        Set cmd = Nothing
    End Select
End Function
 
Public Function GetAddr(ByVal Addr As Long) As Long
    GetAddr = Addr
End Function
Миниатюры
ChooseColor ! предварительные настройки  
Вложения
Тип файла: zip MyColorDlg.zip (6.8 Кб, 12 просмотров)
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.04.2014, 00:15  [ТС]
Теперь всё работает правильно, можно двигаться дальше
кому любопытно как это работает смотрите мой блог
архив за 16 апреля !
Миниатюры
ChooseColor ! предварительные настройки  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.04.2014, 00:18  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Вот тебе еще примерчик.
где ты раньше был !
Я только все прикрутил ...
..надежно, чтоб не оторвалось
0
16.04.2014, 00:25

Не по теме:

Я тоже делаю контролы, для своей проги. Поддержка альфа-канала, скинов, реакция на MoouseLeave, MouseEnter. Сейчас делаю меню и скролбары.

Миниатюры
ChooseColor ! предварительные настройки  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.04.2014, 10:46  [ТС]
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2014, 10:46
Помогаю со студенческими работами здесь

Как перенести все настройки сайта (тему, настройки, плагины, настройки) на другой сайт и домен?
Как перенести все настройки сайта (тему, настройки, плагины, настройки) на другой сайт и домен. Т.е. надо получить «пустой сайт но с теме...

Циклическая программа не выводит предварительные итоги
С++ Builder 6.0 Здравствуйте. Написал простенькую программу с бесконечным циклом для проверки генерации случайных чисел в рулетке....

Подключение модулей или предварительные объявления
Доброго времени суток! Недавно начал знакомиться с библиотекой QT. Обзавелся несколькими книгами и при беглом прочтении столкнулся с...

Предварительные данные о быстродействии GeForce 8800 GTX
Начнём, пожалуй, с данных о быстродействии видеокарты GeForce 8800 GTX в тесте 3DMark06, которые опубликовали коллеги с сайта The Inquirer....

Поиск не выводит предварительные результаты при вводе поискового слова
Здравствуйте. На сайте bars-stroy.kz установлен шаблон elektrosila.altop.ru, но не выводит предварительные результаты поиска всегда пишет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru