Стиль Firemonkey TButton с двумя разными текстами

Я пытаюсь создать виртуальную клавиатуру, где на каждой кнопке есть как цифра, так и несколько букв. Например, рядом с числом 2 будет текст ABC меньшим размером шрифта, а рядом с числом 3 будет DEF.

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

Разработка стиля кнопки

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

Образец клавиатуры во время выполнения

Как я могу создать единый стиль для многократного использования, который также может позволить мне использовать различный подтекст в каждой кнопке? Или мне придется создавать уникальный стиль для каждой кнопки?


person Jerry Dodge    schedule 25.04.2017    source источник
comment
Мне пришлось сделать что-то похожее, и в конце я создал для каждого индивидуальный стиль. Не лучшая идея, но это сработало   -  person Alberto Miola    schedule 25.04.2017


Ответы (1)


Вы можете решить эту проблему, задав для текста StyleName метки ABC значение text, а для StyleName числовой метки - значение Number.

Создайте класс, который переопределяет класс кнопки.

TButton = class(FMX.StdCtrls.TButton)
protected
  procedure ApplyStyle; override;
end;

procedure TButton.ApplyStyle;
  var NumberLabel : TLabel;
begin
  //That method will find for a label with stylename number and set the tag of component in it.
  inherited;
  if FindStyleResource<TLabel>('Number', NumberLabel) then
    NumberLabel.Text := IntToStr(Tag);
end;

Теперь установите стиль для всех кнопок. Свойство Text установит текст буквенно-цифровой текст, а тег установит число. Он будет работать только во время выполнения.

person Kohull    schedule 25.04.2017