Чуть модифицировать Color Common Dialog - VB

Узнай цену своей работы

Формулировка задачи:

Задача такая.
Есть форма, на ней Picturebox.
Надо чтоб пользователь мог задавать его цвет (как ему нравится).
Хочу сделать: пользователь щелкает правой кнопкой мыши по панельке (ну или DoubleClick), появляется окно Color, он задает цвет.
Ну, естественно в стандартном виде сделал.
Задачи:
1. поменять текст заголовка окна Color
2. вывести кнопку Help, написать на ней Reset (дефолтный цвет)
3. при нажатии на Help закрывать окно и сбрасывать цвет на дефолтный
4. окно должно выводиться в районе Picturebox, а не рядом с заголовком формы.
(Иначе все это не очень красиво выглядит)
Думал справлюсь с ходу.
Почему думал, потому что есть хороший опыт с Open/Save.
Но не тут то было.
>1. поменять текст заголовка окна Color
Стандартно задать нельзя.
Но справился.

Причем сразу обратил внимание, что получилось с SendMessage(hwnd а не с hWndParent
>2. вывести кнопку Help, написать на ней Reset
Вывел, но CDM_SETCONTROLTEXT (где Private Const ID_HELP = &H40E 'Help Button)
не работает (хотя по MSDN с Color вроде как и не должно, там Open/Save упомянаются, но как то нечетко). С Open/Save это работало. Пробовал hwnd, hWndParent ID_CANCEL для проверки - не помогает.
Конечно могу попробовать FindWindow(кнопка)+SetWindowText, но фиг ее знает - на китайском Help по-другому пишется.
Т.е. как -то надо найти ID_HELP.
>3. Как ID_HELP нажать, т.е. вставить код при нажатии.
Для Open/Save

Но здесь это кажется хитрее делается, пока не понял.
>4. окно должно выводиться в районе Picturebox, а не рядом с заголовком формы.
Пытался по простому.

выводит Color под заголовком myForm,
а у меня панель справа - далеко очень выводится
Пробовал
-не хочет перемещать.
Что, только сабклассить, делать SetWindowPos и при этом смотреть "Где Taskbar?", чтоб не вылезла за экран? Ну, в принципе с Open/Save я такое делал, но хотелось нахаляву.

Решение задачи: «Чуть модифицировать Color Common Dialog»

textual
Листинг программы
C.Flags = Flags& Or CC_RGBINIT Or CC_SHOWHELP Or CC_ENABLEHOOK
  C.lpfnHook = FARPROC(AddressOf CCHookProc)
Private Function CCHookProc(ByVal hwnd As Long, _
...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5