Уважаемые посетители форума. Прошу совета в решении задачки...
Суть состоит в том, что надо нарисовать текст с обводкой букв.
Обводку букв можно нарисовать с помощью :
Код:
BeginPath( Canvas.Handle);
DrawText(Canvas.Handle,'Test str',-1,r, DT_WORDBREAK) ;
EndPath(Canvas.Handle) ;
StrokePath(PaintBox1.Canvas.Handle);
Но в таком случае она получается довольно корявой...
А для рисования сглаженного контура было принято решение нарисовать его с помощью GDI+.
Для этого я использовал GetPath:
Код:
var
points: PGPPoint;
p_flags: PByte;
begin
....
points := nil;
p_flags := nil;
p_size:=GetPath(PaintBox1.Canvas.Handle,PPointer(nil)^,PPointer(nil)^,0);
points := GetMemory(p_size * SizeOf(TPoint));
p_flags := GetMemory(p_size * SizeOf(Byte));
GetPath(Canvas.Handle,points^,p_flags^,p_size);
....
end;
И, судя по всему, координаты пути вытягиваются так как если для теста сделать
Код:
for i := 0 to p_size - 1 do
begin
Canvas.MoveTo(points^.x, points^.y);
Memo1.Lines.Add( Format('(%d;%d) |%d', [points^.x, points^.y,p_flags^]) );
Inc(points);
Inc(p_flags);
Canvas.LineTo(points^.x, points^.y);
end;
то на форме рисуется текст (хоть и с лишними линиями между точками).
Вопрос, собственно, в том как этот путь передать в GDI+.
Пробовал так:
Код:
// g: TGPGraphics;
// path: TGPGraphicsPath;
// pen: TGPPen;
path:=TGPGraphicsPath.Create(points,p_flags,p_size);
g:=TGPGraphics.Create(PaintBox1.Canvas.Handle);
pen:=TGPPen.Create(ColorRefToARGB($0083182E), 2);
g.SetSmoothingMode(2);
g.DrawPath(pen, path);
но на канву ничего не выводится. И метод path.GetPathPoints(points,p_size) возвращает 0...
В то же время если сделать так:
Код:
path.AddPolygon(points,p_size) ;
то на канву выводится текст, но вместе с лишними линиями (от точки к точке между буквами).
Знаю что можно рисовать контур букв средствами самого GDI+ ( path.addString(...) ), но тогда я несмогу использовать флаги форматирования текста DT_WORDBREAK, DT_END_ELLIPSIS и иже с ними. А силу некоторых причин - без них совсем никак
Подскажите пожалуйста как в path GDI+ правильно добавить points и p_flags..
Среда - Delphi 7.