Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Канва (работа с текстом)


Автор: rthsobakas 29.5.2008, 16:22
Вообщем я искал как перевернуть текст инашел такую статью(на делфи)

Цитата

Для того чтобы вывести текст под углом, вытянуть или сжать его нужно воспользоваться структурой LOGFONT. Здесь показаны не все ее возможности, но, на мой взгляд, самые интересные. 

procedure TForm1.FormPaint(Sender: TObject); 
var 
  lf: TLogFont; 
begin 
  FillChar(lf, SizeOf(lf), 0); 
  with lf do begin 
    // Высота буквы 
    lfHeight := 15; 

    // Ширина буквы 
    lfWidth := 20; 

    // Угол наклона в десятых градуса 
    lfEscapement := 100; 

     // Жирность 0..1000, 0 - по умолчанию 
    lfWeight := 1000; 

    // Курсив 
    lfItalic := 0; 

    // Подчеркнут 
    lfUnderline := 1; 

    // Зачеркнут 
    lfStrikeOut := 1; 

    // CharSet 
    lfCharSet := RUSSIAN_CharSet; 

    // Название шрифта 
    StrCopy(lfFaceName, 'Arial'); 
  end; 
  with Form1.Canvas do begin 
    FillRect(ClipRect); 
    Font.Handle := CreateFontIndirect(lf); 
    TextOut(0, 100, 'It is a text string'); 
  end; 
end; 


Автор: Pegas 

Взято с Vingrad.ru http://forum.vingrad.ru 





то же самое пытался перевести на с++
Цитата

/---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{

   TLogFont lf;
    // Высота буквы
    lf.lfHeight = 12;
    // Ширина буквы 
    lf.lfWidth = 10;
    // Угол наклона в десятых градуса 
    lf.lfEscapement = 900;
     // Жирность 0..1000, 0 - по умолчанию 
    lf.lfWeight = 0;
    // Курсив 
    lf.lfItalic = 0;
    // Подчеркнут 
    lf.lfUnderline = 0;
    // Зачеркнут 
    lf.lfStrikeOut = 0;

    // Название шрифта
    lf.lfFaceName[10]= *"GOST type B";

    Form1->Canvas->Font->Handle = CreateFontIndirect(&lf);
    Form1->Canvas->TextOut(200, 300, "It is a text string");

}


Проблемы возникли с lf.lfFaceName[10]= *"GOST type B";
(Здесь 10 как я понял это длина строки должна быть)

Почему то шрифт не меняется! Что не так я сделал?

Автор: Lazin 29.5.2008, 18:34
Цитата(rthsobakas @  29.5.2008,  16:22 Найти цитируемый пост)
lf.lfFaceName[10]= *"GOST type B";

lf.lfFaceName = "GOST type B";

ошибки какие?

Автор: rthsobakas 29.5.2008, 20:15

Цитата

ошибки какие?

ошибок нет, просто всместо ГОСТовского шрифта Ариал рисуется.


Код

lf.lfFaceName = "GOST type B";


Если так написать,  то ошибку выдаст(не помню какую на другом ПК прога). Звездочку я методом тыка написали прокатило(типо * это переменая по адрессу).
Потом  lf.lfFaceName[???] ХЗ че тут писать, но как я понял длину назвaния шрифта(там тип CHAR используется).

Автор: 586 29.5.2008, 22:13
Код
strcpy(lf.lfFaceName, "GOST type B");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)