ورود

View Full Version : تغییر ات رنگ فونت و بک برای لیبلها و کمبوها برای یک فرم



moustafa
یک شنبه 14 مرداد 1403, 21:24 عصر
سلام
در کد زیر تغییر ات رنگ فونت و بک برای لیبلها و کمبوها برای یک فرم اعمال نمیشه در حالیکه برای فرمهای دیگه اعمال میشه .مسیج میگیرم کل کنترلهای فرم رو با اسم و نوع نشون میده اما در شرط اعمال نمیشه

Private Sub btnc_Click()
Dim frm As Form
Dim ctr As control
Set frm = Form_tblfactor ' forms!نام فرم

For Each ctr In frm

If ctr.ControlType = acLabel And ctr.Tag = "*" Then
ctr.BackColor = RGB(240, 170, 175)
ctr.ForeColor = RGB(6, 6, 6)
End If

If ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
ctr.BackColor = RGB(241, 233, 233)
ctr.ForeColor = RGB(6, 6, 6)
End If


Next
Me.Detail.BackColor = RGB(247, 208, 208)
Me.FormHeader.BackColor = RGB(250, 243, 232)
Me.FormFooter.BackColor = RGB(250, 243, 232)
End Sub

eb_1345
یک شنبه 14 مرداد 1403, 23:04 عصر
سلام
وقت بخیر
یک تابع عمومی بصورت زیر ایجاد کن و این تابع را در هر جائی از فرم که در نظر داری بصورت Call ColorChangeCtr(Me) فراخوانی کن !


Public Sub ColorChangeCtr(frm As Form)
Dim ctr As Control
For Each ctr In frm.Controls
If ctr.ControlType = acLabel And ctr.Tag = "*" Then
ctr.BackColor = RGB(240, 170, 175)
ctr.ForeColor = RGB(6, 6, 6)
ElseIf ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
ctr.BackColor = RGB(241, 233, 233)
ctr.ForeColor = RGB(6, 6, 6)
End If
Next
frm.Detail.BackColor = RGB(247, 208, 208)
frm.FormHeader.BackColor = RGB(250, 243, 232)
frm.FormFooter.BackColor = RGB(250, 243, 232)
End Sub

ضمناً برای تغییر رنگ بکگراند لیبل ها باید BackStyle آنها در حالت Normal باشد نه Transparent

moustafa
دوشنبه 15 مرداد 1403, 10:54 صبح
سلام
وقت بخیر
یک تابع عمومی بصورت زیر ایجاد کن و این تابع را در هر جائی از فرم که در نظر داری بصورت Call ColorChangeCtr(Me) فراخوانی کن !


Public Sub ColorChangeCtr(frm As Form)
Dim ctr As Control
For Each ctr In frm.Controls
If ctr.ControlType = acLabel And ctr.Tag = "*" Then
ctr.BackColor = RGB(240, 170, 175)
ctr.ForeColor = RGB(6, 6, 6)
ElseIf ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
ctr.BackColor = RGB(241, 233, 233)
ctr.ForeColor = RGB(6, 6, 6)
End If
Next
frm.Detail.BackColor = RGB(247, 208, 208)
frm.FormHeader.BackColor = RGB(250, 243, 232)
frm.FormFooter.BackColor = RGB(250, 243, 232)
End Sub

ضمناً برای تغییر رنگ بکگراند لیبل ها باید BackStyle آنها در حالت Normal باشد نه Transparent

عرض ادب و احترام وتشکر جناب بهرامی .
اولش به شکل تابع عمومی درست کردم دیدم تو بعضی فرمها اعمال نمیشه بمنظور تریس برای هر فرم کدها رو نوشتم و مشکل رو در عدم شناسایی
tag پیدا کردم شرط بررسی وجود ستاره در تگها در بعضی ار فرمها اعمال نمیشه !

And ctr.Tag = "*"

eb_1345
دوشنبه 15 مرداد 1403, 11:05 صبح
عرض ادب و احترام وتشکر جناب بهرامی .
اولش به شکل تابع عمومی درست کردم دیدم تو بعضی فرمها اعمال نمیشه بمنظور تریس برای هر فرم کدها رو نوشتم و مشکل رو در عدم شناسایی
tag پیدا کردم شرط بررسی وجود ستاره در تگها در بعضی ار فرمها اعمال نمیشه !

And ctr.Tag = "*"
متوجه نشدم ، یعنی با تابع فوق هم مشکل برطرف نشد؟
شاید در اون فرم هایی که شرط اعمال نمیشه در خصوصیت Tag کنترل مربوطه علامت ستاره با فاصله خالی وارد شده!

moustafa
دوشنبه 15 مرداد 1403, 14:17 عصر
متوجه نشدم ، یعنی با تابع فوق هم مشکل برطرف نشد؟
شاید در اون فرم هایی که شرط اعمال نمیشه در خصوصیت Tag کنترل مربوطه علامت ستاره با فاصله خالی وارد شده!

نه درست وارد شده !

eb_1345
دوشنبه 15 مرداد 1403, 14:54 عصر
................................

moustafa
دوشنبه 15 مرداد 1403, 23:32 عصر
................................

روش خوبی بود چرا ویرایش کردین ؟! trace گرافیکی گام به گام .........امروز سرمون خیلی شلوغ بود مجال نشد که در بحث شرکت کنم الان اومدم کامنت بذارم . ضمن تشکردر ادامه :

کار کردن رو گرافیک فرمها با یک تابع یا سابروتین عمومی داری پارامتر فرم از نوع فرم و رنگها و فونتهای ابجکتها و بک گراند وفوتر و هدر فرم از نوع نامبر یا عددی

numberبخاطر تابع hex که اونم باید کانورت بشه به عدد . تابعی برای این کار وجود داره یا باید از سایتهای تبدیل انلاین استفاده کرد ؟

شناسایی مشکل tag و چرا اینکهtag تو لیست هوشمند پراپرتی های کنترل + اسپیس نیست ؟



Public Sub ColorChangeCtr(frm As Form,c1 as long,c1 as long,c2 as long,c3 as long,c4 as long,c5 as long,c6 as long)
Dim ctr As Control
For Each ctr In frm.Controls
If ctr.ControlType = acLabel And ctr.Tag = "*" Then
ctr.BackColor = Hex(c1)
ctr.ForeColor = Hex(c2)
ElseIf ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
ctr.BackColor = Hex(c3)
ctr.ForeColor = Hex(c4)
End If
Next
frm.Detail.BackColor = Hex(c5)
frm.FormHeader.BackColor =Hex(c6)
frm.FormFooter.BackColor = Hex(c6)
End Sub

mazoolagh
چهارشنبه 24 مرداد 1403, 12:46 عصر
number بخاطر تابع hex که اونم باید کانورت بشه به عدد
میتونین با تابع rgb مقدار هر مولفه رنگ رو مشخص کنین:
RGB function (Visual Basic for Applications) | Microsoft Learn (https://learn.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/rgb-function)



شناسایی مشکل tag و چرا اینکهtag تو لیست هوشمند پراپرتی های کنترل + اسپیس نیست ؟
برای اینکه همه کنترل های فرم برخلاف name که حتما دارن، الزاما tag ندارن (پراپرتی های دیگه ای هم هست مثل forecolor و backcolor)
شما وقتی ابجکت رو control تعریف میکنین (عمومی) اینها در لیست پراپرتی ها نیست چون عمومی نیست.
ولی اگر کنترل رو معین و مشخص تعریف کنین (مثلا dim ctl as label) در لیست پراپرتی های اون tag دیده میشه (و backcolor و ...).

moustafa
چهارشنبه 24 مرداد 1403, 21:49 عصر
میتونین با تابع rgb مقدار هر مولفه رنگ رو مشخص کنین:
RGB function (Visual Basic for Applications) | Microsoft Learn (https://learn.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/rgb-function)



برای اینکه همه کنترل های فرم برخلاف name که حتما دارن، الزاما tag ندارن (پراپرتی های دیگه ای هم هست مثل forecolor و backcolor)
شما وقتی ابجکت رو control تعریف میکنین (عمومی) اینها در لیست پراپرتی ها نیست چون عمومی نیست.
ولی اگر کنترل رو معین و مشخص تعریف کنین (مثلا dim ctl as label) در لیست پراپرتی های اون tag دیده میشه (و backcolor و ...).

عرض سلام وادب خدمت استاد گرامی
عارضم که اوش rgb بود وقتی میخوایم تابعش کنیم نیاز به شش تا رنگ داریم و 6*3=18 متغیر بنابراین hex دادم حال نمیدونم تو وی بی هم مثل پایتون این امکان هست که متغیر لیست یا تاپل یا آرایه سه عضوی پاس داده بشه . با تشکر

mazoolagh
پنج شنبه 25 مرداد 1403, 20:38 عصر
با سلام و احترام متقابل


وقتی میخوایم تابعش کنیم نیاز به شش تا رنگ داریم و 6*3=18 متغیر بنابراین hex دادم حال نمیدونم تو وی بی هم مثل پایتون این امکان هست که متغیر لیست یا تاپل یا آرایه سه عضوی پاس داده بشه

1- لیست که نداریم، array همیشه بوده و میتونین استفاده کنین.
2- tuple هم نداریم - در این مورد هم نیاز نیست چون دیتاهای شما از یک جنس هست.
3 - یک کلاس بنویسین و استراکچر دیتا خودتون رو تعریف کنین.

فرصت کنم یک تاپیک مستقل برای این 3 مورد (و موارد دیگه که اشاره نشد اینجا) میزنم و با مثال توضیح میدم.
این رو اگر فرصت شد یک تاپیک مستقل میزنم بیشتر توضیح میدم.

moustafa
جمعه 26 مرداد 1403, 10:08 صبح
با سلام و احترام متقابل



1- لیست که نداریم، array همیشه بوده و میتونین استفاده کنین.
2- tuple هم نداریم - در این مورد هم نیاز نیست چون دیتاهای شما از یک جنس هست.
3 - یک کلاس بنویسین و استراکچر دیتا خودتون رو تعریف کنین.

فرصت کنم یک تاپیک مستقل برای این 3 مورد (و موارد دیگه که اشاره نشد اینجا) میزنم و با مثال توضیح میدم.
این رو اگر فرصت شد یک تاپیک مستقل میزنم بیشتر توضیح میدم.
wowwwwwwwwwwww
نسل شما و جناب آقای بهرامی منقرض شده !!!! هم اکنون ابتدایی ترین چیزها رو با تدریس ویدوئی میفروشن یا اصلا دل و دماغ همفکری و همیاری رو ندارن
با آرزوی سلامت وخوشی و صلابت بر ای هر دودی شما بزرگوار

moustafa
جمعه 26 مرداد 1403, 11:23 صبح
با سلام و احترام متقابل



1- لیست که نداریم، array همیشه بوده و میتونین استفاده کنین.
2- tuple هم نداریم - در این مورد هم نیاز نیست چون دیتاهای شما از یک جنس هست.
3 - یک کلاس بنویسین و استراکچر دیتا خودتون رو تعریف کنین.

فرصت کنم یک تاپیک مستقل برای این 3 مورد (و موارد دیگه که اشاره نشد اینجا) میزنم و با مثال توضیح میدم.
این رو اگر فرصت شد یک تاپیک مستقل میزنم بیشتر توضیح میدم.
برای مورد 3 این ساختار بنطرم اومدم یک رشته با سه عددتفکیک با کاما به اسم مثلا StrArray

Private Sub btnStrArray_Click()
X = "240,0,6"
Y = Split(X, ",")
Me.Detail.BackColor = RGB(Y(0), Y(1), Y(2))
End Sub

moustafa
جمعه 26 مرداد 1403, 20:27 عصر
Public Function changecolor(frm As Form, DetailCoclor As Variant, FooterColor As Variant)
frm.Detail.BackColor = RGB(DetailCoclor(0), DetailCoclor(1), DetailCoclor(2))
frm.FormHeader.BackColor = RGB(FooterColor(0), FooterColor(1), FooterColor(2))
frm.FormFooter.BackColor = RGB(FooterColor(0), FooterColor(1), FooterColor(2))
End Function

و فراخوانی تابع


Private Sub btnStrArray_Click()
c1 = Array(7, 247, 147)
c2 = Array(247, 47, 207)
Call changecolor(Me, c1, c2)
End Sub