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,
181
2) опции, если 1 то изменять цвета скроллингов если 2 то изменять размер, можно давать комбинацию опций с помощью или.
182
Пример использования:
183
stdcall [ted_init_scroll_bars], tedit0,2
184
185
186
Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:
187
1) структура tedit,
188
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
189
3) строка с путем и именем файла синтаксиса.
190
Пример использования:
191
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
192
193
194
Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.
195
Пример использования:
196
push eax edi
197
mov edi,tedit0
198
call [ted_is_select]
199
cmp al,0
200
.........
201
pop edi eax
202
203
204
Функция вызываемая для реакции на клавиатуру. В регистре eax должен быть код нажатой клавиши. Принимает 3 параметра:
205
1) структура tedit,
206
2) таблица для конвертации scan кодов в ascii,
207
3) управляющие символы.
208
Пример использования:
209
mcall 66,3 ;66.3 получить состояние управляющих клавиш
210
xor esi,esi
211
mov ecx,1
212
test al,0x03 ;[Shift]
213
jz @f
214
mov cl,2
215
or esi,KM_SHIFT
216
@@:
217
test al,0x0c ;[Ctrl]
218
jz @f
219
or esi,KM_CTRL
220
@@:
221
test al,0x30 ;[Alt]
222
jz @f
223
mov cl,3
224
or esi,KM_ALT
225
@@:
226
test al,0x80 ;[NumLock]
227
jz @f
228
or esi,KM_NUMLOCK
229
@@:
230
231
mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
232
mcall 2 ;получаем код нажатой клавиши
233
stdcall [ted_key], tedit0, conv_tabl,esi
234
235
236
Функция на перемещение или нажатие мыши.
237
Пример использования:
238
stdcall [ted_mouse], tedit0
239
240
241
Функция для открытия файла. Принимает 3 параметра:
242
1) структура tedit,
243
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
244
3) строка с путем и именем файла.
245
Пример использования:
246
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
247
248
249
Функция для добавления текста. Принимает 4 параметра:
250
1) структура tedit,
251
2) указатель на буфер с текстом,
252
3) длина текста,
253
4) опции вставки.
254
Пример использования:
255
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
256
stdcall [ted_text_add], tedit0,ted_buffer,30,ebx
257
ted_opt_ed_change_time - фиксировать изменения документа, что-бы их можно было отменить. Например если нужно сделать несколько изменений текста, которые будут отменяться за один раз, то 1-е изменение идет с этой константой а остальные нет.
258
ted_opt_ed_move_cursor - константа которая определяет сдвиг курсора после добавления текста.
259
260
261
Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.
262
Пример использования:
263
push edi
264
mov edi,tedit0
265
call [ted_text_colored]
266
pop edi
267
1457
IgorA
268
Внутренние функции:
269
ted_get_text_perv_pos - переход на предыдущий символ в цепи (через указатель 'perv')
270
ted_get_text_next_pos - переход на следующий символ в цепи (через указатель 'next')
271
ted_symbol_not_vis - определяет видимый ли указанный символ на экране (в зависимости
272
от значений 'tc' и 'td')
273
ted_iterat_next - переход на следующий видимый символ в цепи. Использует для
274
работы функции ted_get_text_next_pos и ted_symbol_not_vis.
275
ted_iterat_perv - переход на предедущий видимый символ в цепи.
276
277
ted_iterat_next_pos_char - найти следующую позицию указанного символа (edx-поз. начала
278
поиска, bl->код искомого символа)
279
ted_get_pos_by_coords - берет позицию символа по координатам (esi->коорд. x, знак;
280
ecx->коорд. y, строка)
281
ted_go_to_pos - переставляет курсор в указанную позицию, если указанная позиция
282
находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)
283
1458
IgorA
284
1457
IgorA
285
286
Элемент Размер (байт)
287
Количество цветов текста
288
4
289
Количество подсвечиваемых слов
290
4
291
Цвета интерфейса
292
4*6
293
Цвета для текста
294
4*(кол. цв. текста)
295
Структуры со свойствами и описаниями слов
296
sizeof(TexColViv)*(кол. слов)
297
Разделительный символ, означающий начало описаний слов (всегда равен 0)
298
1 байт
299
Описания слов (строки текста с 0-ми в конце)
300
(длинна справочного текста + 1)
301
302
Замечания.
303
304
Все слова должны быть расположены в порядке следования их ASCII кодов.
305
Возможно в будущих версиях формат файлов подсветки будет изменен.
306
307
308
1458
IgorA
309
Документация обновлялась последний раз 03.05.10.
1457
IgorA
310
311
312