Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.07.2015, 15:14
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию path в GDI+ ...

Уважаемые посетители форума. Прошу совета в решении задачки...

Суть состоит в том, что надо нарисовать текст с обводкой букв.
Обводку букв можно нарисовать с помощью :

Код:
 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter