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


Автор: Digar 31.5.2006, 18:40
Мне надо редактировать метафайл(переместить текст). 
Мне хотелось бы при этом выделять этот самый текст как это делается в CorelDraw. Подозреваю, что они используют Glyph (контур символа)применяемого фонта, но как до него добраться. По сути мне необходимо например чёрным пером и прозрачной кистью нарисовать на метафайле или имидже(неважно) векторный символ, но у фонта как известно нет ни пера ни кисти??? А как это сделать не знаю поэтому Вас и гружу. Задача на мой взгляд интересная, может кто подскажет? 

Автор: Digar 7.6.2006, 11:29
А кто знает как использовать GetGlyphOutline.
У меня что-то ничего не получается:
Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  GlyphSize,TextMSize,ec:LongInt;
  ParSize:Word;
  GlyphMetrics:_GlyphMetrics;
  LPOUTLINETEXTMETRIC:POUTLINETEXTMETRIC;
  LPKERNINGPAIR:PKERNINGPAIR;
  Matrix:Mat2;
  pGlyphSize: Pointer;
  LogFont:TLogFont;
  DC:HDC;
  fnt:HFont;
begin
with logfont do begin lfHeight:=20;lfWidth:=0;lfEscapement:=450;end;
DC:=mainform.Image1.Canvas.Handle;
fnt:=CreateFontInDirect(LogFont);SelectObject(dc,fnt);
LPOUTLINETEXTMETRIC:=nil;TextMSize:=0;
Windows.GetOutlineTextMetrics(DC,TextMSize,LPOUTLINETEXTMETRIC);
if TextMSize>0 then GetOutlineTextMetrics(DC,TextMSize,LPOUTLINETEXTMETRIC) else exit;
LPKERNINGPAIR:=nil;ParSize:=0;
GetKerningPairs(DC,ParSize,LPKERNINGPAIR);
if ParSize>0 then GetKerningPairs(DC,ParSize,LPKERNINGPAIR) else exit;
GlyphSize:=0;
GetGlyphOutline(DC,ord('E'),GGO_NATIVE,GlyphMetrics,GlyphSize,nil,Matrix);
if GlyphSize>0 then
 begin
 GetMem(pGlyphSize,GlyphSize);
 GetGlyphOutline(DC,ord('E'),GGO_NATIVE,GlyphMetrics,GlyphSize,pGlyphSize,Matrix );
 end else exit;
end;

 smile  

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