На главную ↑

Оглавление

Введение

Функции

Формат файла подсветки *.syn

Введение

Элемент text_editor позволяет работать с текстовыми файлами, содержит много функция для редактирования текста.

Внешний вид программы, с элементом text_editor.

Возможности

Некоторые недоработки

О работе программы

Раздел для программистов (и интересующихся людей), в котором расказаны некоторые идеи, на которых построена данная программа.

Для работы с текстом программа использует структуры:

struct symbol
  c db ?	;  +0 символ
  col db ?	;  +1 цвет
  perv dd ? ;  +2
  next dd ? ;  +6 указатели
  tc dd ?	; +10 врем. создания
  td dd ?	; +14 врем. удаления
ends

Каждая из таких структур сохраняет один символ в переменной 'c'. Переменные 'perv' и 'next' хранят индексы первого и следующего символов. Благодаря чему текст создается в виде цепочки символов (двунаправленный список).

'tc' - время создания символа, при отмене действия текстовый редактор "знает" какие символы отображать, а какие нет (хотя все символы "висят" в памяти).

'td' - время удаления символа, заполняется при удалении, при отмене действия удаления символов, текст может быть восстановлен.

'col' - используется для цветовой разметки.

Функции

Функции на экспорт:

ted_but_copy

Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C. Текст копируется в буфер ted_buffer, максимальный размер буфера указывается в ted_buffer_size.

Пример использования:

stdcall [ted_but_copy], tedit0

ted_but_cut

Функция вырезает выделенный текст и копирует его в буфер.

Пример использования:

stdcall [ted_but_cut], tedit0

ted_but_find_next

Функция для поиска текста. Ищет текст из буфера ted_buffer_find, при нахождении перемещает курсор к найденому тексту и выделяет его.

Пример использования:

stdcall [ted_but_find_next], tedit0

ted_but_paste

Функция вставляет текст из буфера ted_buffer.

Пример использования:

stdcall [ted_but_paste], tedit0

ted_but_redo

Повторяет отмененные действия по редактированию текста.

Пример использования:

stdcall [ted_but_redo], tedit0

ted_but_reverse

Меняет порядок следования символов в выделенном тексте.

Пример использования:

stdcall [ted_but_reverse], tedit0

ted_but_save_file

Функция для сохранения файла. Принимает 3 параметра:

1) структура tedit,

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

3) строка с путем и именем файла.

Пример использования:

stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]

ted_but_select_word

Функция для выделения ключевого слова под курсором. Если ключевые слова не используются, тогда будет выделен весь текст.

Пример использования:

stdcall [ted_but_select_word], tedit0

ted_but_sumb_lover

Переводит выделенные символы к нижнему регистру.

Пример использования:

stdcall [ted_but_sumb_lover], tedit0

ted_but_sumb_upper

Переводит выделенные символы к верхнему регистру.

Пример использования:

stdcall [ted_but_sumb_upper], tedit0

ted_but_undo

Отменяет действия по редактированию текста. Действия функции ted_but_reverse не отменяются.

Пример использования:

stdcall [ted_but_undo], tedit0

ted_can_save

Функция которая проверяет были ли не сохраненные изменения в тексте. Результат возвращается в регистр al, если изменения были то возвращает 1 иначе 0.

Пример использования:

push eax
	stdcall [ted_can_save], tedit0
	cmp al,1
.........
pop eax

ted_clear

Очистка текста в окне редактора. Принимает 2 параметра:

1) структура tedit,

2) параметр определяет будет ли очистка памяти полной.

Если 2-й параметр равен 1, то очистка будет полной, при 0 нет. Пользователю нужно вызывать функцию с параметром 1, параметр 0 для внутреннего использования.

Пример использования:

stdcall [ted_clear], tedit0,1

ted_delete

Деструктор элемента, освобождает память занятую элементом.

Пример использования:

stdcall [ted_delete], tedit0

ted_draw

Перерисовка всего окна редактора, включая дочерние скроллинги.

Пример использования:

stdcall [ted_draw], tedit0

ted_init

Конструктор элемента, выделяет память необходимую для работы текстового редактора.

Пример использования:

stdcall [ted_init], tedit0

ted_init_scroll_bars

Устанавливает цвет скроллингов и настраивает их размеры в зависимости от размеров окна. Можно вызывать эту функцию при изменении размеров окна в пользовательской программе. Принимает 2 параметра:

1) структура tedit,

2) опции, указывают какие нужно изменить параметры:

Параметры можно комбинировать через логическое или.

Пример использования:

stdcall [ted_init_scroll_bars], tedit0,2

ted_init_syntax_file

Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:

1) структура tedit,

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

3) строка с путем и именем файла синтаксиса.

Пример использования:

stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name

ted_is_select

Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.

Пример использования:

push eax edi
	mov edi,tedit0
	call [ted_is_select]
	cmp al,0
.........
pop edi eax

ted_key

Функция вызываемая для реакции на клавиатуру. В регистре eax должен быть код нажатой клавиши. Принимает 3 параметра:

1) структура tedit,

2) таблица для конвертации scan кодов в ascii,

3) управляющие символы.

Пример использования:

mcall 66,3 ;66.3 получить состояние управляющих клавиш
xor esi,esi
mov ecx,1
test al,0x03 ;[Shift]
jz @f
	mov cl,2
	or esi,KM_SHIFT
@@:
test al,0x0c ;[Ctrl]
jz @f
	or esi,KM_CTRL
@@:
test al,0x30 ;[Alt]
jz @f
mov cl,3
	or esi,KM_ALT
@@:
test al,0x80 ;[NumLock]
jz @f
	or esi,KM_NUMLOCK
@@:

mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
mcall 2 ;получаем код нажатой клавиши
stdcall [ted_key], tedit0, conv_tabl,esi

ted_mouse

Функция на перемещение или нажатие мыши.

Пример использования:

stdcall [ted_mouse], tedit0

ted_open_file

Функция для открытия файла. Принимает 3 параметра:

1) структура tedit,

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

3) строка с путем и именем файла.

Возвращает 2 параметра:

1) eax = код ошибки

2) ebx = колличество прочитанных байт

Пример использования:

push eax ebx
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
.........
pop ebx eax

ted_text_add

Функция для добавления текста. Принимает 4 параметра:

1) структура tedit,

2) указатель на буфер с текстом,

3) длина текста,

4) опции вставки.

Пример использования:

text_buffer db 500 dup(0)
.........
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
stdcall [ted_text_add], tedit0,text_buffer,30,ebx

ted_opt_ed_change_time - фиксировать изменения документа, что-бы их можно было отменить. Например если нужно сделать несколько изменений текста, которые будут отменяться за один раз, то 1-е изменение идет с этой константой а остальные нет.

ted_opt_ed_move_cursor - константа которая определяет сдвиг курсора после добавления текста.

ted_text_colored

Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.

Пример использования:

push edi
	mov edi,tedit0
	call [ted_text_colored]
pop edi

Внутренние функции:

ted_get_text_perv_pos - переход на предыдущий символ в цепи (через указатель 'perv')

ted_get_text_next_pos - переход на следующий символ в цепи (через указатель 'next')

ted_symbol_not_vis - определяет видимый ли указанный символ на экране (в зависимости от значений 'tc' и 'td')

ted_iterat_next - переход на следующий видимый символ в цепи. Использует для работы функции ted_get_text_next_pos и ted_symbol_not_vis.

ted_iterat_perv - переход на предедущий видимый символ в цепи.

ted_iterat_next_pos_char - найти следующую позицию указанного символа (edx-поз. начала поиска, bl->код искомого символа)

ted_get_pos_by_coords - берет позицию символа по координатам (esi->коорд. x, знак; ecx->коорд. y, строка)

ted_go_to_pos - переставляет курсор в указанную позицию, если указанная позиция находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)

Формат файла подсветки *.syn

ЭлементРазмер (байт)
Количество цветов текста
4
Количество подсвечиваемых слов
4
Цвета интерфейса
4*6
Цвета для текста
4*(кол. цв. текста)
Структуры со свойствами и описаниями слов
sizeof(TexColViv)*(кол. слов)
Разделительный символ, означающий начало описаний слов (всегда равен 0)
1 байт
Описания слов (строки текста с 0-ми в конце)
(длинна справочного текста + 1)

Замечания.


Документация обновлялась последний раз 05.05.10.