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

نام تاپیک: انتقال کپشن فرم به وسط تایتل بار فرم

  1. #1

    انتقال کپشن فرم به وسط تایتل بار فرم

    سلام
    با چه کدی میتوان برای هر فرمی به نسبت اندازه عرض فرم و تعداد حروف کپشن فرم ، متن کپشن را به وسط عنوان یا وسط تایتل بار فرم انتقال داد؟
    با تشکر

  2. #2

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    یک فایل پیدا کردم که کپشن فرم رو به وسط عنوان فرم انتقال میده منتها این فایل برای محیط VB6 تهیه شده و بخاطر یک سری خصوصیات که فرم های VB6 دارند و فرم های اکسس فاقد این خصوصیات میباشد موفق نشدم در محیط اکسس از کدهای فوق استفاده کنم . خصوصیاتی مثل () formName.TextWidth و formName.FontName
    فایل های ضمیمه فایل های ضمیمه

  3. #3
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    --------------------------------------------
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 16 بهمن 1403 در 07:48 صبح

  4. #4
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نمونه ضمیمه رو بررسی بفرما!
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 16 بهمن 1403 در 07:49 صبح

  5. #5
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نمونه بالا رو الآن دوباره امتحان کردم یک مشکلی داره و اون اینکه در هنگام ریسایز شدن فرم متن کپشن جابجا نمیشه که باید بررسی بشه مشکل از کجاست

  6. #6
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    به دلیل تفاوت های خاصی که در خصوصیات فرم اکسس نسبت به فرم های زبانهای برنامه نویسی وجود داره برای اجرای بعضی کارها در فرم های اکسس باید از راه های غیر متعارف استفاده کرد. موضوع این تاپیک هم از اون مواردی است که برای عملی کردنش باید از راهکاری غیر عادی استفاده کرد . مثلاً در نمونه بالا چون فرم اکسس فاقد خصوصیت (...) formName.TextWidth میباشه و این خاصیت در قسمت گزارش وجود داره بنده در نمونه پست 4 برای بدست آوردن مقدار این خصوصیت از یک گزارش خالی استفاده کردم و در قسمت Detail_Format مقدار متغییر عمومی رو معادل این خصوصیت قرار دادم و بعد گزارش رو بصورت مخفی اجرا و بلافاصله دستور بسته شدن اون رو در کدها قرار داده ام.
    منتها با این وجود هم اشکالات دیگه ای در اجری اون وجود داره که باید از طریق دیگه برطرف بشه

  7. #7

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    با سلام
    ممنون از توضیحاتتون
    فقط یک سوال
    ممکنه بفرمائید تابع () formName.TextWidth چه کاری انجام میده ؟

  8. #8
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نقل قول نوشته شده توسط atf1379 مشاهده تاپیک
    با سلام
    ممنون از توضیحاتتون
    فقط یک سوال
    ممکنه بفرمائید تابع () formName.TextWidth چه کاری انجام میده ؟
    اندازه طول کاراکترهای یک متن رو بدست میاره

  9. #9
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,512

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    نمونه بالا رو الآن دوباره امتحان کردم یک مشکلی داره و اون اینکه در هنگام ریسایز شدن فرم متن کپشن جابجا نمیشه که باید بررسی بشه مشکل از کجاست
    سلام جناب بهرامی گرامی
    روز خوش

    با اجازه شما نمونه ای که زحمتش رو کشیده بودین دیدم و مثل همیشه تحسین برانگیز بود.

    یک پرسش داشتم از حضورتون:
    همین روش رو در VB هم تست کردین و جواب گرفتین؟ (دات نت منظورم نیست - همون VB6)
    این بخش center شدن caption با resize رو میگم.

  10. #10
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام جناب بهرامی گرامی
    روز خوش

    با اجازه شما نمونه ای که زحمتش رو کشیده بودین دیدم و مثل همیشه تحسین برانگیز بود.

    یک پرسش داشتم از حضورتون:
    همین روش رو در VB هم تست کردین و جواب گرفتین؟ (دات نت منظورم نیست - همون VB6)
    این بخش center شدن caption با resize رو میگم.
    عرض سلام و ارادت خدمت استاد مازولاق عزیز !
    نمونه ای که در پست 2 ضمیمه شده برای انتقال کپشن به وسط فرم در محیط VB6 تهیه شده
    که کدهای نمونه فوق در زیر قرار میدهم که ملاحظه و بررسی بفرمائین
    کد های ماژول عمومی:

    Const SPI_GETNONCLIENTMETRICS = 41
    Const LF_FACESIZE = 32
    Private Type LOGFONT
    lfHeight As Long
    lfEscapement As Long
    lfUnderline As Byte
    lfStrikeOut As Byte
    lfWidth As Long
    lfWeight As Long
    lfItalic As Byte
    lfCharSet As Byte
    lfClipPrecision As Byte
    lfOutPrecision As Byte
    lfQuality As Byte
    lfPitchAndFamily As Byte
    lfOrientation As Byte
    lfFaceName(LF_FACESIZE) As Byte
    End Type

    Private Type NONCLIENTMETRICS
    cbSize As Long
    iBorderWidth As Long
    iScrollWidth As Long
    iScrollHeight As Long
    iCaptionWidth As Long
    iCaptionHeight As Long
    lfCaptionFont As LOGFONT
    iSMCaptionWidth As Long
    iSMCaptionHeight As Long
    lfSMCaptionFont As LOGFONT
    iMenuWidth As Long
    iMenuHeight As Long
    lfMenuFont As LOGFONT
    lfStatusFont As LOGFONT
    lfMessageFont As LOGFONT
    End Type
    '
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

    Private Const SM_CXSIZE As Long = 30 ' width of a title bar button at 96 DPI

    Public Function center_Form_Caption(ByRef formName As Form, ByVal currentTitle)

    Dim ncm As NONCLIENTMETRICS, res As Single, strPuffer As String, i As Integer
    ncm.cbSize = 340
    res = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, ncm, 0)
    ' If res = 0 Then LastError: Exit Function
    Dim lngTitle As Long
    Dim Spacelen As Long
    Dim theSpaces As Long
    Dim tmpFontName As String

    tmpFontName = formName.FontName
    strPuffer = StrConv(ncm.lfCaptionFont.lfFaceName(), vbUnicode)
    strPuffer = Replace(strPuffer, Chr(0), "")
    formName.Font.Name = strPuffer
    formName.Font.Size = -ncm.lfCaptionFont.lfHeight / (1440 / Screen.TwipsPerPixelY) * 72
    lngTitle = formName.TextWidth(currentTitle)
    ' theSpaces = (formName.Width - lngTitle) / 2

    ' note: rgrect(2) below is the Min button. If there is no Min button or no buttons at all,
    ' change as needed. See this link for what items are in the array of rects
    ' https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagtitlebarinfoex
    theSpaces = (formName.ScaleWidth - GetSystemMetrics(SM_CXSIZE) * 3.05 * 15 - lngTitle) / 2
    If theSpaces < 1 Then
    formName.Caption = currentTitle
    Else
    Spacelen = formName.TextWidth(" ")
    If Spacelen = 0 Then Spacelen = 1
    theSpaces = theSpaces / Spacelen
    formName.Caption = Right$(Space$(theSpaces) & currentTitle, 255)
    End If
    ' Debug.Print formName.Caption
    formName.Font.Name = tmpFontName
    End Function

    کد مربوطه به فراخوانی تابع انتقال کپشن به وسط فرم:

    center_Form_Caption Me, LTrim$(Me.Caption)


    کدهائی که بنده جایگزین کدهای فوق برای فرم اکسس کردم شامل موارد زیر میباشه :
    دو تابع عمومی در ماژول عمومی :

    'Public pubSzrFont As String 'font name
    'Public pubSzrSize As Integer 'font size
    'Public pubSzrBold As Boolean 'font bold
    Public pubSzrText As String 'control text
    Public pubSzrWidth As Long 'text width


    Function fctSzr(strFont As String, intSize As Integer, strText As String, Optional boBold As Boolean = False) As Long
    'pubSzrFont = strFont
    'pubSzrSize = intSize
    pubSzrText = Replace(strText, " ", "-")
    'pubSzrBold = boBold
    DoCmd.OpenReport "rptSzr", acViewPreview, , , acHidden
    DoCmd.Close acReport, "rptSzr"
    fctSzr = pubSzrWidth
    End Function

    Public Sub CenterCaptionForm(frm As Form, strFont As String, intSize As Integer, strText As String, Optional boBold As Boolean = False)
    Dim lngTitle As Long
    Dim Spacelen As Long
    Dim theSpaces As Long
    Dim lngWidth As Long
    lngWidth = fctSzr(strFont, intSize, strText, True)
    lngTitle = lngWidth
    theSpaces = (frm.WindowWidth - lngTitle)
    Spacelen = fctSzr("tahoma", 9, " ", True)
    If Spacelen = 0 Then Spacelen = 1
    theSpaces = theSpaces / Spacelen
    frm.Caption = Space(theSpaces) & frm.Caption
    End Sub

    کد مورد استفاده در بخش Detail_Format گزارش خالی:

    Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    'Me.FontName = pubSzrFont
    'Me.FontSize = pubSzrSize
    'Me.FontBold = pubSzrBold
    pubSzrWidth = Me.TextWidth(pubSzrText) + 30
    End Sub

    کد فراخوانی تابع انتقال کپشن به وسط تایتل بار فرم:
    Call CenterCaptionForm(Me, "tahoma", 8, Me.Caption, False)


    همونطور که در پست های 5 و 6 عرض کردم کدهای جایگزین بنده یک ایراد اساسی داره و اون اینکه در هنگام ریسایز فرم ، کپشن به وسط تایتل بار فرم منتقل نمیشه

  11. #11
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    ..........
    آخرین ویرایش به وسیله eb_1345 : پنج شنبه 25 بهمن 1403 در 00:43 صبح

  12. #12
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,512

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    سلام دوباره خدمت جناب بهرامی گرامی

    کدهای نمونه فوق در زیر قرار میدهم که ملاحظه و بررسی بفرمائین
    کدهای اصلی که برای فرم های VB6 هست رو دیدم،
    البته نمیتونم اون رو تست کنم - ظاهرا که درست هست دیگه،
    با این وجود برای این که اونها رو در VBA استفاده کنین مناسب نیست
    چون یک سری چیزهایی نیاز داره که اینجا نداریم.


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

    بعد از کتابخونه gdi32 استفاده کنین
    که یک فانکشن داره که مشخصات فونت رو میدین (مثل همین LOGFONT بجز اسم فونت که استرینگ ساده اس)
    و یک فونت میسازه،
    حالا یک فانکشن دیگه داره که با این فونت که ساختین و متنی که بهش میدین اندازه های باکس رندر اون رو حساب میکنه (به پیکسل و واسه screen)
    - البته من جزئیات کار رو دیگه نیاوردم - (چون باید برم برتامه های 20 سال پیش رو بگردم یا گوگل/بینگ کنم یا از هوش ساختگی کمک بگیرم که شما نیازی به اینها ندارین)

    یک بار هم همین پروسه رو برای متنی که فقط space ساده هست انجام مبدین تا اندازه اون هم داشته باشین.

    وقتی اندازه رو داشتین مابقی کار دیگه ساده است:
    در فرم یک روتین مینویسین که از روی insidewidth و اندازه باکس که بالا بدست آوردین
    اندازه جای خالی رو محاسبه کنه (که البته اینم تقریبی هست چون بستگی به آیکون و کنترل باکس فرم هم داره)
    و این اندازه رو نصف و به اندازه space تقسیم
    و به اندازه بدست آمده space به سمت چپ trim شده کپشن فعلی بچسبونه
    و این رو بعنوان کپشن فعلی بگذاره.

    این روتین رو در form resize بگذارین و تمام.

    =====
    برای ریپورت هم همینه روش
    فقط اونجا windowwidth باید باشه.

    چه در فرم و چه در ریپورت با ریسایز کردن مقدار width عوض نمیشه
    برای همین insidewidth یا windowwidth باید استفاده کنین.
    ========

    بعد همه اینها نهایتا شما یک وسط-چین تقریبی دارین!
    و بنظرم کلا چیزی نیست که ارزش وقت گذاشتن داشته باشه - مگر بعنوان یک چالش.

    ==========
    برای بینندگان عبوری تاپیک:
    اگر زمانی دیدین خواسته هایی دارین
    که اکسس بصورت ذاتی نداره
    و پیاده سازی اون نیاز به کارهای پیچیده و عجیب و غریب و غیرمتعارف داره

    بدونین که یا انتخاب نادرستی کردین یا خواسته تون غیرمنطقیه!

  13. #13
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,046

    نقل قول: انتقال کپشن فرم به وسط تایتل بار فرم

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    و بنظرم کلا چیزی نیست که ارزش وقت گذاشتن داشته باشه - مگر بعنوان یک چالش.

    ==========
    برای بینندگان عبوری تاپیک:
    اگر زمانی دیدین خواسته هایی دارین
    که اکسس بصورت ذاتی نداره
    و پیاده سازی اون نیاز به کارهای پیچیده و عجیب و غریب و غیرمتعارف داره

    بدونین که یا انتخاب نادرستی کردین یا خواسته تون غیرمنطقیه!
    با عرض سلام متقابل
    ممنون بابت توضیحات مفید و مفصلتون
    راستش دیروز اومدم از طریق یک سری API Declares و تابع GetStringWidth برای انجام اینکار اقدام کردم ولی در حالت ریسایز نمودن فرم متوجه شدم انجام اینکار برای فرم های اکسس ظاهراً نتیجه بخش نمی باشه ؛ چون وقتی عرض فرم از یک اندازه خاصی بزرگتر میشه متن کپشن بطور کامل نمایش داده نمیشه .
    روش جدید رو در فرم نمونه ضمیمه اعمال کرده ام . در فرم نمونه ضمیمه بعد از اجرای فرم ملاحظه خواهی نمود که متن کپشن تقریبا در وسط قرار گرفته ولی اگر فرم رو از طریق پائین نگه داشتن موس و کشیدن لبه سمت راست آن به سمت بیرون ریسایز نمائین متن کپشن کوتاهتر میشه تا جائیکه متن کاملاً غیر قابل نمایش میشه
    فایل های ضمیمه فایل های ضمیمه

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

  1. سوال: زیر منوهای آیتمهای واقع شده در وسط منو در IE دوسطری میشوند
    نوشته شده توسط majid784 در بخش طراحی وب (Web Design)
    پاسخ: 5
    آخرین پست: دوشنبه 21 آذر 1390, 14:59 عصر
  2. سوال: طراحی سایتهای سازگار با وسایل الکترونیکی
    نوشته شده توسط phpweb در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: دوشنبه 15 فروردین 1390, 01:05 صبح
  3. سوال: می خوام در تمام مونیتورها سایتم وسط باشه ؟؟
    نوشته شده توسط mohammad_2039 در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: سه شنبه 14 مهر 1388, 14:29 عصر

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

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