Вертикальный текст в Label
Модератор: Модераторы
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Вертикальный текст в Label
В Delphi использовал компоненты Raize - там можно было Label повернуть, изогнуть и т.п.
Можно ли нечто подобное измыслить в лазаре - и если да, то как (желательно с примером)
В принципе нужно пока только повернуть Label - сделать надписи к оси X TChart'a
Можно ли нечто подобное измыслить в лазаре - и если да, то как (желательно с примером)
В принципе нужно пока только повернуть Label - сделать надписи к оси X TChart'a
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Font.Orientation:=300; //Повернули на 30 градусов
canvas.Font.Orientation:=900; //Задали угол в 90 градусов
Canvas.TextOut(100,100,'Ура получилось :)))'); //Ну и собственно вывод тектса
end;
Maxizar писал(а):Label1.Font.Orientation:=300; //Повернули на 30 градусов
Повернули и потеряли текст. Чем больше угол, тем глубже (влево) прячется текст.
Например: При Label1.Font.Orientation:=-300; прячется начало текста. А при Label1.Font.Orientation:=-900; его уже совсем не видно.
Как побороть?
Например здесь (изменил направление не снизу-вверх, а сверху-вниз):
Код: Выделить всё
canvas.Font.Orientation:=-900; //Задали угол в 90 градусов
Canvas.TextOut(100,100,'Ура получилось :)))'); //Ну и собственно вывод тектсаМожно побороть это так:
Код: Выделить всё
canvas.Font.Orientation:=-900; //Задали угол в 90 градусов
Canvas.TextOut(100 - canvas.Font.height,100,'Ура получилось :)))'); //Ну и собственно вывод тектсаХотя это и не очень красиво...
в принципе, написать свой Label с правильной поддержкой Orientation не трудно.
Хотя лучше сделать дополнительное свойство в уже существующий
но в итоге, если от Label требуются поворот только на 90-кратные градусы, то есть более... правильные способы (через bitmap-ы)
Хотя лучше сделать дополнительное свойство в уже существующий
но в итоге, если от Label требуются поворот только на 90-кратные градусы, то есть более... правильные способы (через bitmap-ы)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ну Label я не мучал, когда у меня возникла проблема как у вас (подпись осей графика), правда я писал класс с нуля в делфи было на GDI+ на FPC реализовал на OpenGL. Так вот я как и скалогрыз выводил на канву.

http://xmages.net/upload/3deed17f.png

http://xmages.net/upload/3deed17f.png
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Добавлено спустя 9 часов 24 минуты 52 секунды:
Методом художественного тыка
нашел костыль - перед текстом нужны пустые строчки в кол-ве N штук (видимо от длинны строки зависит)- тогда текст выезжает
Спать иду - копать буду завтра
Добавлено спустя 14 часов 20 минут 7 секунд:
Пока самый идиотский метод
но пока прокатывает - Label1.Autosize := false, растягиваем рамку - как я понял, фиксируется верхний левый пиксель текста (что правильно), а вот при повороте текста против часовой стрелки- опа! мы уже ЗА полем вывода
Так что нужно как-то при повороте текста его еще и смещать вниз, причем на вполне определенное (по длине текста и от угла поворота) место
Может, при при изменении label.fomt.orientation от дефолтного autosize сразу переключать ?
Извините за сумбур, ламерство и троллизм
Lazarus 0.9.29 r25020 FPC 2.4.1 i386-win32-win32/win64
VirtUX писал(а):Maxizar писал(а):Label1.Font.Orientation:=300; //Повернули на 30 градусов
Повернули и потеряли текст. Чем больше угол, тем глубже (влево) прячется текст.
Например: При Label1.Font.Orientation:=-300; прячется начало текста. А при Label1.Font.Orientation:=-900; его уже совсем не видно.
Как побороть?
Методом художественного тыка
Спать иду - копать буду завтра
Добавлено спустя 14 часов 20 минут 7 секунд:
Методом художественного тыканашел костыль - перед текстом нужны пустые строчки в кол-ве N штук (видимо от длинны строки зависит)- тогда текст выезжает
Спать иду - копать буду завтра
Пока самый идиотский метод
Так что нужно как-то при повороте текста его еще и смещать вниз, причем на вполне определенное (по длине текста и от угла поворота) место
Может, при при изменении label.fomt.orientation от дефолтного autosize сразу переключать ?
Извините за сумбур, ламерство и троллизм
Lazarus 0.9.29 r25020 FPC 2.4.1 i386-win32-win32/win64
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
http://wiki.lazarus.freepascal.org/OrphPort - вот ещё можно посмотреть как сделали
Если это ещё кому-инбудь интересно
, начиная с r26772 TAChart (по идее) корректно поддерживает
произвольную ориентацию подписей к осям и значениям (Marks.LabelFont.Orientation).
См. demo/labels/labelsdemo.lpr
произвольную ориентацию подписей к осям и значениям (Marks.LabelFont.Orientation).
См. demo/labels/labelsdemo.lpr
