Многострочные подсказки в Firemonkey - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать многострочную подсказку в моем приложении, сделанном в delphi 10 seattle (FMX).похоже, что при установке подсказок разрыв строки не работает.

Button1.Hint := 'Line 1' + #13#10 + 'Line2';

Любая идея о том, как это можно сделать.в VCL это работает нормально.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Я могу предложить подсказку, что я только что работал над тем же типом проблемы в 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".

0 голосов
/ 14 ноября 2018

проверьте, не проверено ли на вашей кнопке свойство ShowHint.

  Button1.Hint := 'line 1' + sLineBreak + 'line 2';
...