ورود

View Full Version : مشکل در تغییر رنگ اکتیو ایکس



MMR_1344
پنج شنبه 25 شهریور 1389, 19:36 عصر
با سلام
برنامه ساخت کلید رو که در حال نوشتنم پیوست کردم در این اکتیوایکس دو مشکل وجود داره
1 - اولین مشکل اینه که من برای تعیین رنگ کلید متغیری به نام ChangeColorKey تعریف کردم که متاسفانه نمیشه در برنامه اون رو تغییر داد
2 - همینطور برای رنگ نوشته هم هیچ تغییری ایجاد نمشه
تعریف هر دو متغیر گفته شده در بالا از نوع OLE_COLOR هستن
اگر ممکنه منو راهنمائی کنید متشکر میشم

parselearn
پنج شنبه 25 شهریور 1389, 22:45 عصر
كامپوننت شما تغيير رنگ و ذخيره ميكنه
فقط شما از متغيير ها استفاده نكرديد
نمونه m_ChangeColorKey

در ضمن براي نمايش صحيح بايد كدها را در رويدادهاي
UserControl_ReadProperties
UserControl_Show
در صورت لزوم فراخواني كنيد

MMR_1344
جمعه 26 شهریور 1389, 10:20 صبح
با تشکر
اما من متوجه نشدم منظور شما از "متغیرها استفاده نکردید" چیه ؟
من رویداد Usercontrol_ReadProperties رو در برنامه استفاه کردم
اگر امکان داره اون قسمتهای لازم که باید اصلاح بشن رو برام نمایش بدین ممنون میشم

parselearn
جمعه 26 شهریور 1389, 11:42 صبح
شما يك متغيير به نام m_ChangeColorKey براي تغيير رنگ اصلي كليد تعريف كرديد

UserControl.BackColor = vbGreen
تبديل ميشه به
UserControl.BackColor = m_ChangeColorKey
البته اگر براي اين كار باشه

هنگامي كه شما فرم را در محيط برنامه نويسي بسته ايد و قصد باز كردن آن را داريد رويداد UserControl_ReadProperties اجرا ميشود
زيرا قصد خواندن اطلاعات (متغييرها، پروپرتي ها) را دارد


Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_OnPressedBackColor = PropBag.ReadProperty("OnPressedBackColor", m_def_OnPressedBackColor)
m_ChangeColorText = PropBag.ReadProperty("ChangeColorText", m_def_ChangeColorText)
m_ChangeColorKey = PropBag.ReadProperty("ChangeColorKey", m_def_ChangeColorKey)

UserControl.BackColor = m_ChangeColorKey
End Sub


حالا وقتي شما پروپرتي رو تغيير بديد. هيچ كدوم از رويدادهاي كنترل اجرا نميشه
پس بايد فقط كد در جايي فراخواني بشه كه متغير تغيير كرده


Public Property Let ChangeColorKey(ByVal New_ChangeColorKey As OLE_COLOR)
m_ChangeColorKey = New_ChangeColorKey
UserControl.BackColor = m_ChangeColorKey
PropertyChanged "ChangeColorKey"
End Property

در صورتي كه كنترل عمليات زيادي رو انجام نميده
بهتره يك روتين رو در پروپرتي ها و رويدادها فراخواني كنيد
و تمام تغييرات را در آن بنويسيد
در غير اين صورت بايد تك تك پروپرتي ها هنگام تغيير اعمال بشن

MMR_1344
جمعه 26 شهریور 1389, 19:04 عصر
دوست خوبم
تغییرات گفته شده رو در برنامه انجم دادم اما د اول برنامه اگر رنگ رو هم تغییر بدم کلید به رنگ اولیه هست

parselearn
جمعه 26 شهریور 1389, 19:33 عصر
شما بايد m_ChangeColorKey در اينجا ChangeColorKey استفاده كنيد. در صورتي كه در اينجا ChangeColorText استفاده كرديد!

و همچنين UserControl_ReadProperties نه UserControl_WriteProperties

در رويداد UserControl_Show هم فراخواني كنيد. بهتره

MMR_1344
جمعه 26 شهریور 1389, 20:24 عصر
با تشکر
مشکل حل شد اما میخواستم بدونم توی برنامه من اینکاری که شما فرموده بودید رو برای OnPressedBackColor انجام نداده بودم اما کار تغییر رنگ رو انجام میداد
و کلاً آیا باید برای تمامی تغییراتی که برای کلید مورد نظر انجام میدیم اینکار رو نیاز داره یعنی برای تغییر رنگ نوشته هم اینکار لازمه و چرا؟
متشکرم

parselearn
جمعه 26 شهریور 1389, 23:36 عصر
با تشکر
مشکل حل شد اما میخواستم بدونم توی برنامه من اینکاری که شما فرموده بودید رو برای OnPressedBackColor انجام نداده بودم اما کار تغییر رنگ رو انجام میداد
و کلاً آیا باید برای تمامی تغییراتی که برای کلید مورد نظر انجام میدیم اینکار رو نیاز داره یعنی برای تغییر رنگ نوشته هم اینکار لازمه و چرا؟
متشکرم
شما بايد ببينيد كدام متغيير كجا نياز به اعمال دارد
متغيير m_OnPressedBackColor در حالت ديزاين اصلا استفاده اي ندارد
در حالت اجرا هم فقط هنگام Down هست

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

MMR_1344
جمعه 26 شهریور 1389, 23:53 عصر
اگر کامپونت بهتر برای کنترل دارید متشکر میشم برام ارسال کنید