Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 8
1

Мой первый текстовый редактор. Запуск меню "Файл"

07.06.2014, 12:04. Показов 1675. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!Прошу гнилыми помидорами не кидаться.На просторах ИННЕТА нашел код текстового редактора под FASM.Вроде запустил но меню файл было закрыто Оператором "MFS_GRAYED" убрал его вроде запустился ,но при выборе меню ссылается на "nofnc db 'Эта функция недоступна в демо-версии',0"И тогда по аналогии меню правка попытался прописать это же в 110 по 120 строках,но фокусник напился фокус не удался.И тут я понял что нужно написать микро программу обращения к NEW,OPEN,SAVE,SAVE AS.На вашем форуме тоже нашел тему про аналогичный редактор товарища nazikstriy вот ссылка на его тему "https://www.cyberforum.ru/assembler-windows/thread1135148-page2.html#post6279491".Спросил там про запуск меню файл он мне скинул рабочий код редактора но там только сохранения работает.Про сохранения написана подпрограмма для SAVE AS со 184 по 204 строках.Может кто нить занимался этим вопросом или даст намётки куда жало то сувать
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
format PE GUI 4.0
entry start
 
include 'win32a.inc'
include 'encoding\WIN1251.INC'
 
section '.data' data readable writeable
 
title db 'Мой Первый Текстовый Редактор',0
class db 'FASMWIN32',0
_edit db 'EDIT',0
nofnc db 'Эта функция недоступна в демо-версии',0
errtxt db 'Код ошибки: %u',0
errbuf rb $-errtxt+10
hwnd dd ?
hmenu dd ?
hedit dd ?
hacc dd ?
font dd ?
 
wc WNDCLASS 0,WindowProc,0,0,0,0,0,COLOR_BTNFACE+1,0,class
msg MSG
client RECT
menuinfo MENUITEMINFO sizeof.MENUITEMINFO,MIIM_STATE
 
section '.code' code readable executable
 
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
invoke LoadIcon,[wc.hInstance],IDI_MAIN
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc
cmp eax,0
je error
invoke LoadAccelerators,[wc.hInstance],IDA_MAIN
mov [hacc],eax
invoke LoadMenu,[wc.hInstance],IDM_MAIN
mov [hmenu],eax
invoke CreateWindowEx,0,class,title,WS_VISIBLE+WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\
0,eax,[wc.hInstance],0
cmp eax,0
je error
mov [hwnd],eax
msg_loop:
invoke GetMessage,msg,0,0,0
cmp eax,0
je end_loop
invoke TranslateAccelerator,[hwnd],[hacc],msg
cmp eax,0
jne msg_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
 
error:
invoke GetLastError
invoke wsprintf,errbuf,errtxt,eax
invoke MessageBox,0,errbuf,0,MB_OK
 
end_loop:
invoke ExitProcess,[msg.wParam]
 
proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi
cmp [wmsg],WM_COMMAND
je .wmcommand
cmp [wmsg],WM_CREATE
je .wmcreate
cmp [wmsg],WM_SIZE
je .wmsize
cmp [wmsg],WM_SETFOCUS
je .wmsetfocus
cmp [wmsg],WM_DESTROY
je .wmdestroy
.defwndproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp .finish
.wmcommand:
mov eax,[wparam]
cmp ax,IDM_NEW
je .NEW
cmp ax,IDM_OPEN
je .OPEN
cmp ax,IDM_SAVE
je .SAVE
cmp ax,IDM_SAVEAS
je .SAVEAS
cmp ax,IDM_EXIT
je .EXIT
cmp ax,IDM_UNDO
je .UNDO
cmp ax,IDM_CUT
je .CUT
cmp ax,IDM_COPY
je .COPY
cmp ax,IDM_PASTE
je .PASTE
cmp ax,IDM_DELETE
je .DELETE
cmp ax,IDM_SELECTALL
je .SELECTALL
cmp ax,IDM_ABOUT
je .ABOUT
jmp .finish
; обработчики сообщений меню файл:
.NEW:
invoke MessageBox,0,nofnc,title,MB_OK
jmp .finish
.OPEN:
invoke MessageBox,0,nofnc,title,MB_OK
jmp .finish
.SAVE:
invoke MessageBox,0,nofnc,title,MB_OK
jmp .finish
.SAVEAS:
invoke MessageBox,0,nofnc,title,MB_OK
jmp .finish
.EXIT:
invoke DestroyWindow,[hwnd]
jmp .finish
; обработчики сообщений меню правка:
.UNDO:
mov eax,EM_UNDO
jmp .send2editbox
.CUT:
mov eax,WM_CUT
jmp .send2editbox
.COPY:
mov eax,WM_COPY
jmp .send2editbox
.PASTE:
mov eax,WM_PASTE
jmp .send2editbox
.DELETE:
mov eax,WM_CLEAR
jmp .send2editbox
.send2editbox:
invoke SendMessage,[hedit],eax,0,0
jmp .finish
.SELECTALL:
invoke SendMessage,[hedit],EM_SETSEL,0,-1
jmp .finish
.ABOUT:
invoke DialogBoxParam,[wc.hInstance],IDD_ABOUT,[hwnd],AboutDialog,0
jmp .finish
 
.wmcreate:
invoke GetClientRect,[hwnd],client
invoke CreateWindowEx,WS_EX_CLIENTEDGE,_edit,0,WS_VISIBLE+WS_CHILD+ WS_HSCROLL+WS_VSCROLL+ES_AUTOHSCROLL+ES_AUTOVSCROLL+ ES_MULTILINE,[client.left],[client.top],[client.right],[client.bottom],[hwnd],0,[wc.hInstance],NULL
cmp eax,0
je .failed
mov [hedit],eax
invoke CreateFont,16,0,0,0,0,FALSE,FALSE,FALSE,RUSSIAN_CHARSET, OUT_RASTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, FIXED_PITCH+FF_DONTCARE,NULL
cmp eax,0
je .failed
mov [font],eax
invoke SendMessage,[hedit],WM_SETFONT,eax,FALSE
mov eax,0
jmp .finish
.failed:
mov eax,-1
jmp .finish
.wmsize:
invoke GetClientRect,[hwnd],client
invoke MoveWindow,[hedit],[client.left],[client.top],[client.right],[client.bottom],TRUE
mov eax,0
jmp .finish
.wmsetfocus:
invoke SetFocus,[hedit]
mov eax,0
jmp .finish
.wmdestroy:
invoke PostQuitMessage,0
mov eax,0
.finish:
pop edi esi ebx
ret
endp
 
proc AboutDialog hwnd,msg,wparam,lparam
push ebx esi edi
cmp [msg],WM_COMMAND
je .close
cmp [msg],WM_CLOSE
je .close
mov eax,0
jmp .finish
.close:
invoke EndDialog,[hwnd],0
.processed:
mov eax,1
.finish:
pop edi esi ebx
ret
endp
 
section '.idata' import data readable writeable
 
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL'
 
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\gdi32.inc'
 
section '.rsrc' resource data readable
 
IDM_MAIN = 101
IDA_MAIN = 201
IDD_ABOUT = 301
IDI_MAIN = 401
 
IDM_NEW = 1101
IDM_OPEN = 1102
IDM_SAVE = 1103
IDM_SAVEAS = 1104
IDM_EXIT = 1109
 
IDM_UNDO = 1201
IDM_CUT = 1202
IDM_COPY = 1203
IDM_PASTE = 1204
IDM_DELETE = 1205
IDM_SELECTALL = 1206
 
IDM_ABOUT = 1401
 
directory RT_MENU,menus,\
RT_ACCELERATOR,accelerators,\
RT_DIALOG,dialogs,\
RT_GROUP_ICON,group_icons,\
RT_ICON,icons,\
RT_VERSION,versions
 
resource menus,\
IDM_MAIN,LANG_RUSSIAN+SUBLANG_DEFAULT,main_menu
 
resource accelerators,\
IDA_MAIN,LANG_ENGLISH+SUBLANG_DEFAULT,main_keys
 
resource dialogs,\
IDD_ABOUT,LANG_RUSSIAN+SUBLANG_DEFAULT,about_dialog
 
resource group_icons,\
IDI_MAIN,LANG_NEUTRAL,main_icon
 
resource icons,\
1,LANG_NEUTRAL,main_icon_data
 
resource versions,\
1,LANG_NEUTRAL,version
 
menu main_menu
menuitem '&Файл',0,MFR_POPUP
menuitem <'&Создать',9,'Ctrl+N'>,IDM_NEW,0,MFS_GRAYED
menuitem <'&Открыть…',9,'Ctrl+O'>,IDM_OPEN,0,MFS_GRAYED
menuitem <'&Сохранить',9,'Ctrl+S'>,IDM_SAVE,0,MFS_GRAYED
menuitem '&Сохранить как…',IDM_SAVEAS,0,MFS_GRAYED
menuseparator
menuitem <'&Выход',9,'Ctrl+Q'>,IDM_EXIT,MFR_END
 
menuitem '&Правка',0,MFR_POPUP
menuitem <'&Отменить',9,'Ctrl+Z'>,IDM_UNDO
menuseparator
menuitem <'&Вырезать',9,'Ctrl+X'>,IDM_CUT
menuitem <'&Копировать',9,'Ctrl+C'>,IDM_COPY
menuitem <'&Вставить',9,'Ctrl+V'>,IDM_PASTE
menuitem <'&Удалить',9,'Del'>,IDM_DELETE
menuseparator
menuitem <'&Выделить все',9,'Ctrl+A'>,IDM_SELECTALL,MFR_END
 
menuitem '&Вид',0
 
menuitem '&Справка',0,MFR_POPUP+MFR_END
menuitem '&О программе',IDM_ABOUT,MFR_END
 
accelerator main_keys,\
FVIRTKEY+FNOINVERT+FCONTROL,'N',IDM_NEW,\
FVIRTKEY+FNOINVERT+FCONTROL,'O',IDM_OPEN,\
FVIRTKEY+FNOINVERT+FCONTROL,'S',IDM_SAVE,\
FVIRTKEY+FNOINVERT+FCONTROL,'Q',IDM_EXIT,\
FVIRTKEY+FNOINVERT+FCONTROL,'Z',IDM_UNDO,\
FVIRTKEY+FNOINVERT+FCONTROL,'X',IDM_CUT,\
FVIRTKEY+FNOINVERT+FCONTROL,'C',IDM_COPY,\
FVIRTKEY+FNOINVERT+FCONTROL,'V',IDM_PASTE,\
FVIRTKEY+FNOINVERT+FCONTROL,'A',IDM_SELECTALL
 
dialog about_dialog,'О программе',40,40,172,60,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
dialogitem 'STATIC',<'Мой Первый Текстовый Редактор',0Dh,0Ah,'Copyright ',0A9h,' BarMentaLisk 2008.'>,-1,27,10,144,40,WS_VISIBLE+SS_CENTER
dialogitem 'STATIC',IDI_MAIN,-1,8,8,32,32,WS_VISIBLE+SS_ICON
dialogitem 'STATIC','',-1,4,34,164,11,WS_VISIBLE+SS_ETCHEDHORZ
dialogitem 'STATIC','Написан при помощи FASM',-1,12,42,100,20,WS_VISIBLE+SS_LEFT
dialogitem 'BUTTON','OK',IDOK,124,40,42,14,WS_VISIBLE+ WS_TABSTOP+BS_DEFPUSHBUTTON
enddialog
 
icon main_icon,main_icon_data,'1.ico'
 
versioninfo version,VOS_NT_WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_RUSSIAN+ SUBLANG_DEFAULT,0,\
'Comments','Написан при помощи FASM',\
'CompanyName','BarMentaLisk',\
'FileDescription','Текстовый редактор',\
'ProductName',<'Мой Первый',0Dh,0Ah,'Текстовый Редактор'>,\
'LegalCopyright',<'Copyright ',0A9h, 'BarMentaLisk 2008'>,\
'FileVersion','0.1.0.0',\
'OriginalFilename','editor1.EXE'
Вот код оригинала с оператором "MFS_GRAYED"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2014, 12:04
Ответы с готовыми решениями:

Переписать первый текстовый файл во второй текстовый файл, удалив слова, указанные в третьем текстовом файле
помогите пожалуйста! Файл input.txt содержит несколько строк текста. Слова в тексте могут...

Есть текстовый файл, первый символ каждой строки записать в другой текстовый файл
Есть текстовый файл, первый символ каждой строки записать в другой текстовый файл помогите в...

Текстовый файл. Первый символ каждой строки записать в другой текстовый файл
Дан текстовый файл. Первый символ каждой строки записать в другой текстовый файл. (Там нужно как-то...

Почему данная программа на языке ассемблера создаёт текстовый файл, которые не может открыть текстовый редактор Mousepad
Пример взят из урока по ссылке: https://ravesli.com/assembler-upravlenie-fajlami/ Я его немного...

Текстовый редактор. Иконки в меню.
Пишу сейчас стандартную для студентов программу текстового редактора (RichEdit). В папке demos есть...

4
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
10.06.2014, 11:27 2
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Цитата Сообщение от samodelkin33 Посмотреть сообщение
Может кто нить занимался этим вопросом или даст намётки куда жало то сувать
Суй в "; обработчики сообщений меню файл:" там сейчас по всей теме заглушка стоит, кроме меню "Выход"
Начни по порядку с самого простого "Создать". Вот грубый пример

Assembler
1
2
3
4
5
6
7
; обработчики сообщений меню файл:
.NEW:
invoke CreateFile,file_name,GENERIC_READ+GENERIC_WRITE,\
FILE_SHARE_READ+FILE_SHARE_WRITE,0,CREATE_ALWAYS,\
FILE_ATTRIBUTE_NORMAL,0
; invoke MessageBox,0,nofnc,title,MB_OK
jmp .finish
За меткой .NEW на которую выходит программа после выбора меню "Создать" поставь функцию создания файла
А в section '.data'
Assembler
1
file_name db "Новый файл.txt",0  ; название файла
Повторюсь, пример грубый, дескриптор не сохраняется, имя файла забито жёстко, нет обработки ситуации когда файл с этим названием уже существует, да и закрывать его перед выходом тоже нужно. Но пример для наглядности. после выбора меню "Создать" в папке с программой появится пустой файл "Новый файл.txt"
1
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 8
12.06.2014, 13:54  [ТС] 3
Большое Спасибо !!!
Что туда сувать то я понял но что писать туда не знал!Спасибо те приоткрыл завесу.
Где вообще про архитектуру 4 проца почитать я так понимаю фасм на нем и пашет?
И еще где про операторов почитать вот например "FILE_SHARE_READ+FILE_SHARE_WRITE",чтобы найти общий язык с этим компилятором.За ранние благодарю
0
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
12.06.2014, 19:04 4
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

samodelkin33, архитектура процессора тебя касается поскольку постольку, собственно азы в любой книжке по ассемблеру предоставлены. Что до "FILE_SHARE_READ+FILE_SHARE_WRITE" то FASM тут не при чём. MASM их тоже прекрасно поймёт. Это настройки API функций. Самые ходовые по твоей теме http://www.vsokovikov.narod.ru... rl_flm.htm Там достаточно развёрнуто всё изложено. До чего сам не допрёшь, обращайся на форум.
1
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 8
15.06.2014, 22:01  [ТС] 5
Спасибо буду пробовать!!!
0
15.06.2014, 22:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2014, 22:01
Помогаю со студенческими работами здесь

Текстовый редактор со строкой меню и статусбаром на electron
здравствуйте. есть следующий гуй на javafx: borderPane, в нём центральным элементом textArea,...

Создать текстовый редактор с меню и командами редактирования
6. Создать текстовый редактор с меню и командами редактирования.

Текстовый редактор. Хочу сделать Экстракт файл
Надо сделать экстракт файл, ну чтобы путь не полный показывал когда сохраняешь, а короткий,...

Добавить функцию открыть файл в текстовый редактор (ТР)
ТР на Fasme, вверху есть меню &quot;Файл&quot; , хотелось бы добавить туда функцию &quot;открыть файл&quot; Может...

Текстовый редактор загружает файл порядка 30 секунд
Всем привет, прошу рассказать о том как можно ускорить приложение? Проблема вот в чем, есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru