Yes it is possible. Use TdbRichEdit. I did the formatting and highlighting of the keywords that are recorded in the database with this script:
procedure frmImageEdit_TagTimer_OnTimer (Sender: TObject);
// обработка списка тегов в редакторе тегов
var
i: integer;
Tags: array of string;
s: string;
tmpTag: string;
tmpETag: string;
begin
TagTimer.Enabled := False; // оставновить таймер
s := frmImageEdit.redTags.Text; // взять данные о тегах
frmImageEdit.redTags.Clear; // очистить редактор
// запятые заменить пробелами, убрать перевод строки и двойные пробелы
s := ReplaceStr(s,',',' ');
s := ReplaceStr(s,chr(13),' ');
s := ReplaceStr(s,' ',' ');
Tags := SplitString( s,' '); // получить список тегов в виде строкового массива
for i := 0 to length(Tags) - 1 do
begin
tmpTag := Trim(Tags[i]); // на всякий случай, чтобы остался только текст
if (tmpTag <> '') then
begin
// ищем тег в базе
tmpETag := VarToStr( SQLExecute('SELECT name FROM tag WHERE upper( name ) = upper("'+tmpTag+'")') );
// если не найден, то
if tmpETag = '' then
begin // вставляем тег в написании пользователя, но с заглавной первой буквой, жёлтым цветом
tmpTag := UpperCase(copy(tmpTag,1,1)) + copy(tmpTag,2,length(tmpTag)-1);
frmImageEdit.redTags.InsertTextEx(tmpTag,$00FFFF,11,0,'Segoe UI')
end // если найден, то вставляем в написании из базы, белым цветом
else
frmImageEdit.redTags.InsertTextEx(tmpETag,$FFFFFF,11,0,'Segoe UI');
// добавляем пробел
frmImageEdit.redTags.InsertTextEx(' ',$FFFFFF,11,0,'Segoe UI');
end;
end;
end;
The whole project is described here
Визуальное программирование:
блог и
телеграм-канал.