Board.KolibriOS.org
http://board.kolibrios.org/

Message Box
http://board.kolibrios.org/viewtopic.php?f=45&t=1241
Page 1 of 4

Author:  IgorA [ Sat Mar 14, 2009 2:21 pm ]
Post subject:  Message Box

Решил написать программу для вывода сообщений (или MessageBox).
Текст в окно передается через IPC сообщение.
В коде программы нужно объявить: заголовок, текст, подписи кнопок. Потом передать их окну :
Code:
msgbox_2:
  dw 0
  db 'MBox 3 but',0
  db 'Example 3 buttons',0
  db 'Ok',0 ;button1
  db 'Cancel',0 ;button2
  db 'Help',0 ;button3
  db 0
.mb_end:

Подробный пример использования в файле use_mb.asm .
Скомпилированный пример в файле use_mb.kex .
---
Думаю что можно стандартизировать этот пример и использовать в любой программе.
Также жду замечаний и идей по доработке ...

Attachments:
File comment: 14.03.2009
msgbox.7z [4.43 KiB]
Downloaded 215 times

Author:  Albom [ Sun Mar 15, 2009 8:54 am ]
Post subject:  Re: Message Box

отличная работа! но может лучше было создание MessageBox оформить в виде библиотеки (.obj)? так пользователям более привычно, чем IPC. а создание окна сделать, естественно, в отдельном потоеке...

Author:  s1n [ Sun Mar 15, 2009 2:58 pm ]
Post subject:  Re: Message Box

IgorA,
хорошая работа....

Albom,
поддерживаю... *.obj не помешал бы...

Author:  Janik [ Sun Mar 15, 2009 5:48 pm ]
Post subject:  Re: Message Box

IgorA, молодца, так держать!
Quote:
*.obj не помешал бы...

Author:  IgorA [ Sun Mar 15, 2009 8:50 pm ]
Post subject:  Re: Message Box

Если сделать в библиотеке, то думаю будет удобнее использовать.
Сообщение должно давать ответ, какая кнопка нажата, а через IPC это не очень удобно будет сделать.
Надо будет над этим подумать, раньше пока еще не писал библиотеки.

Author:  IgorA [ Tue Mar 17, 2009 1:13 am ]
Post subject:  Re: Message Box

Хочу переписать код в библиотеку, а компилятор выдает ошибку на подобные строки :( :
Code:
  mov esi,msgbox_1+MB_TEXT_OFFSET
.........
msgbox_1:

т. е. не дает адрес (смещение) переменной (или метки) msgbox_1 записать в регистр
Убираю из кода строки:
Code:
format MS COFF
public EXPORTS
section '.flat' code readable align 16

компилируется нормально (но в бинарник, а мне нужно obj получить).
Кто знает как получить адрес, чтобы заработало ? Я так думаю, что когда создается библиотека переменные не имеют адресов, потому что не известно куда будет присоедина библиотека... а может я не прав ?

Author:  diamond [ Tue Mar 17, 2009 1:33 am ]
Post subject:  Re: Message Box

Полный код в студию. Сами по себе приведённые строчки должны скомпилироваться. Если в начале ранее выкладываемого исходника написать "format MS COFF / section '.flat' code readable align 16", то код прекрасно компилится в obj (хотя, разумеется, результат никак не является библиотекой).

Author:  IgorA [ Tue Mar 17, 2009 1:45 am ]
Post subject:  Re: Message Box

даю код.

Author:  Mario [ Tue Mar 17, 2009 9:31 am ]
Post subject:  Re: Message Box

IgorA
Нужно принудительно указывать размерность, вместо:
Code:
mov edi,msgbox_1

сделать так:
Code:
mov edi,dword msgbox_1

Ну, и так далее во всех местах где FASM ругается.

Author:  diamond [ Tue Mar 17, 2009 10:24 am ]
Post subject:  Re: Message Box

macros.inc делает замену для mov, которая не работает в случае компиляции в obj. Просто добавь "purge mov" после включения macros.inc.

Author:  IgorA [ Tue Mar 17, 2009 7:38 pm ]
Post subject:  Re: Message Box

все получилось :D
вот теперь через библиотеку сделал, и кроме того несколько доработок ...
код нажатой кнопки возвращается в вызвавшую программу

Attachments:
File comment: 17.03.2009
msgbox.7z [5.65 KiB]
Downloaded 199 times

Author:  Albom [ Wed Mar 18, 2009 10:35 am ]
Post subject:  Re: Message Box

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

Author:  s1n [ Wed Mar 18, 2009 2:00 pm ]
Post subject:  Re: Message Box

Albom, есть исходники же.. =)))... так что исправь как лучше будет...

Author:  IgorA [ Wed Mar 18, 2009 6:14 pm ]
Post subject:  Re: Message Box

Albom
Quote:
функции не stdcall?

Т. е. параметры передаются не через стек? Это потому что я пока не очень хорошо знаю подходы программирования на asm, потому параметры давал через регистры. А в справочных документах обычно дается простое описание команд: какая что делает, без практических применений.
Quote:
хотелось бы... и описания

описание дать могу, но для этого нужно некоторое время

Хорошо бы еще:
1) немного поменять алгоритм перемещения кнопками,
2) более точно вычислить координаты окна (ширину, и наверное в центр окна его надо)
3) продумать задержку выполнения программы, пока не будет нажата кнопка (т. е. создать модальное окно)
4) продумать как будет работать программа если нужно создать несколько сообщений
вобщем есть еще над чем подумать

Author:  vkos [ Wed Mar 18, 2009 7:19 pm ]
Post subject:  Re: Message Box

IgorA
По поводу stdcall и вообще библиотек можно посмотреть исходники libs-dev.

Page 1 of 4 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/