1457
IgorA
1
2
3
элемент Text Editor
4
5
6
7
8
9
На главную ↑
10
Оглавление
11
12
Введение
13
Функции
14
15
ted_but_copy
1458
IgorA
16
ted_but_cut
17
ted_but_find_next
18
ted_but_paste
19
ted_but_redo
20
ted_but_reverse
21
ted_but_save_file
22
ted_but_select_word
23
ted_but_sumb_lover
24
ted_but_sumb_upper
25
ted_but_undo
26
ted_can_save
27
ted_clear
28
ted_delete
29
ted_draw
30
ted_init
31
ted_init_scroll_bars
32
ted_init_syntax_file
33
ted_is_select
34
ted_key
35
ted_mouse
36
ted_open_file
37
ted_text_add
38
ted_text_colored
1457
IgorA
39
1458
IgorA
40
Формат файла подсветки *.syn
1457
IgorA
41
42
43
Элемент text_editor позволяет работать с текстовыми файлами, содержит много функция для редактирования текста.
44
45
Внешний вид программы, с элементом text_editor.
46
47
Возможности
48
49
Открытие (Ctrl+O)/Сохранение файла.
50
Редактирование: Повтор/Отмена действия (Ctrl+Z), Вырезать/Копировать (Ctrl+C)/Вставить (Ctrl+V), Поиск (Ctrl+F, F3).
51
Выделение цветом слов, заданных в файле синтаксиса. Вывод справки по ним, если она есть (нажатием F1 когда курсор на слове).
52
53
54
Некоторые недоработки
55
56
Если открыть большой файл, размер которого больше чем:
57
maxChars equ 100002 ;(...+2)
58
он откроется не весь, а первые maxChars-2 символов из файла
59
(о чем выдается сообщение).
60
При сохранении программа не спрашивает о замене существ. файла.
61
62
63
О работе программы
64
Раздел для программистов (и интересующихся людей), в котором расказаны
65
некоторые идеи, на которых построена данная программа.
66
67
Для работы с текстом программа использует структуры:
68
struct symbol
69
c db ? ; +0 символ
70
col db ? ; +1 цвет
71
perv dd ? ; +2
72
next dd ? ; +6 указатели
73
tc dd ? ; +10 врем. создания
74
td dd ? ; +14 врем. удаления
75
ends
76
Каждая из таких структур сохраняет один символ в переменной 'c'. Переменные
77
'perv' и 'next' хранят индексы первого и следующего символов. Благодаря чему
78
текст создается в виде цепочки символов (двунаправленный список).
79
'tc' - время создания символа, при отмене действия текстовый редактор "знает"
80
какие символы отображать, а какие нет (хотя все символы "висят" в памяти).
81
'td' - время удаления символа, заполняется при удалении, при отмене действия
82
удаления символов, текст может быть восстановлен.
83
'col' - используется для цветовой разметки.
84
85
86
Функции на экспорт:
87
88
1458
IgorA
89
Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C . Текст копируется в буфер ted_buffer , максимальный размер буфера указывается в ted_buffer_size .
1457
IgorA
90
Пример использования:
91
stdcall [ted_but_copy], tedit0
92
1458
IgorA
93
94
Функция вырезает выделенный текст и копирует его в буфер.
95
Пример использования:
96
stdcall [ted_but_cut], tedit0
1457
IgorA
97
1458
IgorA
98
99
Функция для поиска текста. Ищет текст из буфера ted_buffer_find , при нахождении перемещает курсор к найденому тексту и выделяет его.
100
Пример использования:
101
stdcall [ted_but_find_next], tedit0
102
103
104
Функция вставляет текст из буфера ted_buffer .
105
Пример использования:
106
stdcall [ted_but_paste], tedit0
107
108
109
Повторяет отмененные действия по редактированию текста.
110
Пример использования:
111
stdcall [ted_but_redo], tedit0
112
113
114
Меняет порядок следования символов в выделенном тексте.
115
Пример использования:
116
stdcall [ted_but_reverse], tedit0
117
118
119
Функция для сохранения файла. Принимает 3 параметра:
120
1) структура tedit,
121
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
122
3) строка с путем и именем файла.
123
Пример использования:
124
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
125
126
127
Функция для выделения ключевого слова под курсором. Если ключевые слова не используются, тогда будет выделен весь текст.
128
Пример использования:
129
stdcall [ted_but_select_word], tedit0
130
131
132
Переводит выделенные символы к нижнему регистру.
133
Пример использования:
134
stdcall [ted_but_sumb_lover], tedit0
135
136
137
Переводит выделенные символы к верхнему регистру.
138
Пример использования:
139
stdcall [ted_but_sumb_upper], tedit0
140
141
142
Отменяет действия по редактированию текста. Действия функции ted_but_reverse не отменяются.
143
Пример использования:
144
stdcall [ted_but_undo], tedit0
145
146
147
Функция которая проверяет были ли не сохраненные изменения в тексте. Результат возвращается в регистр al , если изменения были то возвращает 1 иначе 0.
148
Пример использования:
149
push eax
150
stdcall [ted_can_save], tedit0
151
cmp al,1
152
.........
153
pop eax
154
155
156
Очистка текста в окне редактора. Принимает 2 параметра:
157
1) структура tedit,
158
2) параметр определяет будет ли очистка памяти полной.
159
Если 2-й параметр равен 1, то очистка будет полной, при 0 нет. Пользователю нужно вызывать функцию с параметром 1, параметр 0 для внутреннего использования.
160
Пример использования:
161
stdcall [ted_clear], tedit0,1
162
163
164
Деструктор элемента, освобождает память занятую элементом.
165
Пример использования:
166
stdcall [ted_delete], tedit0
167
168
169
Перерисовка всего окна редактора, включая дочерние скроллинги.
170
Пример использования:
171
stdcall [ted_draw], tedit0
172
173
174
Конструктор элемента, выделяет память необходимую для работы текстового редактора.
175
Пример использования:
176
stdcall [ted_init], tedit0
177
178
179
Устанавливает цвет скроллингов и настраивает их размеры в зависимости от размеров окна. Можно вызывать эту функцию при изменении размеров окна в пользовательской программе. Принимает 2 параметра:
180
1) структура tedit,
1459
IgorA
181
2) опции, указывают какие нужно изменить параметры:
182
183
1 - изменить цвета скроллингов
184
2 - изменился размер окна
185
4 - изменился размер документа
186
187
Параметры можно комбинировать через логическое или .
1458
IgorA
188
Пример использования:
189
stdcall [ted_init_scroll_bars], tedit0,2
190
191
192
Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:
193
1) структура tedit,
194
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
195
3) строка с путем и именем файла синтаксиса.
196
Пример использования:
197
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
198
199
200
Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.
201
Пример использования:
202
push eax edi
203
mov edi,tedit0
204
call [ted_is_select]
205
cmp al,0
206
.........
207
pop edi eax
208
209
210
Функция вызываемая для реакции на клавиатуру. В регистре eax должен быть код нажатой клавиши. Принимает 3 параметра:
211
1) структура tedit,
212
2) таблица для конвертации scan кодов в ascii,
213
3) управляющие символы.
214
Пример использования:
215
mcall 66,3 ;66.3 получить состояние управляющих клавиш
216
xor esi,esi
217
mov ecx,1
218
test al,0x03 ;[Shift]
219
jz @f
220
mov cl,2
221
or esi,KM_SHIFT
222
@@:
223
test al,0x0c ;[Ctrl]
224
jz @f
225
or esi,KM_CTRL
226
@@:
227
test al,0x30 ;[Alt]
228
jz @f
229
mov cl,3
230
or esi,KM_ALT
231
@@:
232
test al,0x80 ;[NumLock]
233
jz @f
234
or esi,KM_NUMLOCK
235
@@:
236
237
mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
238
mcall 2 ;получаем код нажатой клавиши
239
stdcall [ted_key], tedit0, conv_tabl,esi
240
241
242
Функция на перемещение или нажатие мыши.
243
Пример использования:
244
stdcall [ted_mouse], tedit0
245
246
247
Функция для открытия файла. Принимает 3 параметра:
248
1) структура tedit,
249
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
250
3) строка с путем и именем файла.
1459
IgorA
251
Возвращает 2 параметра:
252
1) eax = код ошибки
253
2) ebx = колличество прочитанных байт
1458
IgorA
254
Пример использования:
1459
IgorA
255
push eax ebx
256
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
257
.........
258
pop ebx eax
1458
IgorA
259
260
261
Функция для добавления текста. Принимает 4 параметра:
262
1) структура tedit,
263
2) указатель на буфер с текстом,
264
3) длина текста,
265
4) опции вставки.
266
Пример использования:
1459
IgorA
267
text_buffer db 500 dup(0)
268
.........
269
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
270
stdcall [ted_text_add], tedit0,text_buffer,30,ebx
1458
IgorA
271
ted_opt_ed_change_time - фиксировать изменения документа, что-бы их можно было отменить. Например если нужно сделать несколько изменений текста, которые будут отменяться за один раз, то 1-е изменение идет с этой константой а остальные нет.
272
ted_opt_ed_move_cursor - константа которая определяет сдвиг курсора после добавления текста.
273
274
275
Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.
276
Пример использования:
277
push edi
278
mov edi,tedit0
279
call [ted_text_colored]
280
pop edi
281
1457
IgorA
282
Внутренние функции:
283
ted_get_text_perv_pos - переход на предыдущий символ в цепи (через указатель 'perv')
284
ted_get_text_next_pos - переход на следующий символ в цепи (через указатель 'next')
285
ted_symbol_not_vis - определяет видимый ли указанный символ на экране (в зависимости
286
от значений 'tc' и 'td')
287
ted_iterat_next - переход на следующий видимый символ в цепи. Использует для
288
работы функции ted_get_text_next_pos и ted_symbol_not_vis.
289
ted_iterat_perv - переход на предедущий видимый символ в цепи.
290
291
ted_iterat_next_pos_char - найти следующую позицию указанного символа (edx-поз. начала
292
поиска, bl->код искомого символа)
293
ted_get_pos_by_coords - берет позицию символа по координатам (esi->коорд. x, знак;
294
ecx->коорд. y, строка)
295
ted_go_to_pos - переставляет курсор в указанную позицию, если указанная позиция
296
находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)
297
1458
IgorA
298
1457
IgorA
299
300
Элемент Размер (байт)
301
Количество цветов текста
302
4
303
Количество подсвечиваемых слов
304
4
305
Цвета интерфейса
306
4*6
307
Цвета для текста
308
4*(кол. цв. текста)
309
Структуры со свойствами и описаниями слов
310
sizeof(TexColViv)*(кол. слов)
311
Разделительный символ, означающий начало описаний слов (всегда равен 0)
312
1 байт
313
Описания слов (строки текста с 0-ми в конце)
314
(длинна справочного текста + 1)
315
316
Замечания.
317
318
Все слова должны быть расположены в порядке следования их ASCII кодов.
319
Возможно в будущих версиях формат файлов подсветки будет изменен.
320
321
322
1459
IgorA
323
Документация обновлялась последний раз 05.05.10.
1457
IgorA
324
325
326