Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вертикальный текст [D2005, XP]


Евгений Р. ©   (2007-08-27 22:25:00) 

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


{RASkov}   (2007-08-29 03:24:00) [1]

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

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


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

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


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


> {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:04:00) [4]

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


{RASkov}   (2007-08-29 01:26:00) [5]

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

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


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


> {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 00:27:00) [7]

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

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


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


> {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-28 20:31:00) [9]

> [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 18:27:00) [10]

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


{RASkov}   (2007-08-28 17:17:00) [11]

> [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 17:02:00) [12]

Необходимо выводить и горизонтально и вертикально. Первый раз выводит правильно ("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;


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

OK


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

См. TLogFont и CreateFontIndirect.


Наверх

Титульная страница Поиск, карта сайта Написать письмо