Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 01:07   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию свой текстовый компонент

хочу попробовать сделать компонент для работы с текстом.
с возможностью показывать текст без фона (прозрачный),
а так же, разумеется, выделения и форматирования.
чтоб можно было указать с какого по какой символы текст выделен,
с какого по какой символы текст красный или синий,
ну и все прочие параметры - шрифт, размер и т.д.


в практическом плане мне до создания компонентов еще копать и копать,
но меня пока волнует теоретическая сторона вопроса, а именно:

как работают TLabel, TMemo и прочие текстовые компоненты?
каким макаром в них появляются символы, выделение и курсор?
как определяется длина строки (визуальная) для переноса?

я наслышан про всякие там canvas, и в принципе
представляю как можно это реализовать, но(!)
меня мучает вопрос - насколько это рационально,
и вообще адекватно ли?

Вобщем...

допустим наш компонент получает фокус, и теперь
в нем должны появляться символы нажатых кнопок.
цвет текста синий.
нажата кнопка "n" и shift, т.е. в поле ввода
дожна появиться большая синяя буква "N"
(ну в общем на основании нажатых кнопок
и текущего языка, вычислить какой из
256 символов должен появиться)
хорошо, выяснили что это "N",
рисуем его на canvas в координате 0 (по х)
получаем длину этой буквы - length = d
и следующий символ рисуем (нужным цветом)
в координате 0 + d + расстояние между символами (которое также указывается)

если какие-то символы выделены, то на их фоне
сначала прямоугольник нужного цвета,
а потом сами символы...

мигающий курсор, видимо берется из текущей темы виндовс...
-----------------------------------
я прав?
или предложеный вариант - неадекват полный в плане скорости,
и есть что-то более эффективное?

и еще вопрос, возможно фундаментальный:
все стандартные компоненты делфи рисуются на canvas?
и эти дурацкие серые кнопочки тоже, да?

p.s. очень прошу не швыряться в меня ссылками на "готовые" компоненты,
ибо все они так или иначе не будут подходить для моих целей.
xrob вне форума Ответить с цитированием
Старый 27.02.2011, 01:15   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

мне самому етот компонент оч интересен,
я выходил из ситуации 2 способами, или ето лабел, которому можно приделать все кроме
Цитата:
мигающий курсор, видимо берется из текущей темы виндовс...
кстати поясните, а как его можно использовать, ели можно и если знаете

второи вариант ето прозрачныи едит, о котором как минимум 3 темы с большим количеством постов, и только 1 минус, в некоторых ситуациях получаеца так что после выделения текста, остаеца оттенок до тех пор пока не начнеш редактировать текст
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 27.02.2011, 01:24   #3
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

про курсор - чисто теоретические представления...
понятия не имею, как это делается.

"остаеца оттенок до тех пор пока не начнеш редактировать текст "

вот именно поэтому меня и не интересует три темы с большим
кол-вом постов , а интересует как сделать свой компонент,
который будет работать как мне (да и не только мне) надо.

надеюсь модераторы не закроют тему, мол типа есть уже такие же...
нету таких же, ребята, нету...

да, да, да, почитал я темы про прозрачный edit...
но моя тема все-таки не про edit, а про создание нового компонента

-------------------------------
40 человек шарахнулись от моей темы = ))
неужели все так страшно?

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

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

кстати, заметил что у TPanel нету канваса, хотя везде кричат что она есть...

Последний раз редактировалось xrob; 27.02.2011 в 20:54.
xrob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Компонент-предок, компонент-родитель amico Помощь студентам 1 23.09.2015 21:20
От какого класса унаследовать свой компонент? spamer Общие вопросы Delphi 9 19.02.2010 22:24
Как добавить свой компонент в палитру Делфи? Utkin Софт 20 04.02.2010 14:25
Как создать свой компонент? Д'якон Компоненты Delphi 1 21.05.2008 16:37
Текстовый файл в текстовый массив Kimimaru Общие вопросы C/C++ 1 02.12.2007 11:55