U veฤem broju korisniฤkih aplikacija, posebno raznih editora, trebaฤe vam funkcija kojom izlistavate sve fontove instalirane na datom sistemu. Pa ฤak i ako se ne radi o editorima, ovom funkcijom moลพete korisnicima obezbediti izbor podeลกavanja izgleda interfejsa vaลกih aplikacija (font kojim su ispisane kontrole). Radi primera, kreiraฤemo mali program koji ฤe samo izlistati fontove.
Pokrenite Delphi i otvorite novi projekat. Na praznu formu postavite jedno dugme, jednu kontrolu Label i jednu kontrolu Listbox. Dodajte funkciju za izlistavanje fontova:
function EnumFontsProc (var LogFont:TLogFont;
var TextMetric:TTextMetric;
FontType:Integer; Data:Pointer):Integer;stdcall;
var
Lista:TStrings;
begin
Lista:=TStrings(Data);
// preuzimanje string niza
Lista.Add(LogFont.lfFaceName);
// dodavanje naziva fonta u listu
Rezult:=1;
end;
Potom dodajte i poziv tzv. callback funkcije:
procedure TMainForm.FormCreate(Sender: TObject);
var
DC: HDC;
begin
DC:= GetDC(0);
try
EnumFonts(DC, nil,@EnumFontsProc, Pointer(ListBox1.Items);
// prosledjivanje callback funkciji
finally
ReleaseDC (0, DC);
// oslobadjanje resursa
end;
end;
Callback funkcije predstavljaju potprograme koje Windows poziva iz vaลกe aplikacije. U naลกem sluฤaju, objekat ListBox koristimo za spisak naziva instaliranih fontova. Za formiranje spiska, kreirali smo proceduru za obradu dogaฤaja OnCreate. U ovom prvom primeru nismo koristili dugmiฤ.
Postoji joลก jedan, mnogo jednostavniji, naฤin za izlistavanje fontova. Potrebno je da samo objektu tipa TStringList dodelimo Screen.Fonts. Postavljenom dugmetu, potrebno je da samo dodelite sledeฤu liniju (dogaฤaj OnClick):
ListBox1 : = Screen.Fonts;
Pratite Krstaricu na www.krstarica.com