delphi Obracanie tekstu w GDI+

0

Witam,
Korzystam w Delhi 7 z kontrolek GDI+ do pisania tekstu po obrazkach. Mam pytanie, jak obrócić tekst o jakiś kąt.

0

A bez GDI może być ?

procedure AngleTextOut(ACanvas: TCanvas; Angle, X, Y: Integer; Str: string);
var
  LogRec: TLogFont;
  OldFontHandle,
  NewFontHandle: hFont;
begin
  GetObject(ACanvas.Font.Handle, SizeOf(LogRec), Addr(LogRec));
  LogRec.lfEscapement := Angle*10;
  NewFontHandle := CreateFontIndirect(LogRec);
  OldFontHandle := SelectObject(ACanvas.Handle, NewFontHandle);
  ACanvas.TextOut(X, Y, Str);
  NewFontHandle := SelectObject(ACanvas.Handle, OldFontHandle);
  DeleteObject(NewFontHandle);
end;

źródło: http://www.scalabium.com/faq/dct0002.htm

0

zawsze warto obejrzeć przykłady do GDI+ ,
obracanie tekstu na pewno tam jest

I wklejam kod z tej strony chińskiej aby nie zaginął jak ktoś wyłaczy blog a google wykopie z cache

uses
  GDIPAPI, GDIPOBJ;

procedure TForm1.Button1Click(Sender: TObject);
var
  ff: TGPFontfamily;
  ft: TGPFont;
  sf: TGPStringFormat;
  br: TGPSolidBrush;
  path: TGPGraphicsPath;
  mtrx: TGPMatrix;
  gr: TGPGraphics;
  ss: WideString;
  i: integer;
begin
  ff :=  TGPFontfamily.Create('Tahoma');// bo nie wiadomo co to za czcionka "MS Pゴシック" TGPFontfamily.Create('MS Pゴシック');
  ft := TGPFont.Create(ff, 16, FontStyleRegular, UnitPixel);
  br := TGPSolidBrush.Create(aclBlack);
  sf := TGPStringFormat.Create();
  ss := 'tekst do obracania';//'---テキストの回転';

  path := TGPGraphicsPath.Create();;
  path.AddString(ss, -1, ff, FontStyleRegular, 16, MakePoint(0.0, 0.0), sf);

  mtrx := TGPMatrix.Create;
  mtrx.Translate(150.0, 150.0);
  path.Transform(mtrx);
  mtrx.Reset;

  gr := TGPGraphics.Create(Canvas.Handle);
  mtrx.RotateAt(30, MakePoint(150.0, 150.0+ft.GetHeight(gr)/2));

  gr.SetSmoothingMode(SmoothingModeAntiAlias);
  for i := 0 to 11 do
  begin
    gr.FillPath(br, path);
    path.Transform(mtrx);
  end;

  ss := 'Text Rotation by Path Transformation';
  gr.SetTextRenderingHint(TextRenderingHintAntiAlias);
  gr.DrawString(ss, -1, ft, MakePoint(20.0, 300.0), br);

  gr.Free;
  mtrx.Free;
  path.Free;
  sf.Free;
  br.Free;
  ft.Free;
  ff.Free;
end;
0

Dzięki, działa.
Mam jeszcze pytanie, czy zna ktoś jakiś komponent, za pomocą którego można fajnie wybrać kąt obrotu? Jakieś kółko, jak np.: wybór kolorów w programach graficznych.

0

aby nie zaginął jak ktoś wyłaczy blog a google wykopie z cache

strona główna blogu
http://blog.livedoor.jp/junki560/

lista przykładów dla Delphi
http://blog.livedoor.jp/junki560/archives/30287059.html

jak trzeba pomocy to pytać, co nieco zrozumiem.

0

Mam jeszcze pytanie, czy zna ktoś jakiś komponent, za pomocą którego można fajnie wybrać kąt obrotu? Jakieś kółko, jak np.: wybór kolorów w programach graficznych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1