Многострочные подсказки в Firemonkey
Я пытаюсь создать многострочную подсказку в моем приложении, сделанном в delphi 10 seattle (FMX). кажется, что разрыв строки не работает при установке подсказок.
Button1.Hint := 'Line 1' + #13#10 + 'Line2';
Любая идея о том, как это можно сделать. это работает нормально в VCL, хотя.
1 ответ
Проверьте, не проверено ли на вашей кнопке свойство ShowHint.
Button1.Hint := 'line 1' + sLineBreak + 'line 2';
Я могу намекнуть, что я только что справился с той же проблемой в C++ Builder Rio. У меня нет Delphi, только C++ Builder, но эти два продукта настолько взаимосвязаны, что я все время использую подсказки (или код) из Delphi для решения своих проблем.
В C/C++ вы обычно можете использовать "\r" или его эквивалент "\n\l" для отображения возврата каретки (который я пытался отобразить в TMemo). TMemo выглядел так, как будто он просто удалял коды (за исключением того, что он думал, что "\l" для перевода строки был недопустимым escape-кодом, поэтому отображал только "l") и отображал все в одной строке. Я заметил, что ярлык для вкладки ("\t") работает.
Опять же, в C/C++ есть и другие варианты создания символов. Эквивалент того, что вы делаете, "char(13)+char(10)" просто отображает символы "23" со всем в той же строке (как вы описываете). Вот как можно добавлять символы при использовании десятичной дроби (с основанием 10). Если бы я хотел использовать шестнадцатеричный формат, я бы написал "\0xd\0xa" (который просто удаляется из текста и отображается в одной строке, как и во втором абзаце выше).
Решение, которое я нашел, работало в C++ Builder, заключалось в использовании восьмеричной записи для моей кодировки символов ("\015\012"). Лично я, примерно за 50 лет программирования, никогда раньше не видел ситуации, когда шестнадцатеричная система не работает, но восьмеричная работает, но я был достаточно отчаянным, чтобы попробовать это.
Для всего этого тестирования и отладки я создал новый проект, добавил TMemo и кнопку (и установил ShowHint=true для кнопки) в форму и ввел следующий код для кнопки:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
UnicodeString CR = "\015\012";
Memo1->Text = "a" + CR + "b";
Button1->Hint = Memo1->Text + " (hint)";
}
Итак, мое решение вашей проблемы - выяснить, как можно ввести восьмеричные коды для символов и отобразить соответствующий текст в Delphi, а затем использовать эту кодировку для восьмеричных символов "015" и "012".