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

نام تاپیک: به دست آوردن ارتفاع فونت

  1. #1
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486

    Question به دست آوردن ارتفاع فونت

    با سلام
    فرض کنید یه همچین تابعی داریم

    private void prtpage(object sender,PrintPageEventArgs e)
    {
    Font obj = new Font("Arial", 10);
    float height=obj.GetHeight(e.Graphics)
    }

    سوال من اینه که e.Graphics چی هست و چرا باید به تابع Getheight ارسال بشه؟
    آیا اصلا تابع Getheight ارتفاع فونت رو مشخص میکنه ؟ چون من تو msdn دیدم که نوشته بود این تابع ارتفاع line spacing رو بر میگردونه

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    سوال من اینه که e.Graphics چی هست و چرا باید به تابع Getheight ارسال بشه؟
    e.Graphics شیئی است که برای دسترسی به نمای ظاهری یک کنترل به کار گرفته میشه و اگر این شیئ رو به متد GetHeight بفرستیم، متد GetHeight ارتفاع فونت رو بر اساس واحد موجود در شیئ e.Graphics مشخص میکنه.

    آیا اصلا تابع Getheight ارتفاع فونت رو مشخص میکنه ؟
    بله، چون ارتفاع یک خط رو از روی ارتفاع فونت تشخیص میدهند...

  3. #3
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    برای به دست آوردن ارتفاع فونت از تابع MeasureString استفاده کن که یه آبجکت SizeF برمیگردونه(یه جستجو توی msdn بکن، دقیقا یادم نیست)

  4. #4
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    با سلام
    فرض کنید یه همچین تابعی داریم

    private void prtpage(object sender,PrintPageEventArgs e)
    {
    Font obj = new Font("Arial", 10);
    float height=obj.GetHeight(e.Graphics)
    }
    سوال من اینه که e.Graphics چی هست و چرا باید به تابع Getheight ارسال بشه؟
    آیا اصلا تابع Getheight ارتفاع فونت رو مشخص میکنه ؟ چون من تو msdn دیدم که نوشته بود این تابع ارتفاع line spacing رو بر میگردونه

    سلام.
    Graphics در واقع Object ای هستش که از روی Device Context ساخته شده و امکان انجام عملیات گرافیکی رو در .NET مهیا میکنه. اما اینکه چرا باید به تابع GetHeight ارسال بشه... برای اینکه Line Spacing یه فونت رو بشه محاسبه کرد، باید اول فهمید که تو چه DPI اون فونت قراره استفاده بشه. اگر دقت کرده باشید، Graphics دو Property داره به اسم DpiX و DpiY. با استفاده از DpiY که از طریق Graphics بدست میاد، تابع GetHeight ارتفاع فونت رو محاسبه و بر میگردونه.

    اما ممکنه این سوال پیش بیاد که اگر به DpiY برای محاسبه Height نیاز باشه، پس چرا یکی از Overload های تابع GetHeight هیچ پارامتری نمیگیره. تو این شرایط DpiY از کجا میاد؟ در جواب به این سوال باید خدمتتون عرض کنم که این Overload از متود GetHeight در حقیقت از Internal Property ای به نام DefaultGraphics که روی Graphics تعریف شده، استفاده میکنه. چون Internal تعریف شده، ما از بیرون بهش دسترسی نداریم.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    با تشکر از دوستان
    اما اینکه چرا باید به تابع GetHeight ارسال بشه... برای اینکه Line Spacing یه فونت رو بشه محاسبه کرد،
    منظور از line spacing یه فونت فضای خالی بین دو خطه یا نه؟ چون در آخر گفتین که ارتفاع فونت رو بر میگردونه اگه اینجوری باشه با نوشتن این خط

    linePerPage=e.MarginBounds.Height/objfont.GetHeight(e.Graphics);

    اگه بخوایم تعداد خطوط برای چاپ توی صفحه رو به دست بیاریم دیگه نباید فاصله ای بین خطوط باشه , یعنی تمام خط ها به هم می چسبند

  6. #6
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    شاید اشتباه میکنم ولی هر فونت دارای مقداری فضای خالی در اطرافش خواهد بود، پس خطها با هم قاطی نمیشه.

  7. #7
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    با تشکر از دوستان

    منظور از line spacing یه فونت فضای خالی بین دو خطه یا نه؟ چون در آخر گفتین که ارتفاع فونت رو بر میگردونه اگه اینجوری باشه با نوشتن این خط

    linePerPage=e.MarginBounds.Height/objfont.GetHeight(e.Graphics);
    اگه بخوایم تعداد خطوط برای چاپ توی صفحه رو به دست بیاریم دیگه نباید فاصله ای بین خطوط باشه , یعنی تمام خط ها به هم می چسبند

    سلام.
    منظورم از ارتفاع فونت، ارتفاع نوشته نبود. اگر به MSDN دقت کنید، Line Spacing رو به اینصورت تعریف کرده:

    "Line Spacing یک فونت فاصله عمودی بین خطوط پایه دو خط متوالی از متن است. بنابراین، Line Spacing عبارت است از فضاهای خالی بین خطوط + ارتفاع خود کاراکتر."

    اگر ارتفاع فونت (یعنی ارتفاع کاراکتر) رو بخواهیم، میتونیم از TextRenderer.MeasureString یا Graphics.MeasureString استفاده کنیم.

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

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