Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Рисование текста DrawText


Автор: VICTAR 8.12.2006, 00:54
Возможна ли отрисовка текста фун-ей DrawText под углом? С выводом фун-ей TextOut никаких проблем, а с DrawText вообще ничего не отрисовывается... 


M
Girder
http://forum.vingrad.ru/act-Search/f-2.html

Автор: BsRu 8.12.2006, 01:45
А зачем тебе DrawText обьясни поконкретнее, чем тебя TextOut не устраивает?

Автор: VICTAR 8.12.2006, 01:56
У DrawText много полезных флагов (например DT_WORDBREAK) и еще, мне надо выводить текст, ограниченный TRect. По-моему DrawText для этого подходит лучше. Хотя, я могу ошибатся.

Автор: BsRu 8.12.2006, 02:08
Код

procedure TForm1.Button1Click(Sender: TObject); 
var 
  logfont: TLogFont; 
  font: Thandle; 
  count: integer; 
begin 
  LogFont.lfheight := 20; 
  logfont.lfwidth := 20; 
  logfont.lfweight := 750; 
  LogFont.lfEscapement := -200; 
  logfont.lfcharset := 1; 
  logfont.lfoutprecision := out_tt_precis; 
  logfont.lfquality := draft_quality; 
  logfont.lfpitchandfamily := FF_Modern; 
  font := createfontindirect(logfont); 
  Selectobject(Form1.canvas.handle, font); 
  SetTextColor(Form1.canvas.handle, rgb(0, 0, 200)); 
  SetBKmode(Form1.canvas.handle, transparent); 
  for count := 1 to 100 do 
  begin 
    canvas.textout(Random(form1.width), Random(form1.height), 'Привет от Bs_Ru'); 
    SetTextColor(form1.canvas.handle, rgb(Random(255), Random(255), Random 
      (255))); 
  end; 
  Deleteobject(font); 
end; 


Попробуй так может это то что тебе надо, я так юзаю например, там все по рандому стоит
но разобраться оч легко!
Вот основные возможности 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, 'This is Text'); 
  end; 
end; 



Автор: VICTAR 8.12.2006, 03:04
BsRu, конечно спасибо, все эти примеры я уже видел. Возможно ты не заметил: мне нужно выводить текст, ограниченный TRect. Причем при изменении угла вывода (станндарт 90, 180 и 270 гр) соответственно меняется и его ограничивающий TRect

Автор: bems 8.12.2006, 05:38
Код

const angle=pi*0.25;//45
var mode:integer;xfrmOriginal,xfrm:XFORM;
begin
mode:=GetGraphicsMode(canvas.handle);
SetGraphicsMode(canvas.Handle,GM_ADVANCED);
GetWorldTransform(canvas.Handle,xfrmOriginal);
xfrm:=xfrmOriginal;
xfrm.eM11:=cos(angle);
xfrm.eM12:=sin(angle);
xfrm.eM21:=-sin(angle);
xfrm.eM22:=cos(angle);
SetWorldTransform(canvas.handle,xfrm);

//DrawText

SetWorldTransform(canvas.Handle,xfrmOriginal);
SetGraphicsMode(canvas.Handle,mode);

Автор: VICTAR 8.12.2006, 08:20
Всё, вопрос закрыт, последний топик попал в самую точку. Всем огромное спасибо за внимание и помощь!

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