Цвет текста в Edit

Тема в разделе "WASM.WIN32", создана пользователем RDMess, 24 авг 2011.

  1. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    И снова здравствуйте уважаемые!!!

    Вопрос.. какое сообщение нужно послать Edit-y чтобы в итоге активировалось сообщение WM_CTLCOLOREDIT и в нем уже изменить цвет текста в Edit-e ?

    Задача такая, нужно в зависимости от выбора итема со цветом в комбобокс изменить его и в Edit-e. Заранее спасибо!
     
  2. Jura

    Jura New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    10
    Поменять значение цвета, изменяемое в WM_CTLCOLOREDIT и перерисовать окно Edit.
     
  3. s0l3x

    s0l3x New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2011
    Сообщения:
    1
    Такая же проблема.

    Код (Text):
    1. case WM_CTLCOLOREDIT:
    2. {
    3.      SetTextColor((HDC) wParam, RGB (0, 110, 255));
    4.      SetBkMode((HDC) wParam, TRANSPARENT);
    5.      return (LONG) CreateSolidBrush(RGB(215, 235, 255));
    6. }
    Как изменить цвет кисти в процессе выполнения программы?

    Можно пример кода?
     
  4. Jura

    Jura New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    10
    Внутри обработки WM_CTLCOLOREDIT указать цвет не явным образом, а переменную, значение которой просто менять в нужном месте кода. Перерисовка окна делается с помощью InvalidateRect.
     
  5. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Всем снова здравствуйте, вынужден поднять вопрос по причине неработоспособности этого способа на Windows 98

    Код (Text):
    1.  szColor         dd  0000000h,0444444h,0707070h,0101086h,00000FFh,05030E8h,00D24DAh
    2.                    ...........
    3.  
    4.  
    5. .ELSEIF uMsg== WM_CTLCOLOREDIT
    6.             INVOKE GetDlgItem,hWnd,IDC_EDTNAME
    7.             .IF EAX==lParam
    8.                 INVOKE SendDlgItemMessage,hWnd,IDC_CBCOLORNAME,CB_GETCURSEL,0,0
    9.                 INVOKE SetTextColor,wParam,szColor[EAX*4]
    10.             .ENDIF
    11.             INVOKE GetStockObject,DC_BRUSH
    12.             RET
    13. ...................
    14.  
    15.  
    16.  
    17. .ELSEIF AX==IDC_CBCOLORNAME
    18.                     SHR EAX,16
    19.                     .IF EAX==CBN_SELENDOK
    20.                         INVOKE GetDlgItem,hWnd,IDC_EDTNAME
    21.                         INVOKE InvalidateRect,EAX,NULL,FALSE
    22.                     .ENDIF
    23.  
    24. ..............
    Код сводится к тому что при выборе цвета в ComboBox активируется INVOKE InvalidateRect, и заставляет перерисовываться Edit, и в WM_CTLCOLOREDIT выбирается цвет текста из массива цветов.. Дело в том что начиная с Windows 2000 этот код работает прекрасно а в Windows 98 вообще цвет не меняется... Помогите пожалуйста разобраться в чем дело !!!

    С благодарностью за внимание.
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    странно… у меня практически аналогичный код безупречно работал на W98SESP2.
    Единственное, что меня смущает — это
    Попробуйте закомментировать и задать цвет «жёстко».
    Сдаётся мне, что вся проблема в вышецитированной строке.
     
  7. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Только что проверил, всё по старому =(
     
  8. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    У меня просто всё это в диалоговой ф-ии обрабатывается, может я там что-то напартачил ?
    И ещё в этой же функции обрабатываюстя такие сообщения как WM_DRAWITEM, WM_MEASUREITEM, WM_ERASEBKGND, WM_CTLCOLORSTATIC может в win 98 их как то по особу надо обрабатывать.. если понадобится могу выложить как я их обрабатывал
     
  9. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Вопрос решен, всем огромное спасибо..
    Дело было в строчке
    Код (Text):
    1. INVOKE GetStockObject,DC_BRUSH
    WIn98 видимо не понял эту кисть, с WHITE_BRUSH всё прекрасно работает.