Вертикальный текст в Label

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вертикальный текст в Label

Сообщение Little_Roo » 29.04.2010 10:48:51

В Delphi использовал компоненты Raize - там можно было Label повернуть, изогнуть и т.п.
Можно ли нечто подобное измыслить в лазаре - и если да, то как (желательно с примером)
В принципе нужно пока только повернуть Label - сделать надписи к оси X TChart'a
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Вертикальный текст в Label

Сообщение Maxizar » 29.04.2010 12:31:49

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Font.Orientation:=300; //Повернули на 30 градусов

  canvas.Font.Orientation:=900;  //Задали угол в 90 градусов
  Canvas.TextOut(100,100,'Ура получилось :)))'); //Ну и собственно вывод тектса
end;
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Вертикальный текст в Label

Сообщение VirtUX » 29.04.2010 13:13:24

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,'Ура получилось :)))'); //Ну и собственно вывод тектса

Хотя это и не очень красиво...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Вертикальный текст в Label

Сообщение скалогрыз » 29.04.2010 13:58:18

в принципе, написать свой Label с правильной поддержкой Orientation не трудно.
Хотя лучше сделать дополнительное свойство в уже существующий :)

но в итоге, если от Label требуются поворот только на 90-кратные градусы, то есть более... правильные способы (через bitmap-ы)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Вертикальный текст в Label

Сообщение Maxizar » 29.04.2010 15:03:18

Ну Label я не мучал, когда у меня возникла проблема как у вас (подпись осей графика), правда я писал класс с нуля в делфи было на GDI+ на FPC реализовал на OpenGL. Так вот я как и скалогрыз выводил на канву.

Изображение
http://xmages.net/upload/3deed17f.png
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Вертикальный текст в Label

Сообщение Little_Roo » 29.04.2010 16:51:54

Добавлено спустя 9 часов 24 минуты 52 секунды:
VirtUX писал(а):
Maxizar писал(а):Label1.Font.Orientation:=300; //Повернули на 30 градусов

Повернули и потеряли текст. Чем больше угол, тем глубже (влево) прячется текст.
Например: При Label1.Font.Orientation:=-300; прячется начало текста. А при Label1.Font.Orientation:=-900; его уже совсем не видно.
Как побороть?

Методом художественного тыка :D нашел костыль - перед текстом нужны пустые строчки в кол-ве N штук (видимо от длинны строки зависит)- тогда текст выезжает
Спать иду - копать буду завтра

Добавлено спустя 14 часов 20 минут 7 секунд:
Методом художественного тыка :D нашел костыль - перед текстом нужны пустые строчки в кол-ве N штук (видимо от длинны строки зависит)- тогда текст выезжает
Спать иду - копать буду завтра

Пока самый идиотский метод :D но пока прокатывает - Label1.Autosize := false, растягиваем рамку - как я понял, фиксируется верхний левый пиксель текста (что правильно), а вот при повороте текста против часовой стрелки- опа! мы уже ЗА полем вывода :(
Так что нужно как-то при повороте текста его еще и смещать вниз, причем на вполне определенное (по длине текста и от угла поворота) место
Может, при при изменении label.fomt.orientation от дефолтного autosize сразу переключать ?
Извините за сумбур, ламерство и троллизм :shock:

Lazarus 0.9.29 r25020 FPC 2.4.1 i386-win32-win32/win64
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Вертикальный текст в Label

Сообщение Brainenjii » 01.05.2010 08:30:37

http://wiki.lazarus.freepascal.org/OrphPort - вот ещё можно посмотреть как сделали
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Вертикальный текст в Label

Сообщение Ask » 22.07.2010 11:00:25

Если это ещё кому-инбудь интересно :) , начиная с r26772 TAChart (по идее) корректно поддерживает
произвольную ориентацию подписей к осям и значениям (Marks.LabelFont.Orientation).
См. demo/labels/labelsdemo.lpr
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

Рейтинг@Mail.ru