Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Dec 10, 2019 12:49 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 55 posts ]  Go to page 1 2 3 4 Next
Author Message
 Post subject: Message Box
PostPosted: Sat Mar 14, 2009 2:21 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Решил написать программу для вывода сообщений (или 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 230 times
Top
   
 Post subject: Re: Message Box
PostPosted: Sun Mar 15, 2009 8:54 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
отличная работа! но может лучше было создание MessageBox оформить в виде библиотеки (.obj)? так пользователям более привычно, чем IPC. а создание окна сделать, естественно, в отдельном потоеке...


Top
   
 Post subject: Re: Message Box
PostPosted: Sun Mar 15, 2009 2:58 pm 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
IgorA,
хорошая работа....

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


Top
   
 Post subject: Re: Message Box
PostPosted: Sun Mar 15, 2009 5:48 pm 
Offline

Joined: Sun Oct 05, 2008 2:42 pm
Posts: 26
IgorA, молодца, так держать!
Quote:
*.obj не помешал бы...

_________________
In GNU we trust ;-)


Top
   
 Post subject: Re: Message Box
PostPosted: Sun Mar 15, 2009 8:50 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Если сделать в библиотеке, то думаю будет удобнее использовать.
Сообщение должно давать ответ, какая кнопка нажата, а через IPC это не очень удобно будет сделать.
Надо будет над этим подумать, раньше пока еще не писал библиотеки.


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 1:13 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Хочу переписать код в библиотеку, а компилятор выдает ошибку на подобные строки :( :
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 получить).
Кто знает как получить адрес, чтобы заработало ? Я так думаю, что когда создается библиотека переменные не имеют адресов, потому что не известно куда будет присоедина библиотека... а может я не прав ?


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 1:33 am 
Offline
Kernel Developer
User avatar

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

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 1:45 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
даю код.


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 9:31 am 
IgorA
Нужно принудительно указывать размерность, вместо:
Code:
mov edi,msgbox_1

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

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


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 10:24 am 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
macros.inc делает замену для mov, которая не работает в случае компиляции в obj. Просто добавь "purge mov" после включения macros.inc.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: Message Box
PostPosted: Tue Mar 17, 2009 7:38 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
все получилось :D
вот теперь через библиотеку сделал, и кроме того несколько доработок ...
код нажатой кнопки возвращается в вызвавшую программу


Attachments:
File comment: 17.03.2009
msgbox.7z [5.65 KiB]
Downloaded 214 times
Top
   
 Post subject: Re: Message Box
PostPosted: Wed Mar 18, 2009 10:35 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
вот это другое дело! только во-первых, почему так запутанно? а во-вторых, может я и ошибаюсь, но экспортируемые функции не stdcall? а хотелось бы... и описания (или хотя бы прототипы) не помешали бы (хотя работающий пример уже хорошо).


Top
   
 Post subject: Re: Message Box
PostPosted: Wed Mar 18, 2009 2:00 pm 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
Albom, есть исходники же.. =)))... так что исправь как лучше будет...


Top
   
 Post subject: Re: Message Box
PostPosted: Wed Mar 18, 2009 6:14 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Albom
Quote:
функции не stdcall?

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

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

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


Top
   
 Post subject: Re: Message Box
PostPosted: Wed Mar 18, 2009 7:19 pm 
Offline

Joined: Fri Oct 12, 2007 1:04 pm
Posts: 141
IgorA
По поводу stdcall и вообще библиотек можно посмотреть исходники libs-dev.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 55 posts ]  Go to page 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited