Элемент 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' - используется для цветовой разметки.
Функции на экспорт:
Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C. Текст копируется в буфер ted_buffer, максимальный размер буфера указывается в ted_buffer_size.
Пример использования:
stdcall [ted_but_copy], tedit0
Функция вырезает выделенный текст и копирует его в буфер.
Пример использования:
stdcall [ted_but_cut], tedit0
Функция для поиска текста. Ищет текст из буфера ted_buffer_find, при нахождении перемещает курсор к найденому тексту и выделяет его.
Пример использования:
stdcall [ted_but_find_next], tedit0
Функция вставляет текст из буфера ted_buffer.
Пример использования:
stdcall [ted_but_paste], tedit0
Повторяет отмененные действия по редактированию текста.
Пример использования:
stdcall [ted_but_redo], tedit0
Меняет порядок следования символов в выделенном тексте.
Пример использования:
stdcall [ted_but_reverse], tedit0
Функция для сохранения файла. Принимает 3 параметра:
1) структура tedit,
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
3) строка с путем и именем файла.
Пример использования:
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
Функция для выделения ключевого слова под курсором. Если ключевые слова не используются, тогда будет выделен весь текст.
Пример использования:
stdcall [ted_but_select_word], tedit0
Переводит выделенные символы к нижнему регистру.
Пример использования:
stdcall [ted_but_sumb_lover], tedit0
Переводит выделенные символы к верхнему регистру.
Пример использования:
stdcall [ted_but_sumb_upper], tedit0
Отменяет действия по редактированию текста. Действия функции ted_but_reverse не отменяются.
Пример использования:
stdcall [ted_but_undo], tedit0
Функция которая проверяет были ли не сохраненные изменения в тексте. Результат возвращается в регистр al, если изменения были то возвращает 1 иначе 0.
Пример использования:
push eax stdcall [ted_can_save], tedit0 cmp al,1 ......... pop eax
Очистка текста в окне редактора. Принимает 2 параметра:
1) структура tedit,
2) параметр определяет будет ли очистка памяти полной.
Если 2-й параметр равен 1, то очистка будет полной, при 0 нет. Пользователю нужно вызывать функцию с параметром 1, параметр 0 для внутреннего использования.
Пример использования:
stdcall [ted_clear], tedit0,1
Деструктор элемента, освобождает память занятую элементом.
Пример использования:
stdcall [ted_delete], tedit0
Перерисовка всего окна редактора, включая дочерние скроллинги.
Пример использования:
stdcall [ted_draw], tedit0
Конструктор элемента, выделяет память необходимую для работы текстового редактора.
Пример использования:
stdcall [ted_init], tedit0
Устанавливает цвет скроллингов и настраивает их размеры в зависимости от размеров окна. Можно вызывать эту функцию при изменении размеров окна в пользовательской программе. Принимает 2 параметра:
1) структура tedit,
2) опции, указывают какие нужно изменить параметры:
Параметры можно комбинировать через логическое или.
Пример использования:
stdcall [ted_init_scroll_bars], tedit0,2
Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:
1) структура tedit,
2) структура для работы 70-й функции (до вызова функции заполнения не требует),
3) строка с путем и именем файла синтаксиса.
Пример использования:
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.
Пример использования:
push eax edi mov edi,tedit0 call [ted_is_select] cmp al,0 ......... pop edi eax
Функция вызываемая для реакции на клавиатуру. В регистре 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
Функция на перемещение или нажатие мыши.
Пример использования:
stdcall [ted_mouse], tedit0
Функция для открытия файла. Принимает 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
Функция для добавления текста. Принимает 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 - константа которая определяет сдвиг курсора после добавления текста.
Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.
Пример использования:
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, строка)
Элемент | Размер (байт) |
---|---|
Количество цветов текста | 4 |
Количество подсвечиваемых слов | 4 |
Цвета интерфейса | 4*6 |
Цвета для текста | 4*(кол. цв. текста) |
Структуры со свойствами и описаниями слов | sizeof(TexColViv)*(кол. слов) |
Разделительный символ, означающий начало описаний слов (всегда равен 0) | 1 байт |
Описания слов (строки текста с 0-ми в конце) | (длинна справочного текста + 1) |
Документация обновлялась последний раз 05.05.10.