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

نام تاپیک: اتو سایز واقعی - Actual AutoSize

  1. #1

    Tick اتو سایز واقعی - Actual AutoSize

    سلام. دوستان یه سوالی دارم که چند وقتیه ذهن منو به خودش مشغول کرده.

    ابتدا به عکس زیر نگاه کنید.


    این تصویر یه لیبل Label استاندارد در وی بی 2005 هستش که خاصیت اتو سایز آن برابر True قرار داده شده است. همچنین میزان Margin و Padding آن هم مساوی صفر قرار داده شده است.
    خب حالا سوال من اینه:
    همانطور که میبینید علیرغم این که اتو سایز برابر True هستش باز هم فاصله ای بین اولین حرف با لبه چپ، آخرین حرف با لبه راست و نیز فاصله ها از هر دو لبه بالا و پایین قابل مشاهده هست. دوستان عزیز مشکل من اینه که میخوام میزان این فاصله رو بدست آورده تا بتونم با دستور Region این فاصله ها رو از بین ببرم ( در واقع بتونم یک لیبل با اتو سایز واقعی داشته باشم.
    برای بیان بهتر منظورم، به شکل زیر که همان لیبل رو در نرم افزاری مثل PhotoImpact با اتو سایز واقعی نمایش میدهد توجه کنید:


    آیا این کار شدنیه؟ اگر آره، میتونید راهکاری ارائه بدید؟
    ممنون.

  2. #2
    خیلی ممنون از پاسخهای پر مهر شما.
    خودم با نوشتم یک متد عالی، این مسئله رو حل کردم.

  3. #3
    کاربر دائمی آواتار touraj
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    341
    نقل قول نوشته شده توسط shalineh مشاهده تاپیک
    خیلی ممنون از پاسخهای پر مهر شما.
    خودم با نوشتم یک متد عالی، این مسئله رو حل کردم.
    اگه کسی چیزی نگفت، خب لابد نمیدونست و بلد نبود. حالا شما میشه بگی که با چه متدی حلش کردی؟

  4. #4

    Public Sub Actual_AutoSize(ByVal AxLabel As Label)
    If AxLabel.Text.Trim.Length = 0 Then Exit Sub
    Dim gp As New Drawing2D.GraphicsPath
    Dim sf As New StringFormat
    Dim rgn As Region
    sf.LineAlignment = StringAlignment.Near
    sf.Alignment = StringAlignment.Near
    gp.AddString(AxLabel.Text, AxLabel.Font.FontFamily, AxLabel.Font.Style, AxLabel.Font.SizeInPoints, New Point(0, 0), sf)
    rgn = New Region(gp)
    Dim bit As New Bitmap(AxLabel.Width, AxLabel.Height)
    AxLabel.DrawToBitmap(bit, AxLabel.DisplayRectangle)
    Dim x As Integer = rgn.GetBounds(AxLabel.CreateGraphics).X
    Dim y As Integer = rgn.GetBounds(AxLabel.CreateGraphics).Y
    Dim XX, YY As Integer
    For XX = x To bit.Width - 1
    For YY = y To bit.Height - 1
    If bit.GetPixel(XX, YY).ToArgb.ToString <> AxLabel.BackColor.ToArgb.ToString Then
    GoTo 100
    End If
    Next
    Next
    100:
    Dim FirstX As Integer = XX
    For XX = bit.Width - 1 To 0 Step -1
    For YY = y To bit.Height - 1
    If bit.GetPixel(XX, YY).ToArgb.ToString <> AxLabel.BackColor.ToArgb.ToString Then
    GoTo 200
    End If
    Next
    Next
    200:
    Dim SecondX As Integer = XX
    For YY = y To bit.Height - 1
    For XX = x To bit.Width - 1
    If bit.GetPixel(XX, YY).ToArgb.ToString <> AxLabel.BackColor.ToArgb.ToString Then
    GoTo 300
    End If
    Next
    Next
    300:
    Dim FirstY As Integer = YY
    For YY = bit.Height - 1 To 0 Step -1
    For XX = x To bit.Width - 1
    If bit.GetPixel(XX, YY).ToArgb.ToString <> AxLabel.BackColor.ToArgb.ToString Then
    GoTo 400
    End If
    Next
    Next
    400:
    Dim SecondY As Integer = YY
    AxLabel.Region = New Region(New Rectangle(FirstX, FirstY, SecondX - FirstX, SecondY - FirstY))
    gp = Nothing
    sf = Nothing
    rgn = Nothing
    bit = Nothing
    x = Nothing
    y = Nothing
    XX = Nothing
    YY = Nothing
    FirstX = Nothing
    SecondX = Nothing
    FirstY = Nothing
    SecondY = Nothing
    End Sub


    نتیجه کار:


    دقت این متد 100% می باشد و سرعت آن هم در حد چند میلی ثانیه می باشد.

    ممنون.

تاپیک های مشابه

  1. مشکل True شدن AutoSize در بعضی کنترلها
    نوشته شده توسط Reza_Shamayel در بخش VB.NET
    پاسخ: 7
    آخرین پست: دوشنبه 21 آبان 1386, 14:00 عصر
  2. translate a segment address to an actual 20-bit memory address
    نوشته شده توسط mr_esmaily در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 3
    آخرین پست: پنج شنبه 19 بهمن 1385, 15:49 عصر
  3. یک سوال در مورد Autosize
    نوشته شده توسط farzad964 در بخش Access
    پاسخ: 2
    آخرین پست: سه شنبه 17 مرداد 1385, 15:45 عصر
  4. AutoSize
    نوشته شده توسط delphiman00 در بخش برنامه نویسی در Delphi
    پاسخ: 10
    آخرین پست: جمعه 12 تیر 1383, 05:51 صبح
  5. AutoSize #2
    نوشته شده توسط delphiman00 در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: یک شنبه 07 تیر 1383, 12:14 عصر

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

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