[ Milan Milosevic @ 11.07.2016. 10:03 ] @
Kako u Delphiju u programu ucitati font iz resursa, tako da ne mora da se sam font instalira na racunar korisnika.
Nešto sam gledao na internetu, ali nisam našao primenjivo objašnjenje.
[ Rapaic Rajko @ 11.07.2016. 14:57 ] @
Ne znam da l je to uopste moguce.
Font je sistemski resurs (nesto kao standardne Win kontrole), i ispis text-a u zeljenom fontu bez instaliranja istog ne znam kako bi se dao izvesti.

Druga stvar je ako na masini koja ima instaliran zeljeni font (pozeljno fixedwidth) napravis bitmape za svako slovo, pa to zatim spakujes u resurs. Ispisivanje text-a (na drugoj masini koja nema taj font) se svodi na crtanje slicica/slova, i daleko je brze nego klasican ispis text-a fontom. (govorim iz iskustva, poodavno radio neki ispis brojaca sa 6 ogromnih cifara na opisani nacin; munjevito je!)

Pozz
[ Milan Milosevic @ 11.07.2016. 15:15 ] @
Pa rešio sam ovo delimicno. Odnosno izvadim font iz resursa, snimim na hdd i odatle ga instaliram za moju aplikaciju i ovo radi.
Ono što bih hteo je da izbegnem snimanje fonta na hdd.

Code:
 procedure UcitajResursniFont;
 var
     MojStream : TResourceStream;
     Lokacija:String;
 Begin
     MojStream := TResourceStream.Create(Hinstance , 'AZ' , RT_RCDATA);
     Lokacija:= ExtractFilePath( Application.ExeName);
      Lokacija:= Lokacija+'Azbuka03_D.ttf';
     if not  FileExists(Lokacija) then
       MojStream.SaveToFile(Lokacija);
       AddFontResource(PChar(Lokacija)); 
      SendMessage(Application.Handle ,WM_FONTCHANGE,0,0); 
     MojStream.Free;
 End;


Za brisanje Fonta nakon zatvaranja aplikacije
Code:

 Procedure BrisiResursniFont(Brisi_sa_HDD:Boolean = true);
var
   Lokacija:String;
begin
  Lokacija:= ExtractFilePath( Application.ExeName);
  Lokacija:= Lokacija+'Azbuka03_D.ttf';
  if not RemoveFontResource(PChar(Lokacija)) then ShowMessage('Nije uklonjen');
  if  FileExists(Lokacija)AND Brisi_sa_HDD then DeleteFile(Lokacija);
  SendMessage(Application.Handle ,WM_FONTCHANGE,0,0);
end;


Posle u kodu

Memo1.Font.Name:='Azbuka03_D.ttf';
mislim da bi funkcija AddFontMemResourceEx trebala da resi problem

pozz




[Ovu poruku je menjao Milan Milosevic dana 12.07.2016. u 10:13 GMT+1]
[ Rapaic Rajko @ 12.07.2016. 08:50 ] @
I prva i druga funkcija UPRAVO rade instalaciju fonta na masinu/sistem.
A na pocetku si napisao "tako da ne mora da se sam font instalira na racunar korisnika".

Pozz
[ Milan Milosevic @ 12.07.2016. 09:33 ] @
Evo verzije bez snimanja fonta na HDD.

Code:
Function UcitajResursniFont(Resurni_naziv:String):THandle;
 var
     MojStream : TResourceStream;
     BrojFontova : integer;
 Begin
  // 'AZ'  je naziv resursnog fonta Azbuka03_D videti resues.rc
     MojStream := TResourceStream.Create(Hinstance , Resurni_naziv , RT_RCDATA);
     BrojFontova:=1;
     Result:=AddFontMemResourceEx(MojStream.Memory, MojStream.Size, nil, @BrojFontova);
     MojStream.Free;
 End;


Za oslobadanje fonta iz memorije
Code:
 Function BrisiResursniFont(Handle_Fonta:THandle):Boolean;
begin
   Result:= RemoveFontMemResourceEx(Handle_Fonta)
end;


prva funkcija vraća handle ubačenog fonta u memoriju. Ukoliko vrati vrednost 0 tada nešto nije u redu.

Druga funkcija oslobađa font iz memorije. Ako je uspešno izvršena vraća true.

P.S.

Ovde na instaliranje fonta mislim na ručno instaliranje od strane korisnika ukoliko dati font već nije instaliran na računaru.
Ovako se sve dešava u pozadini. Mada nisam siguran da se ovim font instalira za ceo sistem jer nije prepoznatljiv kod drugih aplikacija. Dok moja aktivna aplikacija lepo prepoznaje instalirani font.

[Ovu poruku je menjao Milan Milosevic dana 12.07.2016. u 11:29 GMT+1]
[ Rapaic Rajko @ 14.07.2016. 09:15 ] @
Pogledaj, sve lepo kaze:

https://msdn.microsoft.com/en-...top/dd183325%28v=vs.85%29.aspx (ovo je za font iz memorije, uvek private)

i ovo

https://msdn.microsoft.com/en-...top/dd183327%28v=vs.85%29.aspx (font iz fajla, private ili public)

Pozz

P.S. I hvala za topic, covek uvek nauci nesto novo