Re: Запись печатания текста
От: velkin Удмуртия https://kisa.biz
Дата: 28.08.23 17:45
Оценка:

Запись печатания текста


Давайте начнём с записи текста при печатании. Идея довольно простая, хотя я не говорю про реализацию.

Предположим у нас есть.
1. Текстовый редактор.
2. События клавиатуры.

Пока не касаемся других событий.
3. События мыши.
4. События выделения текста.
5. События вырезания, копирования, вставки.

По сути нужно перехватить события клавиатуры.
1. Переопределение виртуального метода события нажатия клавиатуры.
2. Подключение сигналов/слотов.

И установить.
1. Временной штамп.
2. Или смещение от какого-то начального временного штампа.

А что, если пользователь.
1. Перевёл часы, пока печатал текст.

Потому даже если все записанные временные штампы абсолютны.
1. Смещение времени должно зависеть хотя бы от начала работы программы.
2. Нужно учитывать последовательность временных штампов при предыдущих запусках.

Если подумать, абсолютный временной штамп не особо и нужен. Но в распределённой системе его всё равно придётся использовать. Я может и забегаю вперёд, но здесь главное, чтобы в одном логе записи всё шло строго по порядку.

Виды временных штампов


1. Абсолютный временной штамп.
[2023.08.28 21:00:00]
2023.08.28 21:00:00
2023.08.28 21:00:01
2023.08.28 21:00:02

2. Временной штамп относительно запуска программы.
[2023.08.28 21:00:00]
0
1
2

3. Временной штамп относительно предыдущего события клавиатуры.
[2023.08.28 21:00:00]
0
1
1

Положение курсора


Видимо следующее, что надо записать положение текстового курсора. Кто не знает, это выглядит как мигающая каретка. Не путайте его с курсором мыши.

Вспомнил ещё такую тему, некоторые люди возмущались, что каждая клавиатура или мышь не имеет собственного курсора, а использует общий. Типа это признак того, что софт и в частности операционки не развивались. Как раз эти импотенты, ничего нормально сделать не могут.

Видимо здесь можно применить такой же принцип.

1. Абсолютное положение от начала.
"WASD"
W 0
A 1
S 2
D 3

2. Относительное положение от предыдущего положения.
"WASD"
W 0
A 1
S 1
D 1

Виды операций


Понятно, что всё не может быть так просто, ведь мне надо ещё записать вид операции.

Вспоминается принцип CRUD.
┌─┬──────┬──────┬──────┬──────┬───────────┐
│1│Create│Read  │Update│Delete│Базы данных│
├─┼──────┼──────┼──────┼──────┼───────────┤
│2│Insert│Select│Update│Delete│SQL        │
├─┼──────┼──────┼──────┼──────┼───────────┤
│3│New   │Read  │Write │Delete│Объекты    │
├─┼──────┼──────┼──────┼──────┼───────────┤
│4│Add   │Read  │Write │Remove│Списки     │
└─┴──────┴──────┴──────┴──────┴───────────┘

Но у клавиатуры же всё не совсем так.

Для удаления есть клавиши.
1. Delete.
2. Backspace.

Они ведут себя.
1. Одинаково, если есть выделение.
2. По разному, если его нет, то есть просто каретка с позицией.

Наверное можно было бы.
1. Хранить символ или строку с типом операции CRUD, не будь вот таких различий.
2. А так придётся хранить конкретное нажатие клавиш.

Проверка идей на практике


Если говорить о практике, надо посмотреть, что там выводит QKeyEvent. Потому что лично я буду проверять идеи на Qt.

А если вы где-то уже видели реализацию описываемых идей, напишите название программ.

Как говорится продолжение когда-нибудь следует.
1. Или продумывание этой идеи.
2. Или описание следующей.

Я ешё забыл сказать для чего надо записывать печатание текста, но я думаю вы сами догадаетесь. Да и в принципе это просто размышления в реальном времени, чтобы мне не было скучно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.