считать, подсчитать и вывести сумму чисел

Тема в разделе "WASM.BEGINNERS", создана пользователем xorme, 11 фев 2006.

  1. xorme

    xorme New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2006
    Сообщения:
    5
    Подскажите как…

    Допустим, есть два окна edit и одно button.

    Как после нажатия на button: считать, подсчитать и вывести сумму чисел введённых в edit1+edit2 в центре окна, например?
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Iczeliona почитать слабо??
     
  3. readme

    readme New Member

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

    invoke SendMessage,HWND_Edit,WM_GETTEXTLENGTH,0,0

    invoke SendMessage,HWND_Edit,WM_GETTEXT,eax offset byffer

    для перевода в число поищи тут были такие функции
     
  4. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    "Подскажите как…

    Допустим, есть два окна edit и одно button.

    Как после нажатия на button: считать, подсчитать и вывести сумму чисел введённых в edit1+edit2 в центре окна, например?"



    Вот, так попробуй! Надеюсь разберёшься.

    Оптимизировать не было времени, у кого есть методы лучше пишите сюда.



    .code

    start proc

    LOCAL buf[MAX_LENGTH]:BYTE

    invoke GetWindowText,handleEDIT1,addr buf,MAX_LENGTH

    invoke fromasciitonum,addr buf,eax

    mov ebx,eax

    invoke GetWindowText,handleEDIT2,addr buf,MAX_LENGTH

    add eax,ebx

    invoke fromdectoasci,addr buf,MAX_LENGTH,eax

    invoke SetWindowText,handleEDIT,eax

    ret

    start endp





    fromdectoasci proc uses ecx edx edi buf:lol: WORD,szbuf:lol: WORD,num:lol: WORD

    LOCAL flag:lol: WORD

    mov flag,0



    xor eax,eax

    mov ecx,szbuf

    shr ecx,2

    mov edi,buf

    rep stosd



    dec edi

    mov ecx,10

    mov eax,num



    or eax,eax

    jns trans

    inc flag

    neg eax



    trans:

    xor edx,edx

    div ecx

    add dl,'0'

    mov byte ptr [edi],dl

    dec edi

    or eax,eax

    jnz trans

    mov eax,edi

    and flag,1

    jz notsignum

    mov byte ptr [eax],'-'

    ret

    notsignum:

    inc eax

    ret

    fromdectoasci endp





    fromascitonum proc uses esi edi ebx ecx edx pBuf:lol: WORD,szBuf:lol: WORD

    LOCAL flag:lol: WORD

    LOCAL bufsz:lol: WORD

    and flag,0



    push szBuf

    pop bufsz



    mov esi,pBuf

    .if byte ptr [edi]=='-'

    inc esi

    dec bufsz

    inc flag

    .endif



    xor edi,edi

    xor eax,eax

    xor ebx,ebx



    mov ecx,10

    .while edi<bufsz

    mov bl,byte ptr [esi]

    sub bl,30h

    mul ecx

    add eax,ebx

    inc edi

    inc esi

    .endw



    and flag,1

    jz noflag

    neg eax

    noflag:

    ret

    fromascitonum endp

    end start
     
  5. xorme

    xorme New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2006
    Сообщения:
    5
    а можно весь код целиком?
     
  6. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Можно намного проще,( то для ивращенцев...).

    Ресурсы сам напишешь:



    .386

    .model flat, stdcall ;32 bit memory model

    option casemap :none ;case sensitive



    include \masm32\include\windows.inc

    include \masm32\include\kernel32.inc

    include \masm32\include\user32.inc



    includelib \masm32\lib\kernel32.lib

    includelib \masm32\lib\user32.lib

    IDD_DIALOG1 equ 101

    IDC_BTN2 equ 1001 ;Сложить

    IDC_BTN3 equ 1002 ;Выход

    IDC_EDT1 equ 1003

    IDC_EDT2 equ 1004

    IDC_EDT3 equ 1005 ;Сумма



    DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM



    .data

    first dd 0

    second dd 0

    hInstance dd 0

    .code



    start:



    invoke GetModuleHandle,NULL

    invoke DialogBoxParam,eax,IDD_DIALOG1,NULL,addr DlgProc,NULL

    invoke ExitProcess,0





    DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM



    mov eax,uMsg

    .if eax==WM_INITDIALOG



    .elseif eax==WM_COMMAND



    .if wParam==IDC_BTN2



    invoke GetDlgItemInt,hWin,IDC_EDT1,0,1

    mov ebx,eax

    invoke GetDlgItemInt,hWin,IDC_EDT2,0,1

    add eax,ebx

    invoke SetDlgItemInt,hWin,IDC_EDT3,eax,1



    .elseif wParam==IDC_BTN3

    invoke ExitProcess,0

    .endif

    .elseif eax==WM_CLOSE

    invoke EndDialog,hWin,0

    .else

    mov eax,FALSE

    ret

    .endif

    mov eax,TRUE

    ret



    DlgProc endp



    end start
     
  7. xorme

    xorme New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2006
    Сообщения:
    5
    А как быть с нецелыми числами, и числами превышающими 999999999?
     
  8. xorme

    xorme New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2006
    Сообщения:
    5
  9. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Искать алгоритмы и кодить, кодить...