Перейти к содержанию
  • Регистрация
slav_z

Работа с атрибутами текста

Рекомендуемые сообщения

image.png.1fbb6d5d08e9b1bec7874491eea83dcf.png

Как сделать текст с подобными атрибутами? Очень просто!

(Цвет текста не работает в XE8) Вот весь код:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Text1: TText;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

type
  TTextAccess = class(TText);

procedure ClearTextAttribute(Text: TText);
begin
  TTextAccess(Text).Layout.ClearAttributes;
end;

procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor);
var Font: TFont;
begin
  Font:=TFont.Create;
  Font.Assign(Text.Font);
  Font.Style:=FontStyles;
  TTextAccess(Text).Layout.AddAttribute(
    TTextRange.Create(Pos,Length),
    TTextAttribute.Create(Font,FontColor));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed);
  AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue);
  AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen);

  Text1.Repaint;

end;

end.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Век живи, век учись. Спасибо, не знал о такой возможности. Поигрался в тестовом проекте - все действительно работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
procedure ClearTextAttribute(Text: TText);
begin
  for var I:=0 to TTextAccess(Text).Layout.AttributesCount-1 do
  TTextAccess(Text).Layout.Attributes[I].Attribute.Font.Free;
  TTextAccess(Text).Layout.ClearAttributes;
end;

поправка... иначе созданные объекты TFont не разрушаются... так же необходимо вызвать ClearTextAttribute() при разрушении формы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От ra.eremeev
      Добрый день!
      Нуждаюсь в помощи.
      Необходимо в TText вывести текст в Unicode, содержащий смайлы.
      На iOS проблем нет - смайлы отображаются. 
      На Android - монохромные значки (залитые черным) - .
      При этом, если выводить в ListView (через TListItemText), то смайлы выходят и на Android. Шрифт при этом тот же, что и для TText. 
      Но необходимо именно в TText
      Помогите, пожалуйста, как вывести смайлы на Andorid в TText?
       
    • От yooSee
      Привет Всем уважаемые! 
      Пытаюсь сделать растягивание по содержимому компонента. Как это реализовано в мессенджерах типа WhatsApp если большой текст то растягивает (выделяется) по содержимому большое поле, если короткий то малое. 
        Text2.Text := Memo1.Lines.Strings[4];   text2.Height := canvas.TextHeight(Text2.Text); //по высоте строки меняется т.к. там и есть одна строка в TText просто переносится WordWrap визуально.   text2.Height:=canvas.TextWidth(text2.Text); //  - так чушь  Как это вообще реализовано кто нибудь сталкивался?

    • От sviat9440
      Почему в 10.1 цвет надписи тянется из стиля, хотя в StylledSettings галочка FontColor отключена?

    • От Axbor
      Как исправит такой косяк с отображением текста TText? Если видно, там остатки от текста отображаются. Платформа андроид, Rad Studio XE 10.

    • От namxai
      Всем привет.
      Реализую поведение TListBox, при котором на OnItemClick, высота Item-а увеличивается и становится виден TText (делаем Visible:=true).
       
      Анимация для наглядности:
      ).
       
      Реализуется так:
        Detail := Item.Children.Items[1];   (Detail as TText).Visible := true;   ItemAni := TFloatAnimation.Create(Item);   ItemAni.Parent := Item;   ItemAni.StartValue := 50;   ItemAni.StopValue := 150;   ItemAni.PropertyName := 'Height';   ItemAni.Start;   ItemAni.OnFinish := FreeItemAni; Вопрос такой. Как мне узнать сколько места займет разбитый автоматом на строки текст в TText, чтобы подстраивать высоту Item под размер текста(он получается от 1 до 7-8 строк). Как узнать на сколько подстрок разбивает TText содержимое?
       
      Сильно не пинайте, я дизайнер, а не программист.
    • От brunnengi
      Здравствуйте
       
      Появилась задача сделать надписи так, что бы цвет букв в одном слове был разный, как на картинке например

      Но так и не нашел решения. Делать слова по одной букве тоже не вариант. 
      Как поступить, какой есть выход? Может кто то уже делал и есть наработки?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...