Перейти к содержанию
Fire Monkey от А до Я
  • 0

Canvas FillText: особенности работы


web_warp

Вопрос

В этой теме я уже задавал вопрос, но, наверное, я просто ошибся разделом. Аккумулирую вопрос:

10.1 Berlin, C++, Win8, FMX. Интересует особенность работы Canvas->FillText(), вот код:

void __fastcall TTabbedForm::StringGrid1DrawColumnCell(TObject *Sender, TCanvas * const Canvas,
		  TColumn * const Column, const TRectF &Bounds, const int Row,
		  const TValue &Value, const TGridDrawStates State)
{
	// код...
	UnicodeString CT = TabbedForm->StringGrid1->Cells[Column->Index][Row];
	Canvas->FillText(Bounds, CT, false, 100,TFillTextFlags() << TFillTextFlag::ftRightToLeft, TTextAlign::taTrailing, TTextAlign::taTrailing);
}

В итоге наблюдаются совсем странные "фишки":

1. Разворот времени, хотя в FillText() текст передаётся правильный.canvas error.png

2. Если текст заканчивается на скобку, то скобка разворачивается и переносится в начало текста.error canvas.png

3. И, если есть и кириллица, и латиница, то текст просто не выводится)) (хотя есть подозрение, что это кавычки виноваты).canvaserror2.png

 

Кто сталкивался? Что делать? Есть альтернативы?

Изменено пользователем web_warp
Расставил картинки под пункты.
Ссылка на комментарий

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

  • 0
  • Модераторы

если я правильно понял, вы используете написание текста справа-налево

TFillTextFlag.RightToLeft - этот параметр не нужно указывать, в делфи там ставится []

Ссылка на комментарий
  • 0
В 22.10.2016 в 10:41, ZuBy сказал:

TFillTextFlag.RightToLeft - этот параметр не нужно указывать, в делфи там ставится []

Это С++, там на этих костылях весь фундамент держится. Изменение параметра RightToLeft <--> ftRightToLeft никакого эффекта не дают. (

Согласно документации (тык, тык) всё верно, но отрабатывает некорректно до ужаса.

Эти параметры не несут функционального смысла, у меня ничего не меняется:

enum class DECLSPEC_DENUM TFillTextFlag : unsigned int { RightToLeft, ftRightToLeft _DEPRECATED_ATTRIBUTE3("Use TFillTextFlag.RightToLeft")  = 0x0 };
Изменено пользователем web_warp
Ссылка на комментарий
  • 0

Простите меня за мою же глупость. ) Разобрался, с горем-пополам.

Верная строка вот такая:

TabbedForm->StringGrid1->Canvas->FillText(Bounds,TabbedForm->StringGrid1->Cells[Column->Index][Row], false, 100,TFillTextFlags(), TTextAlign::taLeading, TTextAlign::taLeading);

Большинство артефактов удалось устранить.

Ссылка на комментарий

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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