아래의 함수로 OK.

 

function EnumFamToLines(lplf: PLOGFONT; lpntm: PNEWTEXTMETRIC;

FontType: DWORD; Lines: LPARAM): Integer; stdcall

begin 

TStrings(Lines).Add(lplf.lfFaceName);

Result:=1

end

 

 

 

 

위의 코드를 스트링리스트에 받고 싶다면 아래와 같이 하면 된다. (+ 정렬 후 리스트 박스에 넣기)

 

procedure TForm1.SetFontFaceList; 

var 

sList: TStringList; 

i: Integer; 

begin 

sList:=TStringList.Create; 

try 

EnumFontFamilies(Canvas.Handle, nil, @EnumFamToLines, LongInt(sList)); 

// 정렬해서 리스트박스에 넣고 싶다면 아래의 코드와 같이 한다. 

sList.Sort; 

for i:=0 to sList.Count-1 do ListBox1.Items.Add(sList[i]); 

finally 

FreeAndNil(sList);

end

end

 

 

 

한글폰트만 받고 싶다면 아래와 같이 한다. Enum 함수를 변경하면 된다.

 

function EnumFamToLines(lplf: PLOGFONT; lpntm: PNEWTEXTMETRIC; 

FontType: DWORD; Lines: LPARAM): Integer; stdcall

begin

with lplf^ do 

if (lfCharSet=HANGEUL_CHARSET) then TStrings(Lines).Add(lplf.lfFaceName); 

Result:=1

end;

 

 

 

@가 붙지 않은 폰트이름과 가변 피치(variable pitch)의 폰트를 열거하려면 아래와 같이 한다.

결국 조건문의 조합이다.

 

function EnumFamToLines(lplf: PLOGFONT; lpntm: PNEWTEXTMETRIC; 

FontType: DWORD; Lines: LPARAM): Integer; stdcall

begin 

with lplf^ do 

if (lfPitchAndFamily and $0F=VARIABLE_PITCH) and (Pos('@', lplf^.lfFaceName)=0) then begin 

TStrings(Lines).Add(lplf.lfFaceName); 

end

Result:=1

end;







Posted by bloodguy
,