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

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

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

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

ChooseColor

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

Решение задачи: «ChooseColor ! предварительные настройки»

textual
Листинг программы
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

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


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

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

15   голосов , оценка 3.933 из 5
Похожие ответы