Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

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

 
Евгений Р.   (2007-08-27 22:25) [0]

Можно ли вывести текст вертикально?


 
Юрий Зотов ©   (2007-08-27 22:28) [1]

См. TLogFont и CreateFontIndirect.


 
Евгений Р.   (2007-08-27 22:56) [2]

OK


 
Евгений Р.   (2007-08-28 17:02) [3]

Необходимо выводить и горизонтально и вертикально. Первый раз выводит правильно ("22222222222"). Затем, после возобновления нового шрифта выводит неправильно ("4444444444444").

procedure TForm1.Button1Click(Sender: TObject);
 var lf: tlogfont;
     fntNew,fntOld: hfont;
begin
     fillchar(lf, sizeof(lf), 0);
     with lf do begin
         lfheight := 15;
         lfescapement := 900;
         strpcopy(lffacename, "Tahoma");
     end;
     fntNew:=createfontindirect(lf);
//========== Запоминаю старый шрифт
     fntOld:=canvas.Font.Handle;

//========== Вывожу стандартно
     canvas.TextOut(50,50,"111111111111");

//========== Вывожу новым шрифтом вертикально
     canvas.Font.Handle:=fntNew;
     canvas.TextOut(200,50,"22222222222");

//========== Восстанавливаю старый шрифт и пытаюсь вывести им
     canvas.Font.Handle:=fntOld;
     canvas.TextOut(200,100,"3333333333");

//========== Восстанавливаю новый шрифт и пытаюсь вывести им
     canvas.Font.Handle:=fntNew;
     canvas.TextOut(100,200,"4444444444");
//надпись выводится неправильно

end;


 
{RASkov} ©   (2007-08-28 17:17) [4]

> [3] Евгений Р.   (28.08.07 17:02)

procedure TForm1.Button2Click(Sender: TObject);
var lf: tlogfont;
    fntNew,fntOld: hfont;
begin
    fillchar(lf, sizeof(lf), 0);
    with lf do begin
        lfheight := 15;
        lfescapement := 900;
        strpcopy(lffacename, "Tahoma");
    end;
    fntNew:=createfontindirect(lf);
//========== Вывожу стандартно
    canvas.TextOut(50,50,"111111111111");
//========== Вывожу новым шрифтом вертикально
    fntOld:=SelectObject(Canvas.Handle, fntNew); //========== Запоминаю старый шрифт и устанавливаю новый
    canvas.TextOut(200,50,"22222222222");

//========== Восстанавливаю старый шрифт и пытаюсь вывести им
    SelectObject(Canvas.Handle, fntOld);
    canvas.TextOut(200,100,"3333333333");

//========== Восстанавливаю новый шрифт и пытаюсь вывести им
    SelectObject(Canvas.Handle, fntNew);
    canvas.TextOut(100,200,"4444444444");
//надпись выводится правильно
    DeleteObject(fntNew); // - и не забываем освобождать ресурс...
end;


 
Евгений Р.   (2007-08-28 18:27) [5]

Спасибо, все работает, но: Почему стандартный шрифт канвы Tahoma (size=8) отличается от такого, определенного по createfontindirect.


 
{RASkov} ©   (2007-08-28 20:31) [6]

> [5] Евгений Р.   (28.08.07 18:27)
> Почему стандартный шрифт канвы Tahoma (size=8)

Возможно у тебя разные имена шрифтов
Вот у меня стандартный шрифт у Канвы из твоего примера "MS Sans Serif" и создается createfontindirect"ом "Tahoma"....
Попробуй вот так:

> strpcopy(lffacename, "Tahoma");

strpcopy(lffacename, Canvas.Font.Name);


 
Евгений Р.   (2007-08-28 23:36) [7]


> {RASkov} ©   (28.08.07 20:31) [6]


> Возможно у тебя разные имена шрифтов

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(Canvas.Font.Name+"   "+IntToStr(Canvas.Font.Size));
end;


Сообщает "Tahoma 8"


> Вот у меня стандартный шрифт у Канвы из твоего примера "MS
> Sans Serif"

В D2005 по умолчанию Tahoma 8


> Попробуй вот так: ....


Попробовал:

     with lf do begin
//          lfheight := 15;
         lfheight:=Canvas.Font.Size;
         lfescapement := 900;
//          strpcopy(lffacename, "Tahoma");
         strpcopy(lffacename, Canvas.Font.Name);
     end;


Визуально разница примерно в 2 раза.
Наверное lfheight и Font.size совершенно разные понятия и соотношение примерно 1:2. Так и сделал 8 и 16. Выглядит неплохо.

Интересно, так будет и на других машинах или возможны сюрпризы?


 
{RASkov} ©   (2007-08-29 00:27) [8]

> [7] Евгений Р.   (28.08.07 23:36)
> Наверное lfheight и Font.size совершенно разные понятия

Разные...
Попробуй так:
   with lf do begin
    lfheight := 15;
.......
и
Canvas.Font.Height:=15;


 
Евгений Р.   (2007-08-29 01:16) [9]


> {RASkov} ©   (29.08.07 00:27) [8]


> Попробуй так:
>    with lf do begin
>     lfheight := 15;
> .......
> и
> Canvas.Font.Height:=15;


А чем отличается lfheight:=Canvas.Font.Size;

Или 15- магическое число?


 
{RASkov} ©   (2007-08-29 01:26) [10]

> [9] Евгений Р.   (29.08.07 01:16)
> Или 15- магическое число?

При чем здесь 15... просто Font.Height<>Font.Size....


 
Евгений Р.   (2007-08-29 02:04) [11]

Если Font.Height=Font.Size, то все равно шрифты разные????


 
Германн ©   (2007-08-29 02:05) [12]


> {RASkov} ©   (29.08.07 01:26) [10]
>
> > [9] Евгений Р.   (29.08.07 01:16)
> > Или 15- магическое число?
>
> При чем здесь 15... просто Font.Height<>Font.Size....
>

Из справки:
Font.Size = -Font.Height * 72 / Font.PixelsPerInch


 
Германн ©   (2007-08-29 02:11) [13]

Мой пост Германн ©   (29.08.07 02:05) [12]
конечно же относится к
> Евгений Р.


 
{RASkov} ©   (2007-08-29 03:24) [14]

> [11] Евгений Р.   (29.08.07 02:04)
> Если Font.Height=Font.Size, то все равно шрифты разные????

См [12]
Ты просто не верно понял мой [10] пост, я хотел сказать, что Font.Height и Font.Size - это не одно и тоже.



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

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
15-1187861902
db2admin
2007-08-23 13:38
2007.09.23
Привет


15-1187864995
DVM
2007-08-23 14:29
2007.09.23
MD5


15-1187530257
THandle
2007-08-19 17:30
2007.09.23
Какой смартфон/коммуникатор выбрать


15-1187724746
Rouse_
2007-08-21 23:32
2007.09.23
Возвращение к истокам


4-1174852733
Альберт
2007-03-25 23:58
2007.09.23
запускается чужая программа, надо узнать хэндл окна...