RNG21 писал(а):По возможности хотелось бы по этому варианту минимальный работающий пример (не к спеху, время есть). И конечно, каретка нужна, в стандартной экранной лупе ведь отображается и выделение, и она, значит этого добиться можно?
Ну вот, например. Набросал по быстрому. Самый-самый-самый минимум, но каретка не отображается — это тебе домашнее задание.
Можно выделять текст, можно редактировать текст — дописывать, переписывать выделенное, удалять (правда каретку не видно). Для масштабирования нужно крутить колесо мышки, можно с зажатым Ctrl для более тонкого масштабирования.
У контрола, естественно, нет большинства типичных для этого свойств или событий. Даже свойства Texf нет, изменить текст можно только зайдя в сам UserControl и поменяв свойство Text у вложенного TextBox-а.
Сдеано только событие MouseWheel, чтобы со стороны кода формы сделать обработчик, который меняет размер контрола. Изменение размера ограничено рамками от ×0.1 до x1: как я уже говорил, для хорошего качества лучше чтобы «оригинальный размер» контрола никогда не был меньше, чем фактический/рабочий, т.е. чтобы масштабирование всегда работало на уменьшение картинки, а не на растягивание. Хотя самому контролу глубоко плевать: он может и на увеличение масштабировать, и вообще: менять масштаб по вертикали и горизонтали с разными пропорциями.
Свойства OriginalWIdth/OriginalHeight задают размер TextBox-а такой, какой бы он имел без масштабирования — причём всегда в твипах, а вот свойства Width/Height задают реальный размер контрола (с учётом масштбирования), причём единциами измерения может быть что угодно.
Просьба никуда не выкладывать модули
cwmsgflt.cls (
CUniWindowMsgFilter) и
mwmsgflt.bas (
MUniWindowMsgFilter) — я их выдрал из одного из своих проектов, они в очень многих моих проектах фигурируют в слегка видоизменённом каждый раз состоянии. Я их планирую оформить как кирпич, но в данном случае это шибко урезанные и далёкие от цели варианты модулей.
Код вообще не откомментирован, поэтому вопросу по коду приветствуются.