Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поле для ввода и кнопка 
:(
    Опции темы
PosiTive
Дата 15.12.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



Подскажите как на MASM32 разместить в окне поле для ввода (как TEdit в Delphi) и кнопку.
Заранее всем спасибо!
PM MAIL   Вверх
W4FhLF
Дата 15.12.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



\masm32\examples\


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
anwe
Дата 16.12.2006, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Код

invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr EditClassName,\
    NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
    ES_AUTOHSCROLL,50,35,200,25,hwnd,EditID,hinstance,NULL     ;числа - координаты - произвольные

invoke    CreateWindowEx,NULL,addr ButtonClassName,addr ButtonTest,\
    WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,
    75,70,140,25,hwnd,ButtonID,hinstance,NULL    ;числа - координаты - произвольные

либо через файл ресурсов.
PM MAIL   Вверх
PosiTive
Дата 18.12.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



anwe, 
большое спасибо за код. Но к сожалению я не знаю как найти ButtonID и EditID, и как ловить значения из edit'ов при нажатии на кнопку.

Всем,
Люди. Если кому-нибудь будет не трудно, подскажите как написать к примеру программу где 2 edit'a, 1 кнопка при нажатии на кнопку значения из edit'ов складываются и результат выводится ввиде сообщения. Буду ОЧЕНЬ сильно благодарен!!!
PM MAIL   Вверх
anwe
Дата 18.12.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Цитата(PosiTive @  18.12.2006,  17:40 Найти цитируемый пост)
Но к сожалению я не знаю как найти ButtonID и EditID
Ты их сам задаешь в разделе .const.
В общем смотри пример, хоть там и с одним полем. Так проще, потому как в предлагаемом тобой примере надо фильтровать ввод в поле. А для примера вполне сойдет и этот.
Код

    .386
    .model flat,stdcall
    option casemap:none

WinMain    proto :DWORD,:DWORD,:DWORD,:DWORD

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

    .data
ClassName    db    "MyClass",0
Zagolovok        db    "Hello",0
ButtonClassName    db    "button",0
ButtonText    db    "Click me",0
EditClassName    db    "edit",0

    .data?
hinstance HINSTANCE ?
CommandLine LPSTR ?
hwndButton HWND ?
hwndEdit HWND ?
buf    db    512 dup(?)

    .const
ButtonID    equ    1
EditId        equ    2

    .code
start:
    invoke    GetModuleHandle,NULL
    mov    hinstance,eax
    invoke    GetCommandLine
    mov    CommandLine,eax
    invoke    WinMain,hinstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke    ExitProcess,eax

WinMain    proc    hinst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:DWORD,CmdShow:DWORD
LOCAL    wc:WNDCLASSEX
LOCAL    msg:MSG
LOCAL    hwnd:HWND
    mov    wc.cbSize,SIZEOF WNDCLASSEX
    mov    wc.style,CS_HREDRAW or CS_VREDRAW
    mov    wc.lpfnWndProc,offset WndProc
    mov    wc.cbClsExtra,NULL
    mov    wc.cbWndExtra,NULL
    push    hinst
    pop    wc.hInstance
    mov    wc.hbrBackground,COLOR_BTNFACE+1
    mov    wc.lpszMenuName,NULL
    mov    wc.lpszClassName,offset ClassName
    invoke    LoadIcon,NULL,IDI_APPLICATION
    mov    wc.hIcon,eax
    mov    wc.hIconSm,eax
    invoke    LoadCursor,NULL,IDC_ARROW
    mov    wc.hCursor,eax
    invoke    RegisterClassEx,addr wc
    invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr ClassName,\
        addr Zagolovok,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
        CW_USEDEFAULT,300,200,NULL,NULL,hinst,NULL
    mov    hwnd,eax
    invoke    ShowWindow,hwnd,SW_SHOWNORMAL
    invoke    UpdateWindow,hwnd
.WHILE TRUE
    invoke    GetMessage,addr msg,NULL,0,0
.BREAK .IF(!eax)
    invoke    TranslateMessage,addr msg
    invoke    DispatchMessage,addr msg
.ENDW
    mov    eax,msg.wParam
    ret
WinMain    endp

WndProc    proc    hwnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_DESTROY
    invoke    PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
    invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr EditClassName,\
        NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
        ES_AUTOHSCROLL,50,35,200,25,hwnd,8,hinstance,NULL
    mov    hwndEdit,eax
    invoke    SetFocus,hwndEdit
    invoke    CreateWindowEx,NULL,addr ButtonClassName,addr ButtonText,\
        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,
        75,70,140,25,hwnd,ButtonID,hinstance,NULL
    mov    hwndButton,eax
.ELSEIF uMsg==WM_COMMAND
    mov    eax,wParam
    .IF ax==ButtonID
        shr    eax,16
            .IF ax==BN_CLICKED
            invoke    GetWindowText,hwndEdit,addr buf,512
            invoke    MessageBox,hwnd,addr buf,addr Zagolovok,MB_OK
            .ENDIF
    .ENDIF
.ELSE
    invoke    DefWindowProc,hwnd,uMsg,wParam,lParam
    ret
.ENDIF
    xor    eax,eax
    ret
WndProc    endp

end    start

PM MAIL   Вверх
PosiTive
Дата 19.12.2006, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



anwe, 
Огромное спасибо, разобрался!!!

p.s: добавил бы репутации, но не могу (<100 сообщений). А так Respect!
PM MAIL   Вверх
PosiTive
Дата 20.12.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



блин... так и не получается сделать перевод из строки->в число и обратно, а зачет завтра... выручайте!
p.s: нужно к вышеописанной программе добавить сложение двух чисел введенных в 2 поля для ввода и вывод messagebox'a....
PM MAIL   Вверх
W4FhLF
Дата 20.12.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Ну есть же стандартные функции в masm32.lib на худой конец:

invoke DW2A, dwValue, offset lpBuffer 
invoke A2DW, offset a2dw


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
PosiTive
Дата 20.12.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



W4FhLF, 
кстати как эту библиотечку подключить? 

 smile  smile  smile  smile  smile 
PM MAIL   Вверх
W4FhLF
Дата 20.12.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



include masm32.inc
includelib masm32.lib


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
PosiTive
Дата 20.12.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



ну masm32.inc хрен с ним лежит в m32lib и include,
а masm32.lib где? в папке либ его нет!  smile 
пишет ошибку undefauned symbol: D2WA

Добавлено @ 20:51 
кто-нибудь отпишите рабочий пример: 2 поля, 1 кнопка, при нажатии на кнопку выдается сообщение с результатом суммы.
Завтра нужно сдать, срочно!
К ответу приложите номер WMR кошелька, в следующий понедельник отправлю туда компенсацию! 

Это сообщение отредактировал(а) PosiTive - 20.12.2006, 20:48
PM MAIL   Вверх
anwe
Дата 20.12.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Давай я тебе подправлю то, что уже отправил. Подойдет?
PM MAIL   Вверх
PosiTive
Дата 20.12.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



anwe,  да !
PM MAIL   Вверх
anwe
Дата 20.12.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Чем добавлять, чтобы не рассказывать что куда, проще переделать. Вот:
Код

    .386
    .model flat,stdcall
    option casemap:none

WinMain    proto :DWORD,:DWORD,:DWORD,:DWORD

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

    .data
ClassName    db    "MyClass",0
Zagolovok        db    "Hello",0
ButtonClassName    db    "button",0
ButtonText    db    "Click me",0
EditClassName    db    "edit",0

    .data?
hinstance HINSTANCE ?
CommandLine LPSTR ?
hwndButton HWND ?
hwndEdit1 HWND ?
hwndEdit2 HWND ?
buf    db    512 dup(?)

    .const
ButtonID    equ    1
EditId        equ    2

    .code
start:
    invoke    GetModuleHandle,NULL
    mov    hinstance,eax
    invoke    GetCommandLine
    mov    CommandLine,eax
    invoke    WinMain,hinstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke    ExitProcess,eax

WinMain    proc    hinst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:DWORD,CmdShow:DWORD
LOCAL    wc:WNDCLASSEX
LOCAL    msg:MSG
LOCAL    hwnd:HWND
    mov    wc.cbSize,SIZEOF WNDCLASSEX
    mov    wc.style,CS_HREDRAW or CS_VREDRAW
    mov    wc.lpfnWndProc,offset WndProc
    mov    wc.cbClsExtra,NULL
    mov    wc.cbWndExtra,NULL
    push    hinst
    pop    wc.hInstance
    mov    wc.hbrBackground,COLOR_BTNFACE+1
    mov    wc.lpszMenuName,NULL
    mov    wc.lpszClassName,offset ClassName
    invoke    LoadIcon,NULL,IDI_APPLICATION
    mov    wc.hIcon,eax
    mov    wc.hIconSm,eax
    invoke    LoadCursor,NULL,IDC_ARROW
    mov    wc.hCursor,eax
    invoke    RegisterClassEx,addr wc
    invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr ClassName,\
        addr Zagolovok,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
        CW_USEDEFAULT,300,200,NULL,NULL,hinst,NULL
    mov    hwnd,eax
    invoke    ShowWindow,hwnd,SW_SHOWNORMAL
    invoke    UpdateWindow,hwnd
.WHILE TRUE
    invoke    GetMessage,addr msg,NULL,0,0
.BREAK .IF(!eax)
    invoke    TranslateMessage,addr msg
    invoke    DispatchMessage,addr msg
.ENDW
    mov    eax,msg.wParam
    ret
WinMain    endp

WndProc    proc    hwnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_DESTROY
    invoke    PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
    invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr EditClassName,\
        NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
        ES_AUTOHSCROLL,50,35,200,25,hwnd,8,hinstance,NULL
    mov    hwndEdit1,eax
    invoke    CreateWindowEx,WS_EX_CLIENTEDGE,addr EditClassName,\
        NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
        ES_AUTOHSCROLL,50,105,200,25,hwnd,8,hinstance,NULL
    mov    hwndEdit2,eax
    invoke    SetFocus,hwndEdit1
    invoke    CreateWindowEx,NULL,addr ButtonClassName,addr ButtonText,\
        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,
        75,70,140,25,hwnd,ButtonID,hinstance,NULL
    mov    hwndButton,eax
.ELSEIF uMsg==WM_COMMAND
    mov    eax,wParam
    .IF ax==ButtonID
        shr    eax,16
            .IF ax==BN_CLICKED
            push    esi
            push    edi
            push    ebx
            invoke    GetWindowText,hwndEdit1,addr buf,512
            invoke    lstrlen,addr buf
            mov    esi,eax
            xor    edi,edi
            xor    eax,eax
            xor    ebx,ebx
            mov    cx,10
l1:
            mov    bl,byte ptr buf[edi]
            sub    bl,'0'
            jb    error
            cmp    bl,9
            ja    error
            mul    cx
            add    eax,ebx
            inc    edi
            cmp    edi,esi
            jb    l1
            push eax
            invoke    GetWindowText,hwndEdit2,addr buf,512
            invoke    lstrlen,addr buf
            mov    esi,eax
            xor    edi,edi
            xor    eax,eax
            xor    ebx,ebx
            mov    cx,10
l2:
            mov    bl,byte ptr buf[edi]
            sub    bl,'0'
            jb    error
            cmp    bl,9
            ja    error
            mul    cx
            add    eax,ebx
            inc    edi
            cmp    edi,esi
            jb    l2
            pop    ebx
            add    eax,ebx
            push    ax
            mov    dl,al
            and    al,0Fh
            cmp    al,10
            sbb    al,69h
            das
            mov    bh,al
            mov    al,dl
            shr    al,4
            cmp    al,10
            sbb    al,69h
            das
            mov    bl,al
            shl    ebx,16
            pop    ax
            xchg    ah,al
            mov    dl,al
            and    al,0Fh
            cmp    al,10
            sbb    al,69h
            das
            mov    bh,al
            mov    al,dl
            shr    al,4
            cmp    al,10
            sbb    al,69h
            das
            mov    bl,al
            mov    dword ptr buf,ebx
            invoke    MessageBox,hwnd,addr buf,addr Zagolovok,MB_OK
            pop    ebx
            pop    edi
            pop    esi
error:
            .ENDIF
    .ENDIF
.ELSE
    invoke    DefWindowProc,hwnd,uMsg,wParam,lParam
    ret
.ENDIF
    xor    eax,eax
    ret
WndProc    endp

end    start

PM MAIL   Вверх
PosiTive
Дата 20.12.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.12.2006

Репутация: нет
Всего: нет



замечательно, только маленькая корректировка, нужно что-бы вычисления проходили в десятичной системе.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.