아래의 함수로 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;
'Delphi' 카테고리의 다른 글
[Delphi] 유니코드 파일 쓰기 (0) | 2009.04.18 |
---|---|
[Delphi] 문자열이 숫자로만 이루어져 있는지 판단 (0) | 2009.04.18 |
[Delphi] 에디트박스에 셀 선택하기 (마우스로 드래그한 효과) (0) | 2009.04.18 |
[Delphi] TColor 와 R,G,B 전환하기 (0) | 2009.04.18 |
[Delphi] 폰트 스타일 조절 (0) | 2009.04.18 |