Отображение повернутого текста на форме

В зависимости от дизайна разрабатываемого приложения иногда может возникнуть необходимость отображения не простых горизонтальных текстовых меток, а текста, расположенного по вертикали или повернутого на определенный угол. С помощью стандартных компонентов дизайнера форм такая задача не осуществима. В качестве варианта обхода можно использовать компонент ImageButton. Для этого необходимо настроить его визуальное отображение по подобию текстовой метки и загрузить изображение с перевернутым текстом. Если текст необходимо повернуть на произвольный угол, то необходимо предварительно подготовить изображения в каком-либо графическом редакторе. Если текст необходимо повернуть на угол, кратный 90, то можно динамически сформировать изображения, используя ресурсы сборки Drawing:

Sub ChangeAgleForText(Text: String; ImgButton: ImageButton);
Var
    Graph: IGxGraphics;
    TextSize: IGxRectF;
    Img: IGxImage;
Begin
    Graph := GxGraphicsClass.FromImage(ImgButton.GetImage);
    //Настройка кнопки таким образом, чтобы она внешне напоминала компонент Label
    ImgButton.BorderStyle := ControlBorderStyle.None;
    //Вычисление размера, который будет занимать текст в компоненте
    TextSize := Graph.MeasureTextRF(Text, ImgButton.NormalLook.Font.GxFont, New GxRectF.Create(0000), Null);
    //Установка размеров и текста для кнопки, получение изображения с текстом
    ImgButton.Height := Double.RoundInt(TextSize.Height);
    ImgButton.Width := Double.RoundInt(TextSize.Width);
    ImgButton.Text := Text;
    Img := ImgButton.GetImage;
    //Разворот изображения
    Img.RotateFlip(GxRotateFlipType.Rotate90FlipNone);
    //Разворот кнопки, удаление текста и установка нового изображения
    ImgButton.Height := Double.RoundInt(TextSize.Width);
    ImgButton.Width := Double.RoundInt(TextSize.Height);
    ImgButton.Text := "";
    ImgButton.DisabledLook.Background := Img;
    //Запрет доступа к кнопке, чтобы она работала в режиме текстовой метки
    ImgButton.Enabled := False;
End Sub ChangeAgleForText;

Данная процедура динамически формирует изображение на основании передаваемого текста и устанавливает его в передаваемый компонент. Вызвать процедуру можно, например, в событии формы OnCreate:

Sub TESTFormOnCreate(Sender: Object; Args: IEventArgs);
Begin
    ChangeAgleForText("Текст", ImageButton1);
End Sub TESTFormOnCreate;

См. также:

Примеры