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

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

قام بنشر

لدي نموذج اسمه ( 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...

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