ورود

View Full Version : روشن شدن متن



tehran2009
سه شنبه 09 مهر 1387, 11:27 صبح
یه افکتی می خوام که وقتی موس روی نوشته بره نوشته روشن بشه.

f.nabavi
سه شنبه 09 مهر 1387, 12:03 عصر
سلام. با این کد میتونی رنگ رو عوض کنی...

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = vbRed
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = vbBlack
End Sub

maryamb
سه شنبه 09 مهر 1387, 14:13 عصر
البته من اینجوری شو استفاده می کنم:


Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

if Label1.ForeColor = vbBlack then
Label1.ForeColor = vbRed
else
Label1.ForeColor = vbBlack
end if
End Sub

f.nabavi
سه شنبه 09 مهر 1387, 14:57 عصر
maryamb عزیز، با این کدی که شما نوشتی وقتی موس روی محدوده خود labelحرکت میکنه هی رنگ عوض میشه و پرش داره و وقتی موس روی قسمتهای دیگه میره ممکنه label قرمز باشه و دیگه حالت rollover از بین میره.

tehran2009
سه شنبه 09 مهر 1387, 15:52 عصر
اگه دیگه هم هست بزارید ممنون میشم البته با پروژه های وی بی باشه بهتره

r0ot$harp
سه شنبه 09 مهر 1387, 17:06 عصر
اگه دیگه هم هست بزارید ممنون میشم البته با پروژه های وی بی باشه بهتره

دوست عزیز اینجا انجمن VB هست . پس کد ها هم کدهای VB هست .


حالا مشکل شما کاملا حل شد یا نه ؟




باتشکر احسان

hamed aj
سه شنبه 09 مهر 1387, 17:54 عصر
سلام دوست عزیز

روش هایی که دوستان عزیزم اشاره کردن اگر چه کار می کند ولی در بعضی موارد با خطا مواجه می شود. مثلاً وقتی که کاربر بر روی لیبل move کند طبیعتاً رنگ نوشته تغییر می کند ولی اگر با سرعت زیاد کرسر ماوس را به محلی دیگر غیر از خود فرم انتقال دهد (مثلاً به قسمتی از desktop که شامل فرم نیست)، رنگ نوشته به حالت عادی بر نمی گردد و مواردی از این قبیل. چرا که رویداد mouse_move در کنترل فرم اجرا نشده است که رنگ نوشته را به حالت عادی بازگرداند.

پیشنهاد من استفاده از یک تایمر با خاصیت interval = 10 در فرم است که با استفاده از مختصات طولی و عرضی کرسر ماوس این مشکلات را برطرف می کند :








Private Sub Timer1_Timer()

Dim cx As Single, cy As Single

GetCursorPos cp
cx = cp.X * Screen.TwipsPerPixelX
cy = cp.Y * Screen.TwipsPerPixelX


If ((cx >= frmMain.Left + frmMain.lblAbout.Left) And (cx <= frmMain.Left + frmMain.lblAbout.Left + frmMain.lblAbout.Width) _
And (cy - 400 >= frmMain.Top + frmMain.lblAbout.Top) And (cy - 400 <= frmMain.Top + frmMain.lblAbout.Top + frmMain.lblAbout.Height)) Then
frmMain.lblAbout.Font.Bold = True
frmMain.lblAbout.ForeColor = &HFFFF00
Else
frmMain.lblAbout.Font.Bold = False
frmMain.lblAbout.ForeColor = &HFF0000
End If

End Sub







البته نیاز هست که تابع اون رو هم در بخش اعلانات فرم (General Declaration) تعریف کنید :







Private Type POINTAPI
X As Long
Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" ( _
lpPoint As POINTAPI) As Long





راستی نماز و روزه ی همه دوستان قبول باشه

موفق باشید

Armin060
سه شنبه 09 مهر 1387, 18:26 عصر
با Timer خوب نيست. سرعت كم ميشه. كد اولی از همه بهتره. البته سرعت رو باز كم ميكنه ولي بهترين اين كد ها بود. هيچ مشكلی هم مثل قرمز موندن رو نداره. اين مشكل از كامپيوتر شماست كه كنده نه كد.

r0ot$harp
چهارشنبه 10 مهر 1387, 00:14 صبح
با Timer خوب نيست. سرعت كم ميشه. كد اولی از همه بهتره. البته سرعت رو باز كم ميكنه ولي بهترين اين كد ها بود. هيچ مشكلی هم مثل قرمز موندن رو نداره. اين مشكل از كامپيوتر شماست كه كنده نه كد.

دوست عزیز این حرف کاملا غیر اصولی هست .


شما از کجا می دونین همه ی PC ها مثل PC شما پر قدرت و سرعت بالا هستند ؟


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





باتشکر احسان

f.nabavi
پنج شنبه 11 مهر 1387, 08:26 صبح
نکته ای که دوستمون hamed aj اشاره کردن کاملا درسته. این اتفاق نه فقط به خاطر کندی سیستم بلکه به خاطر نزدیک بودن کنترل ها هم می افته. مثلا وقتی دو تا لیبل به هم چسبیدن. راه حلش اینه که کنترل ها به صورت آرایه تعریف کنیم، ایندکس آخرین کنترلی رو که موس روش رفته رو نگه داریم و هر بار که موس روی مجموعه کنترل رفت کنترل با ایندکس قبلی رو به حالت عادی دربیاریم. ازکد hamed aj عزیز نمیشه استفاده کرد. چون اگر تعداد کنترل ها زیاد بشه قابل استفاده نیست.

hamed aj
پنج شنبه 11 مهر 1387, 18:09 عصر
سلام دوستان

ببینید دوستان، کدی که من نوشتم توی یه برنامه که روی فرمش حدود 20 تا کنترل بدین شکل بود روی یک سیستم P2 با CPU 500Mhz تست کردم و هیچ مشکلی هم نبود. روش کار هم بدین شکل هست که شما برای هر کنترل جدید فقط قسمت if کد بالا رو در همون تایمر کپی می کنید و نام کنترل رو به نام کنترل جدید تغییر می دید.

در مورد روش استفاده از آرایه کنترل ها (ایندکس) که دوست عزیزم f.nabavi بهش اشاره کردن، در صورتی که نوع کنترل ها متفاوت باشد (مثلاً label و Button و . . . ) جوابگو نیست.

f.nabavi
شنبه 13 مهر 1387, 08:52 صبح
سلام. hamed aj عزیز من منظورم این نبود که کد شما مشکل داره... ولی وقتی تعداد کنترل ها زیاده از اونجایی که باید مختصات کنترل ها رو نگه داری به صرفه نیست. در مورد استفاده از ایندکس... وقتی یه برنامه مینویسیم که تو هر فرم 40 تا کنترل باید خاصیت rollover داشته باشند، تقسیم بندی اونها به label یا image کار سختی نیست. یعنی تنها راه ممکنه...