+3 امتیاز
سلام

اگز داخل ویندوز روی یک فونتی که نصب نشده کلیک راست  کنیم منوای رو نمایش میده که بتونیم اون فونت رو نصب کنیم.(Install)

حالا منم میخوام این امکان را در نرم افزاری که نوشتم فراهم کنه. یعنی اگر کاربر روی فونت نصب نشده کلیک کرد بتونه اون رو نصب کنه.(آدرس فونت رو بدم و با زدن دکمه اون رو نصب کنه)

1 پاسخ

+3 امتیاز

سلام ، اگر می خواین همین فونت رو در برنامه خودتون به کار ببرید نیازی به نصبش نیست می تونید از کلاس PrivateFontCollection استفاده کنید : 

var PrivateFontCollection1 = new PrivateFontCollection();
            PrivateFontCollection1.AddFontFile(Application.StartupPath + "\\MyFont.ttf");
            textBox1.Font = new Font(PrivateFontCollection1.Families[0], 14, FontStyle.Regular);

کلاسش در فضای نام System.Drawing.Text هست . 

اما اگر قصد دارید کلا فونت رو در کامپیوتر نصب کنید تا سایر برنامه ها هم ازش استفاده کنن باید از توابع API ویندوز استفاده کنید ، ابتدا تابع رو تعریف کنید ( در یک فایل DLL خارجی قرار داره ) :

[DllImport("gdi32.dll", EntryPoint="AddFontResourceW", SetLastError=true)]
public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                         string lpFileName);

سپس با استفاده از کد زیر تابع رو صدا بزنید : 

 int result =  AddFontResource( Application.StartupPath + @"\MyFont.TTF");

 

ممنون اما اگر میشه 1 خرده بیشتر توضیح بدید که کجا بنویسم و منظورتون از dll خارجی چیه ممنون میشم چون این دستورات کپی پیست کردم کلی ارور داد

روش دوم منظورمه
توسط (471 امتیاز) 7 35

کد کامل کلاس به صورت زیر هست ، اون خطاها به احتمال زیاد مربوط به وارد نکردن فضای نام System.Runtime.InteropServices هست : 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
        public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                         string lpFileName);

        [DllImport("gdi32.dll", EntryPoint = "RemoveFontResourceW", SetLastError = true)]
        public static extern int RemoveFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                            string lpFileName);

        private void btnInstallFont_Click(object sender, EventArgs e)
        {
            int result = -1;
            int error = 0;

            // Try remove the font.
            result = AddFontResource(@"C:\MY_FONT_LOCATION\MY_NEW_FONT.TTF");
            error = Marshal.GetLastWin32Error();
            if (error != 0)
            {
                MessageBox.Show(new Win32Exception(error).Message);
            }
            else
            {
                MessageBox.Show(((result == 0) ? "Font was not found." :
                                                  "Font removed successfully."));
            }
        }

        private void btnUninstallFont_Click(object sender, EventArgs e)
        {
            int result = -1;
            int error = 0;

              // Try remove the font.
              result = RemoveFontResource(@"C:\MY_FONT_LOCATION\MY_NEW_FONT.TTF");
              error = Marshal.GetLastWin32Error();
              if (error != 0)
              {
                  MessageBox.Show(new Win32Exception(error).Message);
              }
              else
              {
                  MessageBox.Show((result == 0) ? "Font was not found." :
                                                  "Font removed successfully.");
              }
      
            }
        }
    }

 

توسط (6,145 امتیاز) 5 11 116
خیلی خیلی تشکر اما کار نمیکه دستورات بدون اشکال اجرا میشه اما فونت نصب نمیشه

1 سوال؟

فرق بین دستور install و Remove کجاست؟ چون دقیقا شبیه هم هستن و انگار فقط نام اون ها فرق میکنه؟
ویرایش شده توسط
توسط (471 امتیاز) 7 35
با نرم افزار word نگا فونت های نصب شده کردین ؟

در Windows Font Directory نمیاد ولی نصب میشه

بله فقط 2 تابع مختلف هستند ولی ساز وکارشون باهم دیگه فرقی نمیکنه
توسط (6,145 امتیاز) 5 11 116
بله نگاه کردم اونجا هم نیست

انگار که نصب نشده
توسط (471 امتیاز) 7 35
من از روش api که گفتید استفاده کردم و فونت نصب شد ولی تو پوشه فونت ویندوز وجود نداره؟
توسط (1,019 امتیاز) 1 23 74
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,926 کاربر

دسته بندی ها

...