Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];

Вниз

Вертикальный TLablel   Найти похожие ветки 

 
Tima   (2009-08-05 17:38) [0]

Каким образом выводить текст вертикально?
Точнее под углом 90 градусов.


 
Palladin ©   (2009-08-05 17:50) [1]

никак


 
{RASkov} ©   (2009-08-05 17:56) [2]

взять паинтбокс, т.е. отказаться от ТЛабел и рисовать текст самому хоть вертикально, хоть наклонно... хоть задом наперед.
вариантов реализаций много. например LogFont или канву повернуть...


 
{RASkov} ©   (2009-08-05 18:01) [3]

кстати вертикально малой кровью можно и в Лабеле сделать например так:
В
е
р
т
и
к
а
л
ь
н
ы
й

т
е
к
с
т
!


 
Palladin ©   (2009-08-05 18:06) [4]

)) это будет гениально... аффтора зачетно уволят )


 
MonoLife ©   (2009-08-05 18:25) [5]

не Tlabel, типа такого:
s:string="Text";
Var i, k: integer;
begin
k:=10;
for i:=1 to Length(s) do
  begin
   self.Canvas.TextOut(20,k,s[i]);
   inc(k,15);
  end;
end;


 
Юрий Зотов ©   (2009-08-05 18:25) [6]

Для шрифтов TrueType - можно:

procedure TForm1.FormPaint(Sender: TObject);
var
 LogFont: TLogFont;
 OldFont, NewFont: HFont;
begin
 OldFont := GetObject(Font.Handle, SizeOf(TLogFont), @LogFont);
 LogFont.lfEscapement := 900; // Угол в десятых долях градуса
 NewFont := CreateFontIndirect(LogFont);
 SelectObject(Canvas.Handle, NewFont);
 Canvas.TextOut(50, 50, "Привет!");
 SelectObject(Canvas.Handle, OldFont);
 DeleteObject(NewFont)
end;


 
Юрий Зотов ©   (2009-08-05 18:28) [7]

Естественно, это уже не TLabel.
А со стандартным TLabel - действительно никак. Он этого не умеет.


 
Юрий Зотов ©   (2009-08-05 18:48) [8]

Ошибочка вкралась, невнимательно посмотрел, что возвращает GetObject. Вот так лучше будет:

procedure TForm1.FormPaint(Sender: TObject);
var
 LogFont: TLogFont;
 NewFont: HFont;
begin
 GetObject(Font.Handle, SizeOf(TLogFont), @LogFont);
 LogFont.lfEscapement := 900; // Угол в десятых долях градуса
 NewFont := CreateFontIndirect(LogFont);
 SelectObject(Canvas.Handle, NewFont);
 Canvas.TextOut(50, 50, "Привет");
 SelectObject(Canvas.Handle, Font.Handle);
 DeleteObject(NewFont)
end;


 
Kolan ©   (2009-08-05 22:43) [9]

Зачем писать текст вертикально, его не удобно читать :)


 
Amoeba ©   (2009-08-05 23:11) [10]


> Tima   (05.08.09 17:38)
>
> Каким образом выводить текст вертикально?
> Точнее под углом 90 градусов.

Написать свой компонент или использовать готовый - их в сети вагон и маленькая тележка.


 
Rouse_ ©   (2009-08-05 23:45) [11]


> Юрий Зотов ©   (05.08.09 18:48) [8]
> Вот так лучше будет:

Ну на всякий случай лучше возвращать на место то, что выдал первоначальный SelectObject. Например:

OldFont := SelectObject(Canvas.Handle, NewFont);
Canvas.TextOut(50, 50, "Привет");
DeleteObject(SelectObject(Canvas.Handle, OldFont));


 
Юрий Зотов ©   (2009-08-06 07:56) [12]

> Rouse_ ©   (05.08.09 23:45) [11]
> лучше возвращать на место то, что выдал первоначальный SelectObject

Э-э-э... вообще-то я в курсе стандартов.... только в нашем случае заранее известно, что же выдаст первоначальный SelectObject:

OldFont := SelectObject(Canvas.Handle, NewFont);
Caption := Format("%x %x", [Font.Handle, OldFont]);

А раз так, то лишняя переменная ни к чему. Именно поэтому так и было написано.


 
AIK ©   (2009-08-06 12:54) [13]

Через букву добовлять #13
Label1.Caption:="a"+#13+"b"+#13+"c";
)))


 
brother ©   (2009-08-07 04:39) [14]

> Через букву добовлять #13

#13#10


 
PZ   (2009-08-07 07:18) [15]

> [8] Юрий Зотов ©   (05.08.09 18:48)

А пример-то не работает.

Нашел аналогичный пример
http://www.zoonman.com/library/rotatetext.htm
так там примечание : "под WinXP почему-то не работает".
Есть ли этому объяснение?


 
Юрий Зотов ©   (2009-08-07 10:13) [16]

Пример может не работать по 2-м причинам:

1. Форме не назначен обработчик OnPaint.
2. Форме не выставлен TrueType шрифт.

И то, и другое - невнимательность экспериментатора. Мы с XP в ней не виноваты, чес-слово.


 
Юрий Зотов ©   (2009-08-07 10:29) [17]

Выдержка из MSDN:

lfEscapement

Specifies the angle, in tenths of degrees, between the escapement vector and the x-axis of the device. The escapement vector is parallel to the base line of a row of text.

Windows NT/2000/XP:

When the graphics mode is set to GM_ADVANCED, you can specify the escapement angle of the string independently of the orientation angle of the string"s characters.

When the graphics mode is set to GM_COMPATIBLE, lfEscapement specifies both the escapement and orientation. You should set lfEscapement and lfOrientation to the same value.

Windows 95/98/Me:

The lfEscapement member specifies both the escapement and orientation. You should set lfEscapement and lfOrientation to the same value.

lfOrientation

Specifies the angle, in tenths of degrees, between each character"s base line and the x-axis of the device.

================

Если верить той же MSDN, то по умолчанию в XP стоит GM_COMPATIBLE - значит, lfEscapement и lfOrientation надо выставлять одинаковыми. Тем не менее, у меня работает и без этого.


 
Tima   (2009-08-07 13:09) [18]


> Ошибочка вкралась, невнимательно посмотрел, что возвращает
> GetObject. Вот так лучше будет:
>
> procedure TForm1.FormPaint(Sender: TObject);
> var
>  LogFont: TLogFont;
>  NewFont: HFont;
> begin
>  GetObject(Font.Handle, SizeOf(TLogFont), @LogFont);
>  LogFont.lfEscapement := 900; // Угол в десятых долях градуса
>  NewFont := CreateFontIndirect(LogFont);
>  SelectObject(Canvas.Handle, NewFont);
>  Canvas.TextOut(50, 50, "Привет");
>  SelectObject(Canvas.Handle, Font.Handle);
>  DeleteObject(NewFont)
> end;

Этот пример конечно же работает, но как мне заставить таким образом рисовать на панели, которая в свою очередь лежит на закладке (TTabSheet)?


 
Юрий Зотов ©   (2009-08-07 13:18) [19]

> Tima   (07.08.09 13:09) [18]

type
 TMyPanel = class(TPanel)
 protected
   procedure Paint; override;
 end;

procedure TMyPanel.Paint;
begin
 inherited;
 // А здесь можно рисовать хоть малиновых слонов.
end;


 
PZ   (2009-08-07 14:41) [20]

>  [16] Юрий Зотов ©   (07.08.09 10:13)

Действительно 2.
Добавил две строчки:
 
 Font.CharSet := DEFAULT_CHARSET;          
 Font.Name := "Times New Roman";

и текст повернулся куда надо.
Спасибо


 
Юрий Зотов ©   (2009-08-07 16:28) [21]

> PZ   (07.08.09 14:41) [20]

Можно и ничего не добавлять - есть Инспектор Объектов.


 
PZ   (2009-08-07 17:29) [22]

> [21] Юрий Зотов ©   (07.08.09 16:28)

Спасибо, ясно



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1250141829
pvr
2009-08-13 09:37
2009.10.11
Управление фотоаппаратом


15-1249582655
TUser
2009-08-06 22:17
2009.10.11
Комнатное растение никому не надо?


10-1160294865
Primus
2006-10-08 12:07
2009.10.11
Позднее связывание


3-1227857279
АндрейВладимирович
2008-11-28 10:27
2009.10.11
Ограничение списка автофильтра в cxGrid


2-1249471810
r900000
2009-08-05 15:30
2009.10.11
Работа с oracle





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский