اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

مديول عام لتغيير لون وخط مربعات النصوص


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

لدي نموذج اسمه ( Frm1 )

مربعات نصوص اسمائها ( Txt4)__( Txt3 ) __ ( Txt2) __ ( Txt1 )

المطلوب :

Module عام يقوم بتغيير لون الخلفية إلى اللون الأسود ولون الخط إلى اللون الأبيض لكل Txt عند التركيز وتغيير لون الخلفية إلى اللون الأبيض ولون الخط إلى اللون الأسود عند فقدان التركيز من دون استخدام حدثي ( عند التركيز ) و ( عند فقدان التركيز ) .

أي تتعرف Module على مربع النص الذي يمتلك التركيز وعلى خصائصه .

حاولت استخدام screen.ActiveControl ولكنني لم أفلح في ذلك وعجزت في الوصول إلى ذلك.

الرجاء ممن لديه معرفة في ذلك أفادتي بارك الله فيكم

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

ياليتني أعرف كان ما أتردد... :p طيب ماتقدر تخلي خصائص text الخلفية يكون لونها عشوائي Random بحيث يتغير رقم اللون في حالة الدخول للفورم في كل مرة الى أرقام عشوائية الي هي تمثل درجة لون الخلفية ... مجرد عرض فكرة

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

شكراً أخت ليلى على الفكرة وأنا عارف ما تقصرين فيما لديك من معلومات.

فكرة تغيير اللون عشوائي ما تنفع الهدف هو التحكم في خصائص العناصر على النموذج بدون التعامل مع الأحداث مباشرة .

تخيلي لو لديك نمموذج عليه 12 مربع نص ويلزمك حدث تغيير لون خلفية مربع النص ولون الخط عند التركيز وعند فقدان التركيز هذا يعني أنك ستكتبين حدثين هما عند التركيز وعند فقدان التركيز وتكررين الأمر نفسه مع الــ 12 مربع نص وهذا يعني 2 ضرب12=24 ولو وصلنا للطريقة التي ابحث عنها فأننا نكون قد كتبنا برنامج عمومي واحد بدلاً من 24

أرجو أن نصل لذلك فهو سيختصر علينا مسافات طويله.

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

هذا هو التابع الذي تريده :

Public Sub SetTextColors(F As Form, Optional AFC As OLE_COLOR = vbBlack, Optional ABC As OLE_COLOR = vbWhite , Optional DFC As OLE_COLOR = vbWhite, Optional DBC As OLE_COLOR = 12632256)
    Dim T As Object
    For Each T In F
        If T.ControlType = acTextBox Then
            If T.Name = F.ActiveControl.Name Then
                T.BackColor = ABC
                T.ForeColor = AFC
            Else
                T.BackColor = DBC
                T.ForeColor = DFC
            End If
        End If
    Next
End Sub

أرجو أن يكون وافياً بالغرض

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

الأخ / مهند

أنا وأثق من قدراتك في ذلك لقد جربت الكود ولكن ظهرت لي رسالتين الأول تطالب بعدد الوسائط .

حتى يتم تنفيذ الكود لا بد من وضعه في حدث " في الحالي" _ Form_Current

وهذا سبب رسالة نصها الأتي " يتطلب التعبير الذي أدخلته أن يتواجد عنصر التحكم في الأطار النشط "

ليس السبب من الكود ولكن قد يكون مني أنا فهل لك أن تجربه على مثال ترفقه بارك الله فيك

شكراً لك مقدماً .

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

السلام عليكم

جميل أخي مهند .. ولكن تبقى مشكلة الماوس . اعتقدت قبل التعديل أن حدث MouseMove لقسم الـ Detail/تفصيل سيحل الموضوع ولكن بعد تجربته لم ينجح .

تحياتي .

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

بالنسبة لمشكلة الماوس وجدت الحل

إذا وضعت هذا السطر في حدث Timer وعينت Form.TimerInterval إلى 300 تحل المشكلة كما يلي :

Private Sub Form_Timer()
    SetTextColors
End Sub

وأزل أي سطر برمجة آخر من الفورم بما يتعلق بهذا الSub

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

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

عين لون الخلفية في كل مربعات النص إلى أبيض

ثم عين نمط الخلفية إلى شفاف

والآن شغل النموذج وجرب الانتقال من أداة إلى أخرى وسترى كيف تكون النتيجة !

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

السلام عليكم

أخي مهند .. لقد حاولت أن أخفف من عملية التكرار والتلوين المستمر لكل مكونات النموذج اعتمادا على اقتراحك الأخير باستخدام المؤقت ، طبعا قبل أن أرى ردك الأخير وقبل التجربة كذلك .

تحياتي .

Muhannad.rar

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

أخي أبو هادي الأسلوب الذي تعتمده أنت يعتمد على حفظ اسم عنصر التحكم السابق ليتم تظليله فقط بالرمادي

وهذا ممكن بغير أسلوب وذلك بالاعتماد على خاصية screen.PreviousControl

ولكن استخدام هذه الطريقة يؤدي إلى بقاء مربع النص دون تظليل بالرمادي في حال الضغط المستمر على زر Tab مثلاً ثم إفلاته فوق مربع نص بعيد !

علماً أن الأسلوب الذي اتبعته أنا في مثالي وقد غيرته عن الـ Sub في المشاركة الأولى لي لا يعتمد التلوين المستمر لكل مكونات النموذج بل يلون بعد شرط If لفحص اللون إذا كان مغايراً

على أي حال مشاركتي السابقة تحتوي الحل الأسهل برأيي

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

السلام عليكم

جيد أخي مهند .. كلامك صحيح ، أن الطريقة الأولى بعد التعديل عليها بإضافة التوقيت لها هي الأفضل ولكن تبقى مشكلة تحديدك لنوع واحد فقط من الـ Controls ، فماذا لو أن هناك Combo Box أو List Box ؟

تحياتي .

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

الأخ / مهند

عمل رائع وفعلاً كنت ابحث عنه من فترة وقد استفدت من مثال الكثير وها أنت تتفضل علينا به بارك الله فيك

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

طبعاً بعد إذنك أخي مهند لقد عدلت في الكود ليناسب الألوان التي أريد كذلك جعلت مربع نص اسفل النموذج يعرض معلومات عن أي عنصر يمتكل التركيز كتوجيه المستخدم أثناء إدخال البيانات وذلك بواسطة خاصة Tag للعنصر الذي يمتلك التركيز

أيضاً اسنتجت من مثالك مديول يقوم بمسح محتويات جميع مربعات النصوص بدلاً من الإشارة إليها باسمائها وهو التالي :

Public Sub TxtFa()
Dim ctl As Control
For Each ctl In Screen.ActiveForm.Controls
If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then
With ctl
ctl = ""
End With
End If
Next

End Sub
الأخ أبو هادي لا مشكلة عند وجود Combo Box أو List Box كل ما عليك هو تغيير السطر التالي : I
f T.ControlType = acTextBox Then
بالسطر التالي :
       If T.ControlType = acTextBox Or T.ControlType = acComboBox Or T.ControlType = acListBox Then

مرفق مثال للتعديل

الأخ مهند / الرجاء الإطلاع على التعديل فربما أرتكبت بعض الأخطأ لها سلبيات لا أعرفها وذلك لتوجيهي لتجنبها بارك الله فيك

Muhannad.rar

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

بإمكانك أضافة إلى شرط التحقق من النوع قبول أنواع أخرى مثل

ListBox أو ComboBox .. لا مشكلة !

و كنت قد بدأت محاولة تجريب أسلوب جديد يعتمد على Class .. ولكنني أوقفت المحاولة بسبب انتباهي لآخر أسلوب الذي أفضله والذي هو بدون أي كود

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

  • 2 weeks later...

السلام عليكم

لقد قمت بعمل صنف اسمه CTextColors ليقوم بهذا العمل .. وهكذا تم الاكتفاء بسطرين فقط في النموذج هما :

   Dim C As New CTextColors
   C.SetForm Me

وهذا هو المثال :

Muhannad.rar

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

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