نمایش نتایج 1 تا 23 از 23

نام تاپیک: کپی کردن یک فونت در فونتهای ویندوز

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173

    Post کپی کردن یک فونت در فونتهای ویندوز

    سلام
    من میخوام یک فونت رو از یک مکانی در پوشه فونت واقع در کنترل پنل کپی کنم کدش چیه؟

  2. #2
    کاربر دائمی آواتار Evil 69
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    كمي دور تر از آنجا
    پست
    272
    سلام
    شما میتونی از کلاس اینوایورمنت که یک سری از اطلاعات سیستم عامل را میده استفاده کنی تا ادرس پارتیشنی رو که ویندوز روی اون نصب شده را پیدا کنی بعد می تونی فونت مورد نظر رو داخل پوشه فونت ویندوز کپی کنی و تمام

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    ممنون ولی اگر کلاس رو لاتین بنوسید بهتره چون بهتر میشه جستجو کرد.اگه شما منبعی برای آشنایی با این کلاس دارید بفرمائید.

  4. #4
    کاربر دائمی آواتار ezamnejad
    تاریخ عضویت
    آبان 1386
    محل زندگی
    جلوي مانيتور
    پست
    257
    نام کلاس Environment است . این هم یک مثال خوب از این کلاس که توی MSDN پیداش کردم .
    فایل های ضمیمه فایل های ضمیمه

  5. #5
    اگه برنامه ای نوشتید و قصد Deploy کردن اونو دارید و این فونتها در سیستم مقصد نیستند.رحت ترین راه استفاده از برنامه های Setup هست.
    موفق باشید.

  6. #6
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    توی vs2005درsetup یک قسمتی بود بنام prerequistاگه اشتباه نکنم .جاشم یادم نیست کجا بود.حالا نمیدونم توی vs2003همچین چیزی در ستاپش هست یا نه .اگه باشه میشه فونت های مورد نظر رو در کامپیتر مقصد گذاشت.؟
    جناب عظام نژاد از اون جایی که vs من2003, sample شما رو با ز نمیکنه ممنون میشم اگه یک عکس ا زقسمت کد اصلی مربوط به اون کلاس رو برام بذارید ؟!
    آخرین ویرایش به وسیله mehran5 : سه شنبه 27 فروردین 1387 در 12:52 عصر

  7. #7
    اگر در VB.Net امکان استفاده از API های ویندوز را دارید، تابع AddFontResource برای همین کار هست.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  8. #8
    کاربر دائمی آواتار Sub Zero
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    اهواز
    پست
    443
    کپی کردن فونتها به تنهایی کافی نیست در واقع فونتها باید در سیستم Install شوند .
    Install کردن فونتها مهمه ،خودم هم دنبالشم اگه کسی اطلاعاتی در این زمینه داره راهنمایی کنه.
    از تابع API که جناب کشاورز معرفی کردن استفاده نکردم نمیدونم چیزی که من میخوام رو انجام میده؟

  9. #9
    نقل قول نوشته شده توسط Sub Zero مشاهده تاپیک
    کپی کردن فونتها به تنهایی کافی نیست در واقع فونتها باید در سیستم Install شوند .
    از InstallAware استفاده کن و فونت مورد نظرت رو به پوشه فونتش add کن باقی کارها رو برات انجام میده.

  10. #10
    کاربر دائمی آواتار Sub Zero
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    اهواز
    پست
    443
    نقل قول نوشته شده توسط gdevnb مشاهده تاپیک
    از InstallAware استفاده کن و فونت مورد نظرت رو به پوشه فونتش add کن باقی کارها رو برات انجام میده.
    قصد من انجام این کار از طریق برنامه نویسیه در مورد InstallAware هم هیچ اطلاعاتی ندارم لطفا بیشتر توضیح بدید.

  11. #11
    از تابع API که جناب کشاورز معرفی کردن استفاده نکردم نمیدونم چیزی که من میخوام رو انجام میده؟
    بله، به راهنمای مربوط به آن در MSDN مراجعه کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  12. #12
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    جناب کشاورز که توابع api رو معرفی کردند طرز استفاده از اون رو هم بگن.ممنون.حداقل با یک مثال کوچیک.

  13. #13
    نقل قول نوشته شده توسط Sub Zero مشاهده تاپیک
    قصد من انجام این کار از طریق برنامه نویسیه در مورد InstallAware هم هیچ اطلاعاتی ندارم لطفا بیشتر توضیح بدید.
    از این کد استفاده کن:
    int i = AddFontResource("c:\\microN55.ttf");

    http://msdn.microsoft.com/library/de...ntext_2ylq.asp

    InstallAware یه برنامه Setup سازه که خود ماکروسافت ویژوال استدیوشو با این نرم افزار پک کرده.
    www.Installaware.com
    موفق باشید

  14. #14
    کاربر دائمی آواتار Sub Zero
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    اهواز
    پست
    443
    خوب من از کدهای زیر استفاده کردم :
     Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Integer

    Sub InstallFonts()
    Dim PathFont As String = String.Format("{0}\Fonts", My.Application.Info.DirectoryPath)
    Dim Directory As New DirectoryInfo(PathFont)
    For Each File As FileInfo In Directory.GetFiles
    If Not File.Extension = ".TTF" Then Continue For
    [1] File.CopyTo(Path.GetDirectoryName(System.Environme nt.SystemDirectory) & "\Fonts\" & File.Name, True)
    [2] AddFontResource(Path.GetDirectoryName(System.Envir onment.SystemDirectory) & "\Fonts\" & File.Name)
    Next
    End Sub

    اما تابع Api به تنهایی جواب نمیداد ومجبور شدم از دستور شماره 1 هم استفاده کنم .
    بقیه دوستان اگه ممکنه بدون دستور شماره 1 امتحان کنند ببینند جواب میگیرند .
    Imports System.Io فراموش نشه

  15. #15
    اما تابع Api به تنهایی جواب نمیداد ومجبور شدم از دستور شماره 1 هم استفاده کنم .
    اون تابع API فقط فونت رو نصب میکنه، یعنی فونت بدون اینکه سیستم نیازی به ریست داشته باشه، آماده استفاده میشه. بیشتر زمانی استفاده میشه که یک برنامه می خواد از فونت خاصی استفاده کنه و با اتمام کارش هم فونت از لیست فونت ها خارج بشه. اگر می خواید فونت برای همیشه نصب شده باقی بمونه، باید همین کاری که کردید رو انجام بدید.
    در ضمن، دقت کنید که بعد از فراخوانی AddFontResource باید پیام WM_FONTCHANGE هم به تمام پنجره های سطح اول ارسال بشه، یعنی از تابع SendMessage به این شکل استفاده بشه:
    SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0)
    من نمی دونم معادل تابع API بالا در VB.Net چی هست.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  16. #16
    سلام دوست عزیز
    چند روش وجود دارد که شکا براحتی میتوانید این عمل را انجام دهید
    1 - فونت های مورد نیاز خود را همراه با برنامه خود Setup سازی کنی
    2 - از توابه api استفاده کنی
    3 - از رجیستری استفاده کنی
    .....
    دوستان خدار را شکر همه روشها را گذاشتن من هم دو روش اول و پیشنهاد می کنم

  17. #17
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    ببخشید جناب سابزیرو فونت ها در اپلیکیشن باید در پوشه خاصی باشند یا مثل بقیه فایلهای معمولی در پوشه اپلیکیشن باشند درسته؟

  18. #18
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173

    نصب فونت از طریق setup

    حالا اگه بخوایم از طریق ستاپ در vs2003 این کار رو انجام بدیم باید چه کار کنیم.؟

  19. #19
    کاربر دائمی آواتار Sub Zero
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    اهواز
    پست
    443
    من نمی دونم معادل تابع API بالا در VB.Net چی هست.
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Object) As Integer
    SendMessage(&HFFFF&, &H1D, 0, 0)

    ببخشید جناب سابزیرو فونت ها در اپلیکیشن باید در پوشه خاصی باشند یا مثل بقیه فایلهای معمولی در پوشه اپلیکیشن باشند درسته؟
    فرقی نمیکنه در چه فولدری ذخیره بشه اما من ترجیحا به همان صورتی که نوشتم عمل کردم برنامه من به گونه ای تنظیم شده که فقط برای اولین اجرا (اولین اجرا بعد از نصب برنامه) فونتها رو کپی ونصب میکنه . با تمامی این تفاصیر بازهم بلافاصله نصب فونتها جواب نداد ومجبور شدم برنامه رو ببندم ودوباره اجرا کنم .
    ----------------
    در ضمن یک روش دیگه برای استفاده اختصاصی فونتها پیدا کردم در این روش فونت به منابع خود برنامه اضافه شده و فقط برنامه شما توانایی استفاده از اون فونت رو داره در این روش نیازی به کپی و نصب فونت نیست . البته خودم هنوز امتحانش نکردم .:
    Private Declare Auto Function AddFontMemResourceEx Lib "Gdi32.dll" _
    (ByVal pbFont As IntPtr, ByVal cbFont As Integer, _
    ByVal pdv As Integer, ByRef pcFonts As Integer) As IntPtr

    Public Function GetFont(ByVal FontResource() As String) As _
    Drawing.Text.PrivateFontCollection
    'Get the namespace of the application
    Dim NameSpc As String = _
    Reflection.Assembly.GetExecutingAssembly().GetName ().Name.ToString()
    Dim FntStrm As IO.Stream
    Dim FntFC As New Drawing.Text.PrivateFontCollection()
    Dim i As Integer
    For i = 0 To FontResource.GetUpperBound(0)
    'Get the resource stream area where the font is located
    FntStrm = _
    Reflection.Assembly.GetExecutingAssembly().GetMani festResourceStream( _
    NameSpc + "." + FontResource(i))
    'Load the font off the stream into a byte array
    Dim ByteStrm(CType(FntStrm.Length, Integer)) As Byte
    FntStrm.Read(ByteStrm, 0, Int(CType(FntStrm.Length, Integer)))
    'Allocate some memory on the global heap
    Dim FntPtr As IntPtr = _
    Runtime.InteropServices.Marshal.AllocHGlobal( _
    Runtime.InteropServices.Marshal.SizeOf(GetType(Byt e)) * _
    ByteStrm.Length)
    'Copy the byte array holding the font into the allocated memory.
    Runtime.InteropServices.Marshal.Copy(ByteStrm, 0, _
    FntPtr, ByteStrm.Length)
    'Add the font to the PrivateFontCollection
    FntFC.AddMemoryFont(FntPtr, ByteStrm.Length)
    Dim pcFonts As Int32
    pcFonts = 1
    AddFontMemResourceEx(FntPtr, ByteStrm.Length, 0, pcFonts)
    'Free the memory
    Runtime.InteropServices.Marshal.FreeHGlobal(FntPtr )
    Next
    Return FntFC
    End Function

    منبع :http://www.tek-tips.com
    آخرین ویرایش به وسیله Sub Zero : پنج شنبه 29 فروردین 1387 در 12:21 عصر

  20. #20
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,070
    در ضمن یک روش دیگه برای استفاده اختصاصی فونتها پیدا کردم در این روش فونت به منابع خود برنامه اضافه شده و فقط برنامه شما توانایی استفاده از اون فونت رو داره در این روش نیازی به کپی و نصب فونت نیست . البته خودم هنوز امتحانش نکردم
    این روش خیلی خوبی است و مدتهاست که بعنوان یک استاندارد دفاکتو برای استفاده خصوصی از فونتها استفاده میشه و کاملاً امتحان شده است. فقط یک نکته هست که فایلهای فونتها رو باید بعنوان embeded resource تعریف کنین و گرنه کار نمیکنه.
    همینطور بهتر هست که قبل از استفاده از این چک کنین که فونت نصب نشده باشه.

  21. #21
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    میشه بگین توس vs2003 چطوری میشه اون رو انجام داد)embeded resourc(.ممنون.

  22. #22
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,070
    من 2003 کار نکردم ولی در 2005 باید از solution explorer فایل فونت رو راست کلیک کنین و properties اون رو باز کنین و فیلد build action رو برابر embede resource قرار بدین.

    احتمالاً در 2003 هم شبیه همین هست.

  23. #23
    کاربر دائمی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    173
    مسیرش دقیقا چیه؟ممنون.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •