PDA

View Full Version : استفاده از فونت درپوشه برنامه بدون نیاز به نصب در ویندوز



solook
سه شنبه 22 مرداد 1387, 16:49 عصر
با سلام
میشه چنین کاری رو کرد؟

Hsimple11
سه شنبه 22 مرداد 1387, 17:05 عصر
مشخصه که فونتها باید در پوشه فونت ویندوز کپی بشوند. منظورتون چیزی غیر از این است؟

solook
سه شنبه 22 مرداد 1387, 17:40 عصر
بله منظورم اینه که بدون اینکه در پوشه فونت های ویندوز کپی بشه !
فونت ها باشه ولی تنها در پوشه خود برنامه

بعضی برنامه ها اینجوری دیده شده

Touska
سه شنبه 22 مرداد 1387, 18:32 عصر
به اون شکلی که شما می خواهید نمیشه ولی می تونید از Resource Font استفاده کنید و از طریق کد

Font رو نصب و سپس بعد از خروج از برنامه آن را بردارید.

موفق باشید :)

vcldeveloper
سه شنبه 22 مرداد 1387, 19:08 عصر
تابع AddFontResource را قبلا توضیح داده بودیم، جستجو کنید.

solook
سه شنبه 22 مرداد 1387, 19:13 عصر
با ریسورس دیگه در پوشه فونت ویندوز کپی نمیشه؟

Touska
سه شنبه 22 مرداد 1387, 19:24 عصر
var

Form1: TForm1;

implementation

{$R SetFont.RES}

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

Var

ResFile : TResourceStream;

begin

ResFile := TResourceStream.Create(HInstance,'MY_FONT',pchar(' ANYOL1'));

ResFile.SaveToFile('LOVE.TTF');

ResFile.Free;

AddFontResource('LOVE.TTF');

SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Button1.Font.Name :='LOVE';

Button1.Font.Size := 20;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

RemoveFontResource(pchar('LOVE.TTF'));

DeleteFile('LOVE.TTF');

SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

end;

منبعش یادم نیست :)

solook
سه شنبه 22 مرداد 1387, 20:08 عصر
این کارش همونی هست که می خواستم یا اینکه کپی میکنه در پوشه فونت ویندوز؟

Hsimple11
سه شنبه 22 مرداد 1387, 20:18 عصر
این کارش همونی هست که می خواستم یا اینکه کپی میکنه در پوشه فونت ویندوز؟

فونت شما از فایل ریسورسی که ساخته اید و فونت خود را در آن قرار داده اید خوانده می شود. در واقع تابع AddFontResource فونتی را از ریسورس به جدول فونت ویندوز اضافه میکند. در هنگام Free کردن فرم این فونت را دوباره حذف میکنید.

B-Vedadian
سه شنبه 22 مرداد 1387, 21:33 عصر
تو شاخه فونت ويندوز کپي نميشه.

shuriken
پنج شنبه 07 شهریور 1387, 10:30 صبح
سلام
روش دیگه ای هم برای انکه از فونتی بدون انکه در پوشه ویندوز کپیش کنید وجود داره.
اونم اینه که شما اول فونتتون رو به Recource های پروژتون (یا از هر طریق دیگه که همراه برنامه باشه. ولی resource مطمئن ترین راه هست) اضافه کنید.
بعد از نوع فونت یه متغیر به setting پروژه اضافه کنید.
و با اولین بار اجرای برنامه این متغییر رو با فونت مورد علاقتون مقدار دهی کنید.
و فونت مورد استفاده برنامرو برابر این متغیر قرار بدین.
اگه بخواین میتونم کدش رو در اختیارتون قرار بدم

solook
پنج شنبه 07 شهریور 1387, 10:39 صبح
ممنون میشم کدش رو در اختیارمون بیذارید

s.mostafa.rahmani
یک شنبه 10 شهریور 1387, 09:26 صبح
ابتدا در قسمت setting برنامه متغیری از نوع زیر میسازین.

System.Drawing.Text.PrivateFontCollection priv_font;
و همچنین فونت دلخواهتون رو وارد قسمت Resource میکنید.
بعد برای اینکه بتونید از این فونت ذخیره شده در بریامتون استفاده کنید نیاز به قطعه کد زیر دارید







if ([Project Name].Properties.Settings.Default.priv_font == null) {
string st = System.IO.Path.GetTempFileName();
System.IO.File.WriteAllBytes(st, [Project Name].Properties.Resources.[Font Name]);
[Project Name].Properties.Settings.Default.priv_font = new System.Drawing.Text.PrivateFontCollection();
[Project Name].Properties.Settings.Default.priv_font.AddFontFile (st);
[Project Name].Properties.Settings.Default.Save();
}




و برای اینکه بتونید فونت کنترل دلخواهتون رو برابر فونت مورد علاقتون قرار بدین . کد زیر رو بنویسید



System.Drawing.FontFamily fm = [Project Name].Properties.Settings.Default.priv_font.Families[0];
System.Drawing.Font f = new Font(fm, (float)15.75);
[Control Name].Font = f;

امیدوارم که به دردتون بخوره. موفق باشید.

داداش اينجا انجمن دلفي هست نه #C.