проблема при смене цвета шрифта в Static

Тема в разделе "WASM.WIN32", создана пользователем ActioN, 17 июн 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Хочу поменять цвет шрифта у Static контрола, используя такой код:
    Код (Text):
    1.      .ELSEIF uMsg == WM_CTLCOLORSTATIC
    2.          invoke GetDlgCtrlID,lParam
    3.          .IF EAX == staticID
    4.              RGB    55,155,255
    5.              invoke SetTextColor,wParam,eax
    6.              invoke GetStockObject,NULL_BRUSH
    7.          .ENDIF


    Но он отказывается работать. Почему?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    После .ENDIF что?
     
  3. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    После .ENDIF ничего (в плане Статика)... а вобще .ELSE

    А что после .ENDIF Должно быть?
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
  5. santOS

    santOS New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2005
    Сообщения:
    6
    Адрес:
    Russia
    Поставь DefWindowProc перед SetTextColor.. ;)
     
  6. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    нда ребята :\


    Код (Text):
    1.  
    2. proc _dlgproc, hWnd,wMsg,wParam,lParam
    3.   push ebx esi edi
    4.   cmp [wMsg],WM_COLORSTATIC
    5.   jz .wmcolorstatic
    6.  
    7. <...>
    8.  
    9. .wmcolorstatic:
    10.      invoke GetDlgCtrlID,[lParam]
    11.      or     eax,eax
    12.      jz     .processed
    13.  
    14.      cmp ID_STATIC,eax
    15.      jnz .processed
    16.  
    17.      invoke SetBkMode,[wParam],TRANSPARENT
    18.      invoke SetTextColor,[wParam],0x0FF00FF
    19.      invoke GetStockObject,NULL_BRUSH
    20.      jmp .finish
    21.  
    22. <...>
    23.  
    24. .processed:
    25.     xor  eax,eax
    26.     inc eax
    27.  
    28. .finish:
    29.      pop edi esi ebx
    30.      ret ; новая версия fasm'а
    31.  
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Avoidik

    Почему не WM_CTLCOLORSTATIC? Эта константа правильно определена? ID_STATIC точно совпадает? Остальное всё верно.
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Avoidik

    Если устанавливаешь SetBkMode, то надо бы позаботиться, чтобы предыдущий текст стереть, а то новый текст выводится поверх другого :dntknw:
     
  9. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    Quantum, на скорую руку писал, первое, там CTL и второе - лучше cmp eax,ID_STATIC (это идентификатор ресурса)



    cresta, попробуй OPAQUE поставить
     
  10. santOS

    santOS New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2005
    Сообщения:
    6
    Адрес:
    Russia
    Avoidik

    если диалог с фоном (напр. на табе в ХР) надо DefWindowProc, потом изменить цвет и вернуть кисть с DefWindowProc.. это правильно!!! и гарантированно работает!!! ;)
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    santOS

    Какой ещё фон? Что вы человека путаете?



    Avoidik



    Так мы на кофейной гуще гадаем... Плохо :dntknw: Аттачте весь код.
     
  12. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    q_q, спасибо за хороший пример, но я в С++ неочень разбираюсь.

    Вот выкладываю аттач, может вам будет лучше понять, что я там написал.



    P.S. вопрос несовсем по теме: Почему удалили мою тему под названием "Соединение двух строк" (Дата: Июн 17, 2005 23:24:48). Quantum вчера еще дал мне совет по той теме, потом я задал еще один вопрос, ... через пару часов зашел просмотреть, а ее уже небыло. Скажите хоть, по каким причинам ее удалили, или это технические неполадки?



    [​IMG] 1645334280__TextColor.rar
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Её не удалили. Вот она. Модераторы перенесли тему в соответствующий раздел форума.



    Ваша прога не работает вот почему:
    Код (Text):
    1. invoke GetStockObject,NULL_BRUSH


    Тут в eax возвращается хэндл прозрачной кисти.
    Код (Text):
    1. .ENDIF
    2.      xor      eax,eax


    А тут вы сами перезаписываете значение в eax. Прямо после GetStockObject вставьте ret.
     
  14. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    If an application processes this message, the return value is a handle to a brush that the system uses to paint the background of the static control



    То, что вернулось в eax из GetStockObject, винде ещё нужно, поэтому его терять нельзя, нужно его передать в том же eax.
     
  15. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    О великий джа !!!! Посыпаю голову пеплом !!! наконец-то программа заработала)) Большое всем спасибо за помощь!