SetDlgItemText

Тема в разделе "WASM.BEGINNERS", создана пользователем ragim, 9 июл 2011.

  1. ragim

    ragim New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2010
    Сообщения:
    47
    Я использую SetDlgItemText чтобы писать строку на кириллице в Edit. в окне отображается все нормально но когда я копирую из окна в текстовый фаил копируется ерунда типа: ýòî ïëîõî .как исправить?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    но когда я копирую из окна в текстовый фаил копируется ерунда
    Используй другой редактор, который поддерживает копирование уникода...
     
  3. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Выложите код, если не сложно.
     
  4. ragim

    ragim New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2010
    Сообщения:
    47
    в DlgProc
    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\user32.inc
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\user32.lib
    9. includelib \masm32\lib\kernel32.lib
    10.  
    11. DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    12.  
    13. .data
    14. DlgName db "MyDialog",0
    15. AppName db "TransliT",0
    16. TestString db "Wow! I'm in an edit box now",0
    17. trans1  db  "abvgdeiklmnoprtfhx#y'wu"
    18. trans2  db  "абвгдеиклмнопртфххъыьщу"
    19. trans1_c  db  "ABVGDEIKLMNOPRTFHX#Y'WU"
    20. trans2_c  db  "АБВГДЕИКЛМНОПРТФХХЪЫЬЩУ"
    21. trans1_com_c    db  "JoYoZhChShJaYaJeYeJuYu"
    22. trans2_com_c    db  "ЁЁЖЧШЯЯЭЭЮЮ"
    23. trans1_com  db  "joyozhchshjayajeyejuyu"
    24. trans2_com  db  "ёёжчшяяээюю"
    25. trans1_com_s    db  "jsycz"
    26. trans2_com_s    db  "йсыцз"
    27. trans1_com_s_c  db  "JSYCZ"
    28. trans2_com_s_c  db  "ЙСЫЦЗ"
    29.  
    30.  
    31. .data?
    32. hInstance HINSTANCE ?
    33. CommandLine LPSTR ?
    34. buffer_i db 305 dup(?)
    35. buffer_o db 305 dup(?)
    36. CAPITAL  db ?
    37. COMPLEX_CAPITAL db ?
    38. strlen  dw  ?
    39. strl    dd  ?
    40.  
    41. .const
    42. IDC_EDIT        equ 3000
    43. IDC_BUTTON      equ 3001
    44. IDC_EXIT        equ 3002
    45. IDC_EDIT1       equ 3003
    46.  
    47. .code
    48. start:
    49.     invoke GetModuleHandle, NULL
    50.     mov    hInstance,eax
    51.     invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
    52.     invoke ExitProcess,eax
    53.  
    54. DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    55.     .IF uMsg==WM_INITDIALOG
    56.         invoke GetDlgItem, hWnd,IDC_EDIT
    57.         invoke SetFocus,eax
    58.     .ELSEIF uMsg==WM_CLOSE
    59.         invoke EndDialog, hWnd,NULL
    60.     .ELSEIF uMsg==WM_COMMAND
    61.         mov eax,wParam
    62.         .IF lParam==0
    63.             ;.IF ax==IDM_GETTEXT
    64.             ;   invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512
    65.             ;   invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
    66.             ;.ELSEIF ax==IDM_CLEAR
    67.             ;   invoke SetDlgItemText,hWnd,IDC_EDIT,NULL
    68.             ;.ELSEIF ax==IDM_EXIT
    69.             ;   invoke EndDialog, hWnd,NULL
    70.             ;.ENDIF
    71.         .ELSE
    72.             mov edx,wParam
    73.             shr edx,16
    74.             .if dx==BN_CLICKED
    75.                 .IF ax==IDC_BUTTON
    76.                               invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer_i,303
    77.                               mov   strl, eax
    78.                               call  translate
    79.   >>>>!!!!!!!!!!!!!>>>>>   invoke SetDlgItemText,hWnd,IDC_EDIT1,ADDR buffer_o
    80.                         .ELSEIF ax==IDC_EXIT
    81.                     invoke EndDialog, hWnd,NULL
    82.                 .ENDIF
    83.             .ENDIF
    84.         .ENDIF
    85.     .ELSE
    86.         mov eax,FALSE
    87.         ret
    88.     .ENDIF
    89.     mov eax,TRUE
    90.     ret
    91. DlgProc endp
    92.  
    93. translate   proc
    94.  xor ebx, ebx
    95.  xor eax, eax
    96.  xor edx, edx
    97.  lea edi, buffer_i
    98.  lea esi, buffer_o
    99.  mov ebx, edi
    100.  mov ecx, 350d
    101.  repne   scasb
    102.  sub edi, ebx
    103.  dec    edi
    104.  mov strlen, di
    105.  cmp    edi, strl
    106.  je @1
    107.  invoke MessageBox,NULL,ADDR TestString,ADDR AppName,MB_OK
    108.  @1:
    109. xor ecx,ecx
    110. begin:
    111.     push    edx
    112.     xor ebx, ebx
    113.     xor eax, eax
    114.     lea edi, buffer_i
    115.     lea esi, buffer_o
    116.     mov al, byte ptr [edi+ecx]
    117.     cmp al, "A"
    118.     jge  @2
    119.     cmp al, "'"
    120.     je  cont
    121.     jmp done
    122. @2:
    123.     cmp al, "Z"
    124.     jg  check
    125.     mov edx, 1
    126.     mov CAPITAL, dl
    127.     mov COMPLEX_CAPITAL, dl
    128.     jmp cont
    129.  
    130. check:
    131.     xor edx, edx
    132.     mov CAPITAL, dl
    133.     mov COMPLEX_CAPITAL, dl
    134.     cmp al, "a"
    135.     jl  done
    136.     cmp al, "z"
    137.     jg  done
    138. cont:
    139.     test edx, edx
    140.     jnz  capit1
    141.     cmp al, "j"
    142.     je  complex
    143.     cmp al, "s"
    144.     je  complex
    145.     cmp al, "y"
    146.     je  complex
    147.     cmp al, "c"
    148.     je  complex
    149.     cmp al, "z"
    150.     je  complex
    151.     jmp m3
    152. capit1:
    153.     cmp al, "J"
    154.     je  complex
    155.     cmp al, "S"
    156.     je  complex
    157.     cmp al, "Y"
    158.     je  complex
    159.     cmp al, "C"
    160.     je  complex
    161.     cmp al, "Z"
    162.     je  complex
    163. m3:
    164.     xor edx, edx
    165.     mov dl, CAPITAL
    166.     test edx, edx
    167.     jnz capit2  
    168.  
    169.    
    170.     lea edi, trans1
    171.     mov ebx, edi
    172.     push    ecx
    173.     mov ecx, 50
    174.     repne scasb
    175.     pop ecx
    176.     sub edi, ebx
    177.     dec edi
    178.     mov ebx, edi
    179.     lea edi, trans2
    180.     mov al, byte ptr [edi+ebx]
    181.     jmp done
    182.  
    183. capit2:
    184.     lea edi, trans1_c
    185.     mov ebx, edi
    186.     push    ecx
    187.     mov ecx, 50
    188.     repne scasb
    189.     pop ecx
    190.     sub edi, ebx
    191.     dec edi
    192.     mov ebx, edi
    193.     lea edi, trans2_c
    194.     mov al, byte ptr [edi+ebx]
    195.     jmp done
    196.  
    197.    
    198.  
    199. complex:
    200.     lea edi, buffer_i
    201.     mov edx, ecx
    202.     inc dx
    203.     cmp DX, strlen
    204.     je  notcomp
    205.     inc ecx
    206.     mov ah, byte ptr [edi+ecx]
    207.     mov dl, COMPLEX_CAPITAL
    208.     test dl,dl
    209.     jz smal1
    210.     cmp ah, 60h
    211.     jg  sk1
    212.     add ah, 20h
    213. sk1:
    214.     lea edi, trans1_com_c
    215.     mov ebx, edi
    216.     push    ecx
    217.     mov ecx, 15
    218.     repne scasw
    219.     pop ecx
    220.     sub edi, ebx
    221.     dec edi
    222.     mov ebx, edi                ;Щ!!!
    223.     cmp ebx, 24
    224.     jg  smp_c
    225.     shr ebx, 1
    226.     cmp ebx, 4
    227.     jne n2
    228.     lea edi, buffer_i
    229.     mov dl, [edi+ecx+1]
    230.     cmp dl, "h"
    231.     je n3
    232.     jmp n2
    233.     cmp dl, "H"
    234.     jne n2
    235. n3:
    236.     inc ecx
    237.     mov al, "Щ"
    238.     jmp done
    239. n2:
    240.     lea edi, trans2_com_c
    241.     mov al, byte ptr [edi+ebx]
    242.     jmp done
    243.  
    244. smp_c:
    245.     dec ecx
    246. smp_c_1:
    247.     lea edi, trans1_com_s_c
    248.     mov ebx, edi
    249.     push    ecx
    250.     mov ecx, 15
    251.     repne scasb
    252.     pop ecx
    253.     sub edi, ebx
    254.     dec edi
    255.     mov ebx, edi
    256.     lea edi, trans2_com_s_c
    257.     mov al, byte ptr [edi+ebx]
    258.     jmp done
    259.  
    260. smal1:
    261.     lea edi, trans1_com
    262.     mov ebx, edi
    263.     push    ecx
    264.     mov ecx, 15
    265.     repne scasw
    266.     pop ecx
    267.     sub edi, ebx
    268.     dec edi
    269.     mov ebx, edi                ;Щ!!!
    270.     cmp ebx, 24
    271.     jg  smp
    272.     shr ebx, 1
    273.     cmp ebx, 4
    274.     jne n1
    275.     lea edi, buffer_i
    276.     mov dl, [edi+ecx+1]
    277.     cmp dl, "h"
    278.     jne n1
    279.     inc ecx
    280.     mov al, "щ"
    281.     jmp done
    282. n1:
    283.     lea edi, trans2_com
    284.     mov al, byte ptr [edi+ebx]
    285.     jmp done
    286.    
    287. smp:
    288.     dec ecx
    289. smp_1:
    290.     lea edi, trans1_com_s
    291.     mov ebx, edi
    292.     push    ecx
    293.     mov ecx, 12
    294.     repne scasb
    295.     pop ecx
    296.     sub edi, ebx
    297.     dec edi
    298.     mov ebx, edi
    299.     lea edi, trans2_com_s
    300.     mov al, byte ptr [edi+ebx]
    301.     jmp done
    302.  
    303. notcomp:
    304.     mov dl, COMPLEX_CAPITAL
    305.     test    dl,dl
    306.     jz  smp_1
    307.     jmp smp_c_1
    308.     ret
    309. done:
    310.     pop edx
    311.     mov [esi+edx], al
    312.     inc ecx
    313.     push    edx
    314.     xor edx, edx
    315.     mov CAPITAL, dl
    316.     mov COMPLEX_CAPITAL, dl
    317.     pop edx
    318.     inc edx
    319.     cmp cx, strlen
    320.     jne begin
    321.     xor eax, eax
    322.     mov [esi+edx], eax
    323.     ret
    324. translate   endp
    325.  
    326. end start