Ввод данных

Тема в разделе "WASM.BEGINNERS", создана пользователем catangens, 4 дек 2005.

  1. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    Требуется организовать ввод в программу некоторого числа, я думаю сделать это с помошью АПИ или с++ функции, раз можно сделать так INVOKE MessageBox,0,ADDR ourmessage,ADDR ourtitle,MB_OK, то и должно быть что-то для inputbox, пишу для МАСМ32
     
  2. cresta

    cresta Active Member

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

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Проще всего из командной строки
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    CreateWindowEx(0,"edit",...)
     
  5. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    не ну желательно, чтобы там была строка для ввода (Edit или TextBox в разных языках по разному) и кнопочка для подтверждения ответа
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Тогда проще всего диалогом.
     
  7. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    А можно полную строчку как подключается и куда результат будет выводиться?
     
  8. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
  9. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    ну имхо лучше самому сделать
     
  10. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    ...

    .code



    start:



    MyDlgProc proc hWin:lol: WORD,uMsg:lol: WORD,wParam:lol: WORD,lParam:lol: WORD



    .if uMsg == WM_INITDIALOG

    .elseif uMsg == WM_CLOSE

    quit_dialog:

    invoke EndDialog,hWin,0



    .endif



    xor eax, eax

    ret



    MyDlgProc endp

    ...

    достал из справки вот это, компилит, но при запуске ничего не происходит, даже массаги потом не появляются
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Это что, твоя программа стартует прямо с DlgProc? Круто!

    В файле .rc должен быть диалог типа такого:


    Код (Text):
    1. #define IDD_MAIN 101
    2. #define IDC_EDT1 1001
    3. #define IDC_STC1 1002
    4. IDD_MAIN DIALOGEX 5,5,218,39
    5. CAPTION "DialogApp"
    6. FONT 8,"Tahoma",0,0
    7. STYLE 0x10CE0800
    8. EXSTYLE 0x00000000
    9. BEGIN
    10.   CONTROL "OK",1,"Button",0x50010000,162,17,52,14,0x00000000
    11.   CONTROL "Cancel",2,"Button",0x50010000,78,84,41,12,0x00000000
    12.   CONTROL "",IDC_EDT1,"Edit",0x50010000,3,17,136,14,0x00000200
    13.   CONTROL "Input you data:",IDC_STC1,"Static",0x50000000,5,3,132,10,0x00000000
    14. END




    Это код:


    Код (Text):
    1. .code
    2.  
    3. start:
    4.     invoke  GetModuleHandle,NULL
    5.     mov hInstance,eax
    6.     invoke  InitCommonControls
    7.     invoke  DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL
    8.     invoke  ExitProcess,0
    9.  
    10. ;#####################################################################  ###
    11.  
    12. DlgProc proc    hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    13.     mov eax,uMsg
    14.     .if eax==WM_INITDIALOG
    15.         ;initialization here
    16.     .elseif eax==WM_COMMAND
    17.         mov edx,wParam
    18.         movzx eax,dx
    19.         shr edx,16
    20.         .if edx==BN_CLICKED
    21.             .if eax==IDOK
    22.                 invoke  SendMessage,hWin,WM_CLOSE,NULL,NULL
    23.             .endif
    24.         .endif
    25.     .elseif eax==WM_CLOSE
    26.         invoke  EndDialog,hWin,0
    27.     .else
    28.         mov eax,FALSE
    29.         ret
    30.     .endif
    31.     mov eax,TRUE
    32.     ret
    33. DlgProc endp
    34.  
    35. end start
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    catangens

    Уроки Iczelion'a в помощь.
     
  13. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    .ELSEIF ax==IDM_GETTEXT

    invoke GetWindowText,hwndEdit,ADDR buffer,512

    ; ...

    invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK

    .ELSE

    Я так понимаю вот в это место мне и нужно встраивать код, подскажите как ADDR buffer перевести в число и записать

    в переменную N например
     
  14. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    Прочухал про такие функции atodw и dwtoa, какую библиотеку нужно подключить и как их использовать, например

    может быть что-то в этом роде?:

    mov eax,dwtoa(ADDR buffer)

    а может?:

    dwtoa eax,ADDR buffer
     
  15. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Когда нужно получить данные от юзера, вызываешь

    invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL



    появится диалог из ресурса, в котором юзер заполнит текстовое поле, и нажмёт ОК. При этом в диалоговой процедуре по сообщению WM_CLOSE вставь код получения текста из едита, и сохранение его в глобальный буфер. Диалог выгрузится, а текст останется. После этого можешь взять любую ф-цию, преобразующую строку в число, и получить при её помощи из сохраненного текста нужное тебе значение. Фсё!

    Если не получится - вперед, читать Iczelion.
     
  16. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Открой справку по масму, там есть как вызывать dwtoa. Также можешь посмотреть в \masm32\include\ файл dwtoa.asm, в нем можно сориентироваться, что и как вызвать.



    P.S.

    Если не видел пост перед этим, вернись на предыдущую страницу
     
  17. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    ...

    buffer db 512 dup(?)

    ...

    ...

    ...

    invoke GetWindowText,hwndEdit,ADDR buffer,512

    invoke atodw,ADDR buffer

    ; ...

    invoke dwtoa,ADDR buffer

    invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK



    он говорит что не знает таких функции, какие файлы нужно подключить?



    кстате dwtoa.asm лежит в M32LIB
     
  18. cresta

    cresta Active Member

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

    dwtoa находится в masm32.lib

    GetWindowText

    MessageBox

    посмотри в msdn описание, там есть, в какой библиотеке они находятся.
     
  19. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    Подключил, не помогло, я пользуюсь QEditor-ом, по этому не знаю на какой стадии, просто говорит undefined simbol dwtoa.



    В МСДН не нашел
     
  20. catangens

    catangens New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    25
    Все разобрался сам, всем спасибо!

    Помогите теперь с циклом FOR так и не понял по справке что к чему, лучше пример с описанием, и сразу спрашу: надеюсь для него ничего подключать не надо?