اذهب الي المحتوي
أوفيسنا

توسيط النص داخل حقل قابل للنمو بالتقرير


Ahmed_J
إذهب إلى أفضل إجابة Solved by jjafferr,

الردود الموصى بها

السلام عليكم

لدي قاعدة بيانات الموظفين وفيها عدة تقارير وبعض الحقول صعيرة الحجم وفيها كلام كثير

عملت الحقول  من خلال نافذة ترتيب جدولي  ومن خصائص الحقل جعلتها قابلة للنمو  لكن الارقام داخل الحقول تبقى في الاعلى كما في الصورة 1

المطلوب / توسيط النص من جميع الجهات في حقول التقرير كما في الصورة رقم  2  الماخوذة من ملف اكسيل

وشكرا لكم

1.jpg

2.jpg

تم تعديل بواسطه Ahmed_J
رابط هذا التعليق
شارك

السلام عليكم استاذ @jjafferr

الا توجد طريقة لتوسيط الارقام عن طريق وحدة نمطية  او كود معين

لاهمية موضوع التنسيق للتقرير بالاكسس

وهذا مثال لاحد الاخوة بس مش عاوز بضبط معي عند تغيير قياس الحقل

وشكرا لك

 

Database4.mdb

تم تعديل بواسطه Ahmed_J
رابط هذا التعليق
شارك

  • أفضل إجابة

تفضل 🙂

افتح التقرير rpt_Vertically_center_Fields

 

الدالة التي تقوم بالعمل ، وعملت لها وحدة نمطية مستقلة ، حتى يمكننا الاستفادة منها لأكثر من تقرير:

Public Sub VerticalAlignCenter(ByRef ctl As Control)

'
'From: https://www.vbforums.com/showthread.php?505561-VB-VBA-Set-TextBox-and-Label-text-to-Vertically-Align-Center&p=3675142&viewfull=1#post3675142
'
'Sets the vertical alignment of a label or textbox to "Center"
'NOTE:
'MinimumMargin: the value of the smallest margin Access allows in twips.  If you set the .TopMargin
'to "0", Access will actually place a gap equal to 1 point (or 20 twips) rather than actually
'placing the text at the very top border of the control.  FURTHER NOTE: Access sucks.
'
'BorderWidth: half the value of .BorderWidth in twips.  As you increase the border (Hairline, 1pt, 2pt, etc..)
'Access expands the border equally from the center.  We're only concerned with the "inner" section of the border.
'
'TwipsPerPoint: global constant set to 20

On Error GoTo ErrorCode
    
    Dim MinimumMargin As Integer
    Dim BorderWidth As Integer
    Dim TwipsPerPoint
    
    TwipsPerPoint = 20
    
    If Not ((TypeOf ctl Is TextBox) Or (TypeOf ctl Is Label)) Then Exit Sub
   
   'Figure out how many lines it is
   Dim LenOfText, WidOfBox, NumberOfLines, HtOfText
   
   If TypeOf ctl Is TextBox Then
    LenOfText = ctl.Text
   Else:
    LenOfText = ctl.Caption
   End If
    
    'how wide is this puppy?
    WidOfBox = ctl.Width
    LenOfText = (Len(LenOfText) * TwipsPerPoint * ctl.FontSize) / 2
    NumberOfLines = Int(LenOfText / WidOfBox) + 1
    HtOfText = NumberOfLines * TwipsPerPoint * ctl.FontSize
    
   
    MinimumMargin = 1 * TwipsPerPoint
    BorderWidth = (ctl.BorderWidth * TwipsPerPoint) / 2
    
    ctl.TopMargin = ((ctl.Height - HtOfText) / 2) - MinimumMargin - BorderWidth
    
ErrorCode:
    Exit Sub
End Sub

.

ثم في التقرير ، انقر على فاصل قسم التفصيل Detail ، وفي حدث "عند الطباعة" (ولن يعمل يأي حدث آخر ، فهو آخر حدث قبل الطباعة ، بينما للاحداث الاخرى يكون فات الاوان لهذا العمل) ، ننادي الدالة اعلاه بإسم الكائن الذي نريد توسيطه :

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    
    VerticalAlignCenter Me.save
    VerticalAlignCenter Me.a1
    
End Sub

.

والنتيجة :

image.png.fa2eda5d3779d9ef8c51c52ae2488fd3.png

.

 

كما يوجد مثال عند ملك دوال الاكسس الثقيلة المتقاعد في http://www.lebans.com

http://www.lebans.com/DownloadFiles/A2KVerticalJustify.zip

 

جعفر

1293.1.Report_Draw_BoxLine.accdb.zip

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

4 hours ago, Ahmed_J said:

السلام عليكم استاذ @jjafferr

الا توجد طريقة لتوسيط الارقام عن طريق وحدة نمطية  او كود معين

لاهمية موضوع التنسيق للتقرير بالاكسس

وهذا مثال لاحد الاخوة بس مش عاوز بضبط معي عند تغيير قياس الحقل

وشكرا لك

 

Database4.mdb 308 kB · 1 download

 

9 minutes ago, jjafferr said:

تفضل 🙂

افتح التقرير rpt_Vertically_center_Fields

 

جعفر

1293.1.Report_Draw_BoxLine.accdb.zip 71.46 kB · 0 downloads

روعة استاذ جعفر ...بصراحة المثال الذي ارفقه الزميل صاحب المشاركة ايضا رائع حاولت تطبيقه فلم يضبط معي  رغم اني طبقت جميع اكواده... لا اعرف لماذا اكسس احيانا يتصرف بحماقة تذهلني

رابط هذا التعليق
شارك

11 ساعات مضت, Eng.Qassim said:

لا اعرف لماذا اكسس احيانا يتصرف بحماقة تذهلني

ما عندي تعليق على ملاحظتك.

 

 

 

 

 

ولكن انظر الى هذه الملاحظة:

11 ساعات مضت, jjafferr said:

وفي حدث "عند الطباعة" (ولن يعمل يأي حدث آخر ، فهو آخر حدث قبل الطباعة ، بينما للاحداث الاخرى يكون فات الاوان لهذا العمل)

فإذا وضعت الكود على حدث خطأ ، فالاكسس غير مذنب !!

 

وارى الكثير يستعمل مثل هذا الكود ، والذي لن يعمل على هذا الحدث حتى لو حاولت فيه لبكرة الصبح :

Private Sub iDate_AfterUpdate()
  cancel = true
end if  

.

فمناداة الحدث لا يوجد عندها متغير cancel ، والمتغير موجود في الحدث التالي ويعمل من اول مرة :

Private Sub iDate_BeforeUpdate(Cancel As Integer)
  cancel = true
end if  

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information