AnsiString a="Hello";
TCanvas *Canvas=new TCanvas();
int WidthOfString = Canvas->TextWidth(a);
int HeightOfString = Canvas->TextHeight(a);
TSize SizeOfString = Canvas->TextExtent(a);
Вывод текста на Image
Как вывести текст на Image не горизонтально а вертикально?
Вот это не работает.
Код:
Цитата: Overmax2
Вот это не работает
Почему?
Ну, попробуйте в сторону API посмотреть: GetTextExtentPoint32
Можно воспользоваться GetTextExtentPoint
И ещё это единственный способ или есть ещё какие предложения?
Код:
AnsiString a="Hello";
TCanvas *Canvas=new TCanvas();
int WidthOfString = Canvas->TextWidth(a);
int HeightOfString = Canvas->TextHeight(a);
TSize SizeOfString = Canvas->TextExtent(a);
TCanvas *Canvas=new TCanvas();
int WidthOfString = Canvas->TextWidth(a);
int HeightOfString = Canvas->TextHeight(a);
TSize SizeOfString = Canvas->TextExtent(a);
Это не работает, выдаёт ошибку:
"Canvas does not allow drawing"
GetTextExtentPoint
Цитата: Overmax2
Это не работает, выдаёт ошибку:
"Canvas does not allow drawing"
А, так конечно - Canvas ни к чему не привязан. Создай TBitmap, у него свой Canvas уже есть в комплекте.
Цитата:
Можно воспользоваться GetTextExtentPoint
Однако не рекомендуется:
Цитата:
Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should call the GetTextExtentPoint32 function, which provides more accurate results.
Код:
Graphics::TBitmap *Text=new Graphics::TBitmap();
int WidthTitl=Text->Canvas->TextWidth(titl);
int HeightTitl=Text->Canvas->TextHeight(titl);
Img->Canvas->TextOutA(10,10,titl+" "+IntToStr(WidthTitl)+" "+IntToStr(HeightTitl));
int WidthTitl=Text->Canvas->TextWidth(titl);
int HeightTitl=Text->Canvas->TextHeight(titl);
Img->Canvas->TextOutA(10,10,titl+" "+IntToStr(WidthTitl)+" "+IntToStr(HeightTitl));
Но по моему как то это не красиво.
Если не трудно, пример с GetTextExtentPoint32 выложите плиз, просто хочу посмотреть как работает.
Цитата: Overmax2
Но по моему как то это не красиво.
Странные у тебя понятия :)
Цитата: Overmax2
Если не трудно примерчик с GetTextExtentPoint, просто хочу посмотреть как работает.
Переложи на Си:
Код:
// TSize Extent
GetTextExtentPoint32(Bitmap.Canvas.Handle, Text, Length(Text), Extent);
GetTextExtentPoint32(Bitmap.Canvas.Handle, Text, Length(Text), Extent);
Тоже самое ты можешь увидеть в исходниках метода TextExtent, кстати (Ctrl+клик по имени метода).
Вот для создания стиля вывода текста на Image.
Код:
LOGFONT lf;
Img->Canvas->Brush->Style = bsClear;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 15;
lf.lfEscapement = 90*10 ; // угол поворота например: 45*00" = 450
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman");
Img->Canvas->Font->Handle = CreateFontIndirect(&lf);
Img->Canvas->Brush->Style = bsClear;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 15;
lf.lfEscapement = 90*10 ; // угол поворота например: 45*00" = 450
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman");
Img->Canvas->Font->Handle = CreateFontIndirect(&lf);
Но как сделать жирный шрифт я не пойму.
Код:
LOGFONT lf;
Img->Canvas->Brush->Style = bsClear;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 15;
lf.lfEscapement = 90*10 ;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman");
Img->Canvas->Font->Handle = CreateFontIndirect(&lf);
[COLOR="Red"]Img->Canvas->Font->Style=TFontStyles()<<fsBold[/COLOR];
Img->Canvas->TextOutA(100,100,"Rotated text ");
Img->Canvas->Brush->Style = bsClear;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 15;
lf.lfEscapement = 90*10 ;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman");
Img->Canvas->Font->Handle = CreateFontIndirect(&lf);
[COLOR="Red"]Img->Canvas->Font->Style=TFontStyles()<<fsBold[/COLOR];
Img->Canvas->TextOutA(100,100,"Rotated text ");
Может кто знает ещё какие способы?
lf.lfWeight = FW_BOLD;