Проблема с RichEdit

Тема в разделе "WASM.WIN32", создана пользователем Attack, 3 окт 2009.

  1. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    MASM32
    Создаю форму, кидаю на неё Memo и RichEdit.
    Создаю манифест(отдельным файлом <имя файла>.manifest)
    Запускаю, и вижу: Memo отображается в стиле XP, а RichEdit в стиле Win98
    Как заставить RichEdit отображаться в стиле XP?
    P.S. Если нужно могу показать код и скриншот
     
  2. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    бред
     
  3. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    Blackbeam
    сам ты бред, он же не буквально о делфикоде.

    код бы.
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    и манифест бы...
     
  5. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    Скрин:
    [​IMG]

    Код:
    Код (Text):
    1.     .386
    2.     .model flat,stdcall
    3.     option casemap:none
    4.     include \masm32\include\windows.inc
    5.     include \masm32\include\user32.inc
    6.     include \masm32\include\kernel32.inc
    7.     include \masm32\include\gdi32.inc
    8.     include \masm32\include\comdlg32.inc
    9.     include \masm32\include\shell32.inc
    10.     includelib \masm32\lib\user32.lib
    11.     includelib \masm32\lib\kernel32.lib
    12.     includelib \masm32\lib\gdi32.lib
    13.     includelib \masm32\lib\comdlg32.lib
    14.     includelib \masm32\lib\shell32.lib
    15. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    16. RGB macro red,green,blue
    17.     xor        eax,eax
    18.     mov        ah,blue
    19.     shl        eax,8
    20.     mov        ah,green
    21.     mov        al,red
    22. endm
    23. szText MACRO Name,Text:VARARG
    24.     LOCAL    lbl
    25.     jmp        lbl
    26.     Name    db Text,0
    27.     lbl:
    28. ENDM
    29. .const
    30. RichEdit1ID        equ 2
    31. Memo1ID            equ 1
    32. .data?
    33. hwndRichEdit1    HWND ?
    34. hwndMemo1        HWND ?
    35. hInstance        HINSTANCE ?
    36. CommandLine        LPSTR ?
    37. .data
    38. TextRichEdit1    db "RichEdit1",0
    39. TextMemo1        db "Memo1",0
    40. ;_______________
    41. ClassName        db "Class_name",0
    42. BtnClName        db "button",0
    43. StatClName        db "static",0
    44. EditClName        db "edit",0
    45. LboxClName        db "listbox",0
    46. CboxClName        db "combobox",0
    47. ReditClName        db "RICHEDIT20A",0
    48. RichEditLib        db "riched20.dll",0
    49. FormCaption        db "Form",0
    50. ;_______________
    51. .code
    52. start:
    53.     invoke    GetModuleHandle,NULL
    54.     mov        hInstance,eax
    55.     invoke    GetCommandLine
    56.     invoke    WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    57.     invoke    ExitProcess,eax
    58. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    59. LOCAL wc    :WNDCLASSEX
    60. LOCAL msg    :MSG
    61. LOCAL hwnd    :HWND
    62.     mov        wc.cbSize,SIZEOF WNDCLASSEX
    63.     mov        wc.style,CS_BYTEALIGNCLIENT
    64.     mov        wc.lpfnWndProc,offset WndProc
    65.     mov        wc.cbClsExtra,NULL
    66.     mov        wc.cbWndExtra,NULL
    67.     push    hInst
    68.     pop        wc.hInstance
    69.     mov        wc.hbrBackground,COLOR_BTNFACE+1
    70.     mov        wc.lpszClassName,OFFSET ClassName
    71.     invoke    LoadIcon,NULL,IDI_APPLICATION
    72.     mov        wc.hIcon,eax
    73.     mov        wc.hIconSm,eax
    74.     invoke    LoadCursor,NULL,IDC_ARROW
    75.     mov        wc.hCursor,eax
    76.     invoke    RegisterClassEx,addr wc
    77. invoke CreateWindowEx,0,ADDR ClassName,ADDR FormCaption,WS_SYSMENU or WS_SIZEBOX,444,152,211,237,0,0,hInst,0
    78.     mov        hwnd,eax
    79.     INVOKE    ShowWindow,hwnd,SW_SHOWNORMAL
    80.     INVOKE    UpdateWindow,hwnd
    81.     .WHILE TRUE
    82.         invoke    GetMessage,ADDR msg,0,0,0
    83.         .BREAK .IF (!eax)
    84.         invoke    TranslateMessage,ADDR msg
    85.         invoke    DispatchMessage,ADDR msg
    86.     .ENDW
    87.     mov    eax,msg.wParam
    88.     ret
    89. WinMain endp
    90. WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    91.     .IF uMsg == WM_DESTROY
    92.         invoke    PostQuitMessage,NULL
    93.     .ELSEIF uMsg == WM_CREATE
    94.  
    95.  
    96. invoke LoadLibrary,ADDR RichEditLib
    97. invoke CreateWindowEx,0,ADDR ReditClName,ADDR TextRichEdit1,WS_CHILDWINDOW or ES_AUTOHSCROLL or ES_AUTOVSCROLL or ES_NOHIDESEL or ES_SUNKEN or ES_MULTILINE or WS_VSCROLL or WS_HSCROLL or WS_VISIBLE,8,104,185,89,hWnd,RichEdit1ID,hInstance,0
    98.  
    99.  
    100.         mov        hwndRichEdit1,eax
    101. invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR TextMemo1,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_AUTOVSCROLL or ES_MULTILINE or WS_VISIBLE,8,8,185,89,hWnd,Memo1ID,hInstance,0
    102.         mov        hwndMemo1,eax
    103.     .ELSE
    104.         invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
    105.         ret
    106.     .ENDIF
    107.     xor        eax,eax
    108.     ret
    109. WndProc endp
    110. end start
    Манифест:
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    3. <description>Program Description</description>
    4. <assemblyIdentity
    5.     version="1.0.0.0"
    6.     processorArchitecture="X86"
    7.     name="Program Name"
    8.     type="win32"
    9. />
    10. <dependency>
    11.     <dependentAssembly>
    12.         <assemblyIdentity
    13.             type="win32"
    14.             name="Microsoft.Windows.Common-Controls"
    15.             version="6.0.0.0"
    16.             processorArchitecture="X86"
    17.             publicKeyToken="6595b64144ccf1df"
    18.             language="*"
    19.         />
    20.     </dependentAssembly>
    21. </dependency>
    22. </assembly>
     
  6. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Attack
    Т.е. ломаете голову, как бы заставить RichEdit воспроизводить ошибку comctl32 v.6 в стиле XP с WS_EX_CLIENTEDGE у Edit-а ?? :)

    Вы вот задали ващему RichEdit-окну - ES_SUNKEN без WS_EX_CLIENTEDGE.
    Но проверьте стиль созданного окна: оно таки имеет WS_EX_CLIENTEDGE.
    Ага, это обеспечил ES_SUNKEN.
    А могли и просто изначально задать WS_EX_CLIENTEDGE :)

    Короче, RichEdit показывает WS_EX_CLIENTEDGE-границу именно так, как должна выглядеть WS_EX_CLIENTEDGE-граница всякого Edit-а "в стиле XP".

    Вот тут есть кое-что по этой теме:
    http://rsdn.ru/forum/winapi/3217290.all.aspx
    ("Границы edit box").
     
  7. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    kero, простите, я так и не понял что вы мне предлагаете =(

    Для начала что за ошибка "comctl32 v.6 в стиле XP с WS_EX_CLIENTEDGE у Edit-а" ?

    Далее, я заменил ES_SUNKEN на WS_EX_CLIENTEDGE, вот результат:
    [​IMG]

    Также почитал топик по вашей ссылке, но там про то как отключить XP Стиль...
    Короче, даже команда SetWindowTheme, hwndRichEdit1, 0, 0 не включает стиль для RichEdit'а
     
  8. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    > Для начала что за ошибка "comctl32 v.6 в стиле XP с WS_EX_CLIENTEDGE у Edit-а" ?

    Если не поняли: для Edit утрачена "углубленность" границы от WS_EX_CLIENTEDGE, и многие тому не рады (что видно и по той ссылке).

    Но в вашем случае, оказывается, все наоборот.
    Ну, тогда почитайте, к примеру, это:
    http://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c8729
    ("XP Theme Support for Rich Edit and Custom Controls").
     
  9. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    kero, да пример в статье действительно работает!
    Однако, пока я перепишу всё это дело на асм, я с ума сойду.
    Ну что же придётся пока довольствоваться старым RichEdit'ом

    Кстати, я заметил одну особенность, если взять библиотеку RichEd20.dll от MS Office 2007 и положить её в папку с программой, то RichEdit отображается как надо!
    Вот:
    [​IMG]
     
  10. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    насчот бреда извиняюсь, никогда не забивал голову ..этим , без рамки ричэдит смотрится лучшее, комер - буратино

    попробуй загнать манифест в ресурсы ... это нужно делать в любом случае...
     
  11. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Attack
    На бОльшие усилия, чем кинуть или положить, не согласны, значит...
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Blackbeam
    Да ну? :)
     
  13. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    Blackbeam, положение манифеста(внутри или снаружи) роли не играет, всё отображается одинаково.

    kero, "кинуть или положить" это не вариант, я просто привёл пример.
    Усилия тут тоже не при чём, я просто не смогу этого сделать, т.к. изучаю асм первую неделю...
     
  14. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    значит -нужно 2 манифеста : [имя программы].manifest и RICHED20.manifest
     
  15. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
     
  16. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    согласен
    --------------
    а нет у кого нить работающего кода на масме - чтобы ричэдит выравнивал текст по краям страницы? буду благодарен не смог сам разобраться ... там нужно вызывать парочку функций и есчо что-то ...

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