الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إذا تكرمتم ارجوا المساعدة في تغيير خلفية عناصر الشاشات مرة واحدة

بدأه ابو رفيق في 10 مارس 2010 · 4 رد · 586 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أرجوا منكم التكرم بوضح طريقة أقوم من خلالها بعمل ( استايل ) خاص بعناصر الشاشة بحيث إذا قمت بتابة الكود التالي يقوم بتنفيذه على كافة العنصر من نفس الفئة في كافة الشاشات مثال

لمربعات النص مثلا

Text3.BackColor = &H8000000F

Text3.Appearance

وهكذا كل فئة منفصلة

هل يمكن تنفيذ ذلك برمجيا ولكم جزيل الشكر

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#2

السلام عليكم

ارفقت مثال بسيط حيث تستطيع تغير لون مربع Text لكل النوافذ وكذلك Label

وتستطيع تطويرة لاني هنا اخترت التغير ل Backcolor

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

قريبة لفكرة اعطاء صلاحيات للمستخدم

بامكانك اضافة مثلا على اي فورم تريد التغير في المثال التطبيق على الكل

بالتوفيق

ColorChange.rar

تم تعديل هذه المشاركة بواسطة AHMAD KALIL في 11 مارس 2010 في 10:38

#3
AHMAD KALIL كتب:

السلام عليكم

ارفقت مثال بسيط حيث تستطيع تغير لون مربع Text لكل النوافذ وكذلك Label

وتستطيع تطويرة لاني هنا اخترت التغير ل Backcolor

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

قريبة لفكرة اعطاء صلاحيات للمستخدم

بامكانك اضافة مثلا على اي فورم تريد التغير في المثال التطبيق على الكل

بالتوفيق

جزاك الله خير أخ AHMAD KALIL على الرد الجميل فعلا أنا كنت محتاج حاجة زي كدة

جزاك الله خير مرة أخرى

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#4

الأخ AHMAD KALIL

قمت بتعديل الكود كالتالي بحيث يتم وضعه في مديول ولكن لم يظبط إلا عند وضعه في حدث formload لكل فورم هل توجد طريقة لوضعه في مديول بحيث يطبق على كافة الشاشات مرة واحدة

Dim OPx As Control

For Each OPx In Controls

If TypeOf OPx Is TextBox Then

OPx.Alignment = 2

OPx.Appearance = 1

OPx.BackColor = &HFFC0C0

OPx.BorderStyle = 1

OPx.Font = "MS Sans Serif"

OPx.FontSize = "10"

OPx.Font.Bold = False

OPx.ForeColor = &H0&

End If

If TypeOf OPx Is Label Then

OPx.BackColor = &HFFC0C0

End If

If TypeOf OPx Is ComboBox Then

OPx.BackColor = &HFFC0C0

End If

Next

تم تعديل هذه المشاركة بواسطة ابو رفيق في 11 مارس 2010 في 12:12

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#5

السلام عليكم...

انسخ الكود التالي و ضعه في Module (انظر التوضيحات فيما بعد)

Option Explicit

Public Enum TModifyControlIDs
    ctl_TextBox = 1                     ' TextBox
    ctl_Label = 2                       ' Label
    ctl_Command = 4                     ' CommandButton
    ctl_Combo = 8                       ' ComboBox
    ctl_ListBox = 16                    ' ListBox
    ctl_CheckBox = 32                   ' CheckBox
    ctl_Option = 64                     ' OptionButton
    ctl_Frame = 128                     ' Frame

End Enum

Public Type TControlProperties
    CP_FormColor As OLE_COLOR           ' Form.BackColor
    CP_FormRTL As Integer               ' Form.RightToLeft
    CP_FontName As String               ' Font.Name
    CP_FontSize As Integer              ' Font.Size
    CP_FontBold As Integer              ' Font.Bold
    CP_FontItalic As Integer            ' Font.Italic
    CP_FontUnderline As Integer         ' Font.Underline
    CP_FontStriked As Integer           ' Font.StrikeOut
    CP_ForeColor As OLE_COLOR           ' ForeColor
    CP_BackColor As OLE_COLOR           ' BackColor
    CP_BorderStyle As Integer           ' BorderStyle
    CP_Appearance As Integer            ' Appearance
    CP_RightToLeft As Integer           ' RightToLeft
    CP_Alignment As AlignmentConstants  ' Alignment
End Type

Public GlobalControlIDs As TModifyControlIDs
Public GlobalControlProps As TControlProperties

Public Sub ModifyProperties(AForm As Form, Props As TControlProperties, CtrlsID As TModifyControlIDs)
    Dim Ctrl As Control

    If Props.CP_FormColor <> -1 Then
        AForm.BackColor = Props.CP_FormColor
    End If
    If Props.CP_FormRTL <> -1 Then
        AForm.RightToLeft = CBool(Props.CP_FormRTL)
    End If

    On Error Resume Next
    For Each Ctrl In AForm.Controls
        If (((CtrlsID And ctl_TextBox) = ctl_TextBox) And (TypeOf Ctrl Is TextBox)) _
                Or (((CtrlsID And ctl_TextBox) = ctl_TextBox) And (TypeOf Ctrl Is TextBox)) _
                Or (((CtrlsID And ctl_Command) = ctl_Command) And (TypeOf Ctrl Is CommandButton)) _
                Or (((CtrlsID And ctl_Label) = ctl_Label) And (TypeOf Ctrl Is Label)) _
                Or (((CtrlsID And ctl_CheckBox) = ctl_CheckBox) And (TypeOf Ctrl Is CheckBox)) _
                Or (((CtrlsID And ctl_Option) = ctl_Option) And (TypeOf Ctrl Is OptionButton)) _
                Or (((CtrlsID And ctl_Combo) = ctl_Combo) And (TypeOf Ctrl Is ComboBox)) _
                Or (((CtrlsID And ctl_ListBox) = ctl_ListBox) And (TypeOf Ctrl Is ListBox)) _
                Or (((CtrlsID And ctl_Frame) = ctl_Frame) And (TypeOf Ctrl Is Frame)) Then
            If Ctrl.Tag = "" Then
                With Props
                    If Trim$(.CP_FontName) <> "" Then Ctrl.Font.Name = .CP_FontName
                    If .CP_FontSize <> -1 Then Ctrl.Font.Size = .CP_FontSize
                    If .CP_FontBold <> -1 Then Ctrl.Font.Bold = CBool(.CP_FontBold)
                    If .CP_FontItalic <> -1 Then Ctrl.Font.Italic = CBool(.CP_FontItalic)
                    If .CP_FontUnderline <> -1 Then Ctrl.Font.Underline = CBool(.CP_FontUnderline)
                    If .CP_FontStriked <> -1 Then Ctrl.Font.Strikethrough = CBool(.CP_FontStriked)
                    If .CP_ForeColor <> -1 Then Ctrl.ForeColor = .CP_ForeColor
                    If .CP_BackColor <> -1 Then Ctrl.BackColor = .CP_BackColor
                    If .CP_BorderStyle <> -1 Then Ctrl.BorderStyle = .CP_BorderStyle
                    If .CP_Appearance <> -1 Then Ctrl.Appearance = .CP_Appearance
                    If .CP_RightToLeft <> -1 Then Ctrl.RightToLeft = CBool(.CP_RightToLeft)
                    If .CP_Alignment <> -1 Then Ctrl.Alignment = .CP_Alignment
                End With
            End If
        End If
    Next Ctrl
    On Error GoTo 0
End Sub

Public Sub ResetControlProps(AControlProps As TControlProperties)
    ' Resetting fields to values that will cuase no change to the corresponding property:
    With AControlProps
        .CP_FormColor = -1
        .CP_FormRTL = -1        ' 0 = False, 1 = True
        .CP_BackColor = -1
        .CP_ForeColor = -1
        .CP_FontName = ""
        .CP_FontSize = -1
        .CP_FontBold = -1       ' 0 = False, 1 = True
        .CP_FontItalic = -1     ' 0 = False, 1 = True
        .CP_FontStriked = -1    ' 0 = False, 1 = True
        .CP_FontUnderline = -1  ' 0 = False, 1 = True
        .CP_RightToLeft = -1    ' 0 = False, 1 = True
        .CP_BorderStyle = -1
        .CP_Alignment = -1
        .CP_Appearance = -1
    End With
End Sub

* ملاحظات:

1. تعريف الثوابت بطريقة الـ Enum (كما في النوع TModifyControlIDs) طريقة جيدة لأنه عند تعريف متغير من ذلك النوع فإنه عند كتابة اسم المتغير ثم علامة = ستظهر لنا تلقائياً قائمة بالقيم المحتملة.

2. في النوع TModifyControlIDs و تحت القيمة ctl_Frame يمكنك إضافة قيم لتعريف المكونات الأخرى التي قد يضمها مشروعك. المهم في الأمر أن كل قيمة تكون ضعف القيمة السابقة لها، يعني إذا أضفت قيمة بعد ctl_Frame فاجعلها تساوي 256 و القيمة التي تليها تساوي 512 و هكذا... (يمكنك استعمال أية معرفات، حتى X و Y و Z لكن يستحسن إعطاء القيم أسماء تدل على المكونات التي تمثلها).

3. في النوع TControlProperties الذي يمثل الخصائص التي تريد تغييرها يمكنك إضافة أي حقول لخصائص أخرى مع ملاحظة النقاط التالية:

** أ. الكود الذي كتبته يستعمل القيمة -1 للدلالة على عدم تغيير الخاصية، مثلاً إذا كانت قيمة الحقل CP_FontSize هي -1 فذلك يعني عدم تغيير حجم الخط. باستثناء الحقل CP_FontName حيث أنه من النوع String فإن القيمة الفارغة (Emty string) تدل على عدم تغيير الخاصية.

** ب. حتى القيم من النوع Boolean (مثل الخاصية RightToLeft) تم تعريف حقولها على أنها Integer لكي نستعمل -1 كقيمة للدلالة على عدم التغيير، و نستعمل القيمة 1 بدل True و القيمة 0 بدل False

4. إذا أضفت قيم للنوع TModifyControlIDs فلا تنس أن تعدل جملة If الطويلة لاختبار نوع المكون في الإجراء ModifyProperties

5. إذا أضفت حقول (تمثل الخصائص) في النوع TControlProperties فلا تنس إضافة جملة If تحت عبارة With Props في الإجراء ModifyProperties

6. كود الإجراء ModifyProperties يستعمل الخاصية Tag للمكونات للتعرف على المكونات التي يجب عدم تعديل خصائصها. مثلاً إذا كان لديك في إحدى النوافذ مجموعات مربعات نص (TextBoxes) و قمت بتنسيق أحدها بشكل مميز و لا تريد تغييره عند تطبيق التغييرات على بقية مربعات النص فاكتب أي شيء في الخاصية Tag لمربع النص ذاك، أي شيء، المهم أن لا تتركها فارغة.

*** لا تهتم لكثرة الشرح و الكود السابق!! فأنت ستكتبه مرة واحدة، و قد لا تحتاج إلى تعديله إلا في مرات قليلة.

* في الإجراء Load للـ Form الرئيسية اكتب الكود التالي (أيضاً ستكتبه مرة واحدة!):

Private Sub Form_Load()
    ResetControlProps GlobalControlProps
    With GlobalControlProps
        .CP_FormColor = vbYellow
        .CP_FormRTL = 1
        .CP_BackColor = vbBlue
        .CP_FontBold = 1
        .CP_ForeColor = vbWhite
        .CP_Alignment = vbCenter
        .CP_FontName = "Script MT Bold"
        .CP_FontSize = 18
    End With

    GlobalControlIDs = ctl_TextBox Or ctl_Label Or ctl_CheckBox

    ModifyProperties Me, GlobalControlProps, GlobalControlIDs
End Sub

في البداية نستدعي الإجراء ResetControlProps لضبط حقول المتغير الذي يمثل الخصائص على قيمها المبدئية التي لا تتسبب في تغيير قيم الخصائص.

ثم - ضمن جملة With - نعطي القيم التي نريدها للحقول التي تمثل الخصائص التي نريد تعديلها. لا داعي أن نعطي قيم لكل الحقول، فقط التي نحتاج إلى تعديلها. ضمن كتلة With...End With بمجرد أن تكتب نقطة في بداية سطر ستظهر لك قائمة بحقول الخصائص.

بعد ذلك نحدد ما هي المكونات التي نريد تعديل خصائصها و ذلك بإعطاء القيم المناسبة للمتغير GlobalControlIDs. بمجرد أن تكتب علامة = بعد اسم هذا المتغير ستظهر قائمة بالقيم الممكنة. و لتحديد عدة مكونات نضيفها إلى المتغير باستعمال العامل Or كما في الكود المثال.

أخيراً نستدعي الإجراء ModifyProperties لتطبيق التعديلات.

في جميع النوافذ الأخرى اكتب فقط السطر التالي في إجراء الحدث Load

ModifyProperties Me, GlobalControlProps, GlobalControlIDs

* لا تنس: إذا أردت استثناء أحد المكونات المذكورة في النوع TModifyControlIDs فاكتب أي شيء في الخاصية Tag لذلك المكون.

* إذا أردت تطبيق نمط مختلف لإحدى النوافذ عن بقية نوافذ المشروع فيمكنك تعريف متغيرات محلية في الحدث Form_Load بدلاً من GlobalControlIDs و GlobalControlProps، مثلاً في Form2

Private Sub Form_Load()
    Dim F2Props As TControlProperties
    Dim F2CtrlID As TModifyControlIDs
    ' تطبيق النمط العام
    ModifyProperties Me, GlobalControlProps, GlobalControlIDs

    ' تخصيص القوائم و القوائم المنسدلة في هذه النافذة:
    ResetControlProps F2Props
    F2Props.CP_BackColor = vbRed
    F2Props.CP_BorderStyle = 0
    F2CtrlID = ctl_Combo Or ctl_ListBox
    ModifyProperties Me, F2Props, F2CtrlID
 End Sub

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…