PDA

View Full Version : سوال: چگونه فونت خصوصی برای برنامه تعریف کنیم؟ - چگونه فونتهای مورد نیاز را کنار برنامه بذاریم؟



Mojtaba0
سه شنبه 18 شهریور 1393, 21:01 عصر
سلام
تو سایت چیز مفیدی پیدا نکردم.
فرض کنید برنامه ای طراحی کردیم و از 10 تا فونت فارسی برای Lable ها و منوها و دیتاگرید و تکستباکس و... استفاده کردیم.

برای اینکه برنامه فونت ها رو بجای فونت ویندوز از فولدرِ MyFonts کنار برنامه استفاده کنه باید چیکار کرد دقیقا؟ :متفکر:
(نمیخوام فونت تو سیستم مشتری نصب بشه)

اینجا (http://msdn.microsoft.com/en-us/library/y505zzfw%28v=vs.110%29.aspx)یچیزایی پیدا کردم ولی سر در نیاوردم دقیقا چی میگه! :عصبانی++:

NasimBamdad
سه شنبه 18 شهریور 1393, 21:52 عصر
این کار رو نرم افزار Setup ساز شما انجام میده . مثل InstallShield و Install Aware ..................

با اینا باید فونت رو نصب کنید

forodo
سه شنبه 18 شهریور 1393, 22:29 عصر
سلام
تو سایت چیز مفیدی پیدا نکردم.
فرض کنید برنامه ای طراحی کردیم و از 10 تا فونت فارسی برای Lable ها و منوها و دیتاگرید و تکستباکس و... استفاده کردیم.

برای اینکه برنامه فونت ها رو بجای فونت ویندوز از فولدرِ MyFonts کنار برنامه استفاده کنه باید چیکار کرد دقیقا؟ :متفکر:
(نمیخوام فونت تو سیستم مشتری نصب بشه)

اینجا (http://msdn.microsoft.com/en-us/library/y505zzfw%28v=vs.110%29.aspx)یچیزایی پیدا کردم ولی سر در نیاوردم دقیقا چی میگه! :عصبانی++:
به این تاپیک سر بزنید. (http://barnamenevis.org/showthread.php?468599-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%81%D9%88%D9%86%D8%AA-%D8%AF%D9%84%D8%AE%D9%88%D8%A7%D9%87%D8%8C-%D8%A8%D8%AF%D9%88%D9%86-%D8%A7%DB%8C%D9%86%DA%A9%D9%87-%D8%AD%D8%AA%DB%8C-%D9%81%D9%88%D9%86%D8%AA-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%B8%D8%B1%D8%8C-%D8%AF%D8%B1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%A7%D8%B4%D8%AA%D9%87-%D8%A8%D8%A7%D8%B4%D8%AF)

Mojtaba0
سه شنبه 18 شهریور 1393, 22:36 عصر
این کار رو نرم افزار Setup ساز شما انجام میده . مثل InstallShield و Install Aware ..................

با اینا باید فونت رو نصب کنید
روش شما صحیحه ولی هدف من...

ولی هدف من اینه که فونت ها کنار برنامه باشن.و به فونت های ویندوز مشتری وابسته نباشن.
نمیخوام فونتی نصب بشه روی سیستم مشتری و میخوام یجورایی برنامم پرتابل باشه.:لبخند:

ممنون از پاسخ شما./

rahnema1
سه شنبه 18 شهریور 1393, 22:49 عصر
سلام
با تابعهای API ویندوز میشه

در ابتدای برنامه از AddFontResource استفاده می کنید و در انتها هم RemoveFontResource


using System.Runtime.InteropServices;
/...
[DllImport("gdi32.dll")]
static extern int AddFontResource(string lpFilename);

[DllImport("gdi32.dll")]
static extern bool RemoveFontResource(string lpFileName);

/...
AddFontResource("myfont.ttf");

while(RemoveFontResource("myfont.ttf"));

Mojtaba0
سه شنبه 18 شهریور 1393, 23:26 عصر
اگر منظور شما من هستم که عرض کردم اصلاً اگر توی سیستم طرف فونت نباشه هم اجرا می شه.
شما فونت هایی که می خواید رو از روی سیستم خودت می ندازی کنار برنامه و از اونا استفاده می کنی.
مخاطب من شما نبودین.

تاپیک شمارو دیدم.خوب بود روشش.
مشکلش اینه که برای هر کنترل باید جداگانه فونت رو ست کرد.(یا مثل شما که یه حلقه گذاشتین و همه کنترلها یه فونت رو میگیرن.)

اگه روشی باشه که مثلا فونت کنار برنامه بصورت مجازی نصب بشه(از نظر برنامه نصب باشه) دیگه نیازی نیست تنظیمات فونت کنترلها تغییری بکنه.

شما یه برنامه با n تا فرم و انواع و اقسام کنترل ها رو در نظر بگیرید.ست کردن فونت برای تک تک کنترلها کاری زمان بر هست.

نمیدونم با (Multimedia Builder (MMB کار کردین یا نه.یه تابع (...)InstallFont اول برنامه میذاریم و بعد مسیر فونت کنار برنامه رو میدیم به اون.
دیگه هر جای برنامه که از اون فونت استفاده شده براحتی کار میکنه حتی اگه ویندوز فونتو نصب نداشته باشه.

Mojtaba0
سه شنبه 18 شهریور 1393, 23:30 عصر
سلام
با تابعهای API ویندوز میشه

در ابتدای برنامه از AddFontResource استفاده می کنید و در انتها هم RemoveFontResource


using System.Runtime.InteropServices;
/...
[DllImport("gdi32.dll")]
static extern int AddFontResource(string lpFilename);

[DllImport("gdi32.dll")]
static extern bool RemoveFontResource(string lpFileName);

/...
AddFontResource("myfont.ttf");

while(RemoveFontResource("myfont.ttf"));

سلام
1- میشه یه نمونه سورس کوچیک بذارین یا توضیح بدین کدهایی که گفتین رو کجا بذاریم؟

2- روش شما نیاز زیر رو رفع میکنه؟
اگه روشی باشه که مثلا فونت کنار برنامه بصورت مجازی نصب بشه(از نظر برنامه نصب باشه) دیگه نیازی نیست تنظیمات فونت کنترلها تغییری بکنه.

forodo
چهارشنبه 19 شهریور 1393, 00:07 صبح
مخاطب من شما نبودین.

تاپیک شمارو دیدم.خوب بود روشش.
مشکلش اینه که برای هر کنترل باید جداگانه فونت رو ست کرد.(یا مثل شما که یه حلقه گذاشتین و همه کنترلها یه فونت رو میگیرن.)

اگه روشی باشه که مثلا فونت کنار برنامه بصورت مجازی نصب بشه(از نظر برنامه نصب باشه) دیگه نیازی نیست تنظیمات فونت کنترلها تغییری بکنه.

شما یه برنامه با n تا فرم و انواع و اقسام کنترل ها رو در نظر بگیرید.ست کردن فونت برای تک تک کنترلها کاری زمان بر هست.

نمیدونم با (Multimedia Builder (MMB کار کردین یا نه.یه تابع (...)InstallFont اول برنامه میذاریم و بعد مسیر فونت کنار برنامه رو میدیم به اون.
دیگه هر جای برنامه که از اون فونت استفاده شده براحتی کار میکنه حتی اگه ویندوز فونتو نصب نداشته باشه.
خوب این روش چه جوریه؟
اگر می دونید چه مشکلی داره که از این استفاده نمی کنید؟

Mojtaba0
چهارشنبه 19 شهریور 1393, 00:27 صبح
خوب این روش چه جوریه؟
اگر می دونید چه مشکلی داره که از این استفاده نمی کنید؟
این یه روش نیست که! یه برنامه معروف برای ساخت اتوران هست که قابلیت اسکریپت نویسی هم داره. دنبال همچنین روشی تو دات نت هستم.

نمیدونم شاید روش جناب
rahnema (http://barnamenevis.org/member.php?305905-rahnema1)
اینطور باشه.منتظر جوابشون هستم.
خودم نتونستم از روش ایشون خروجی بگیرم.(دقیق نمیدونم چطور هست.)

rahnema1
چهارشنبه 19 شهریور 1393, 01:37 صبح
متاسفانه در دات نت جواب نمیده
اگه به لیست فونتهای یک برنامه مثل نوت پد نگاه کنید می بینید که فونت به صورت مجازی نصب شده و در لیست فونتها موجوده اما در لیست فونتهای برنامه های تحت دات نت ظاهر نمیشه
احتمالا mmb هم از این روش استفاده می کرده

Mojtaba0
شنبه 22 شهریور 1393, 01:54 صبح
متاسفانه در دات نت جواب نمیده
اگه به لیست فونتهای یک برنامه مثل نوت پد نگاه کنید می بینید که فونت به صورت مجازی نصب شده و در لیست فونتها موجوده اما در لیست فونتهای برنامه های تحت دات نت ظاهر نمیشه
احتمالا mmb هم از این روش استفاده می کرده
البته فونت هایی که در برنامه هایی مثل Notepad,Paint,Photoshop,... نمایش داده میشه حقیقی هستند و از داخل فولدر Fonts لیست میشن.توی ویژوال استدیو هم لیست میشن!
منظور شما از جمله قرمز چیه؟(البته در یه جمله که از بخث اصلی خارج نشیم)

مشکل من خواندن فونت از مسیر دلخواه هست بجای مسیر پیشفرض ویندوز(Fonts).

plus
شنبه 22 شهریور 1393, 07:05 صبح
از کلاس PrivateFontCollection استفاده کنید.
http://msdn.microsoft.com/en-us/library/system.drawing.text.privatefontcollection(v=vs.110 ).aspx

rahnema1
شنبه 22 شهریور 1393, 10:45 صبح
البته فونت هایی که در برنامه هایی مثل Notepad,Paint,Photoshop,... نمایش داده میشه حقیقی هستند و از داخل فولدر Fonts لیست میشن.توی ویژوال استدیو هم لیست میشن!
منظور شما از جمله قرمز چیه؟(البته در یه جمله که از بخث اصلی خارج نشیم)

مشکل من خواندن فونت از مسیر دلخواه هست بجای مسیر پیشفرض ویندوز(Fonts).

لطفا این برنامه را که ضمیمه کردم امتحان کنید که از تابعهای AddFontResource و RemoveFontResource استفاده شده
داخل فولدر debug یک فونت گذاشتم به نام freemono.ttf که با زدن دکمه نصب فونت، به صورت «مجازی» نصب میشه و در لیست فونتهای نوت پد میاد اما در فولدر fonts ویندوز ظاهر نمیشه اگه دکمه حذف فونت زده بشه ، این فونت مجازی پاک میشه ولی اگه این دکمه زده نشه تا وقتی که سیستم restart نشده فونت باقی می مونه و بعد از restart دیگه خود بخود حذف شده
اما در لیست فونتهای دات نت وجود نداره
در صورتی یک فونت در لیست فونتهای دات نت ظاهر میشه که کاملا نصب شده باشه

http://www.sharefile.ir/uploads/1410669615.zip

Mojtaba0
شنبه 22 شهریور 1393, 19:46 عصر
الان صورت مساله رو بیشتر تشریح میکنم:

یه پروژه 20فرمی طراحی کردم که توی هر فرم 5فونت فارسی استفاده شده برای کنترلهای متعدد.(تعداد کنترلها و فرمها زیاده)
طراحی کامل شده و ظاهر برنامه در ویندوزی که 5فونت را داشته باشه صحیح هست.

حالا میخوایم بدون اینکه فونتها تو سیستم مشتری نصب بشن یجوری کنار برنامه باشن که ظاهر برنامه تو هر سیستمی (حتی بدون فونت) بهم نریزه.(یعنی برنامه پرتابل و مستقل باشه).