PDA

View Full Version : مشکل در استايل Xp براي Ms Windows Common Control 6.0 (msComCtl.ocx)+ Frame Control



حمید محمودی
یک شنبه 25 مرداد 1388, 02:13 صبح
با سلام خدمت دوستان محترم

کامپوننت Ms Windows Common Control 5.0 (Comctl32.ocx) به خوبي از استايل ويندوز پشتيباني ميکند اما نميدونم چرا Ms Windows Common Control 6.0 (msComCtl.ocx) از استايل ويندوز پشتيباني نميکند.

همچنين تمامي کنترل ها بجز کنترل فريـــــــــــــم از استايل ويندوز پشتيباني ميکنند.يه بار به طور اتفاقي بود که فريم هم مثل استايل ويندوز شده بود. نميدونم جرا فقط همون يه بار بود.


من .Manifest و تابع InitCommonControls استفاده ميکنم.


راهي هست براي رفع اين مشکل.ويندوزم xp هستش.

با تشکر

mmssoft
پنج شنبه 29 مرداد 1388, 02:13 صبح
فکر نکنم بشه استایل کامپوننت Windows Common Control رو مثل استایل ویندوز کرد. manifest هم فقط برای ابزارهای خود ویژوال بیسیک که در تولبار هستند کار میکنه.

حمید محمودی
جمعه 30 مرداد 1388, 00:15 صبح
فکر نکنم بشه استایل کامپوننت Windows Common Control رو مثل استایل ویندوز کرد. manifest هم فقط برای ابزارهای خود ویژوال بیسیک که در تولبار هستند کار میکنه.

راستش یه بار نمیدونم چی شد که اتفاقی frame هم مثل استایل ویندوز شده بود

اما دیگه نشد میدونین مشکل از کجاست؟؟؟

mmssoft
جمعه 30 مرداد 1388, 00:37 صبح
این فایل رو دانلود کنید و فایل manifest درون اون رو در پوشه نرم افزار ویژوال بیسیک در آدرس
Program Files\Microsoft Visual Studio\VB98 قرار بدید.
ولی این کار در ظاهر استایل پروژه شما را تغییر میده و وقتی اون کامپایل میکنید کنترل ها به شکل کنترل خود VB هستند.
برای حل این مشکل از این راه حل استفاده کنید :
کد زیر را در بخش General قرار دهید :

Option Explicit
Private Declare Function InitCommonControls Lib "comctl32.dll" () As Long

کد زیر رو هم در بخش Initialize فرم کپی کنید :

InitCommonControls

و بعد از این پروژه خودتون رو کامپایل کردید باید همون فایل manifest رو با نام فایل EXE برنامتون در کنار فایل EXE خود برنامه قرار بدید.
مثلا اگر اسم فایل Exe برنامه شما MyProg است باید یک فایل manifest با نام MyProg.exe.manifest در کنار برنامتون قرار بدید.

موفق باشید/

حمید محمودی
جمعه 30 مرداد 1388, 00:57 صبح
خیلی ممنون ولی منم این کارو کرده بودم ولی باز جواب نداده بود

همن الانشم همینجوری هستش اما فریم مثل استایل ویندوز نشده

mmssoft
جمعه 30 مرداد 1388, 01:05 صبح
خیلی ممنون ولی منم این کارو کرده بودم ولی باز جواب نداده بود

همن الانشم همینجوری هستش اما فریم مثل استایل ویندوز نشده

فریم خودش همین استایل رو همیشه داره و هیچ تغییری هم نمیکنه. چه از manifest استفاده کنید چه نکنید.
حتما شما میخواین فریمتون مثل GroupBox دات بشه؟ :متعجب: ممکن نیست. البته تا جایی که من میدونم.

حمید محمودی
جمعه 30 مرداد 1388, 01:13 صبح
فریم خودش همین استایل رو همیشه داره و هیچ تغییری هم نمیکنه. چه از manifest استفاده کنید چه نکنید.
حتما شما میخواین فریمتون مثل GroupBox دات بشه؟ :متعجب: ممکن نیست. البته تا جایی که من میدونم.

آفرین منظورم همین بود اما باور بکنید یه بار برام شد. نمیدونم چطوری اما....

راستی نمیدونم کجا بود که این مطلبو گیر اوردم اما برای من که جواب نداد واسه شما چطور؟؟
نوشته خودم نیستش.


با روش زير در اثر موارد درست شده است :
خوب براي حل اين مشكل شما بايد comctl32 را دوياره فعال كنيد به اين صورت
وارد فولدر
Code:

%windir%\Prefetch

سپس دنبال فايلي با نام layout بگرديد اين فايل را با notepad باز كنيد دنبال فايلي به نام
comctl32.dll بگرديد
مسير اجرا شدن اين فايل يكي بايد در شاخه system32 و ديگري در مسيري
Code:

C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS.....

يا شبيه ان باشد
چك كنيد ببنيد اين دو فايل در اين دو مسير داراي يك ورژن باشد و ورژن ان ها برابر و يا بالاتر از 6.0.2600.0
باشند
همچنين بالاي مسير دوم كه پيدا كرديد بايد يك فايل با پسوند .MANIFEST لود شده باشد
اگر نيست بايد بصورت دستي مسير ها اد شوند و يا فايل ها به روز شوند

بعد از مراحل بالا به احتمال زياد مشكل حل ميشود .

mmssoft
جمعه 30 مرداد 1388, 01:24 صبح
امتحان کردم. برای من هم جواب نداد.

حمید محمودی
جمعه 30 مرداد 1388, 01:29 صبح
بعضی ها میگن بجای تابع InitCommonControls از InitCommonControlsEx استفاده بکن
اما روش زیر هم برام جواب نداد




' dddd
' dddd CCCCCCCCCC
' dddd CCCC
' dddddddddd CCCC aaaaaaaa mmmmmmmmmm mmmmmm eeeeeeee rrrr rr aaaaaaaa
' dddd dddd CCCC aaaa mmmm mmmm mmmm eeee eeee rrrrrrrr aaaa
' dddd dddd CCCC aaaaaaaaaa mmmm mmmm mmmm eeeeeeeeeeee rrrr aaaaaaaaaa
' dddd dddd CCCC aaaa aaaa mmmm mmmm mmmm eeee rrrr aaaa aaaa
' dddd dddd CCCC aaaa aaaa mmmm mmmm mmmm eeee rrrr aaaa aaaa
' dddddddddd CCCCCCCCCC aaaaaaaaaa mmmm mmmm mmmm eeeeeeeeee rrrr aaaaaaaaaa



Private Type tagInitCommonControlsEx
lngSize As Long
lngICC As Long
End Type
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" _
(iccex As tagInitCommonControlsEx) As Boolean
Private Const ICC_USEREX_CLASSES = &H200

Public Function InitCommonControlsVB() As Boolean
On Error Resume Next
Dim iccex As tagInitCommonControlsEx
' Ensure CC available:
With iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
End With
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
On Error GoTo 0
End Function

Public Sub Main()
InitCommonControlsVB

'
' Start your application here:
'
frmmanifest.Show
End Sub

mmssoft
جمعه 30 مرداد 1388, 01:53 صبح
برای من هم کار نکرد. System Error داد.
راستی چرا شما کلی فکر نمیکنید، وقتی فریم VB به هیچ شکلی قابل تغییر نیست دیگه از هر روشی که میخوای استفاده کن.

حمید محمودی
جمعه 30 مرداد 1388, 02:02 صبح
برای من هم کار نکرد. System Error داد.
راستی چرا شما کلی فکر نمیکنید، وقتی فریم VB به هیچ شکلی قابل تغییر نیست دیگه از هر روشی که میخوای استفاده کن.

آخه اگه یه چیزی سوال بشه برام سخته که از کنارش ساده بگذرم!!
اینکه میفرمایین قابل تغییر نیست . اما هست چون خودم دیدم (روی 2 تا کامپوتر مختلف ) با اضافه کردن فایل .manifest به شگل groupbox در اومده بود.

حتما یه جای کارمون گیر داره که اینطوری میشه

دوستان دیگه میتونن کمک کنن؟؟؟

خیلی ممنون

mmssoft
جمعه 30 مرداد 1388, 02:07 صبح
اینکه میفرمایین قابل تغییر نیست . اما هست چون خودم دیدم (روی 2 تا کامپوتر مختلف ) با اضافه کردن فایل .manifest به شگل groupbox در اومده بود.

من چندین برنامه نوشتم که تو همشون هم از Frame و manifest استفاده کردم ولی یکبار هم ندیدم Frame شکل GroupBox در بیاد. حالا شما رو نمیدونم.


حتما یه جای کارمون گیر داره که اینطوری میشه
فکر نکنم اشکالی وجود داشه باشه.

حمید محمودی
جمعه 30 مرداد 1388, 02:19 صبح
من چندین برنامه نوشتم که تو همشون هم از Frame و manifest استفاده کردم ولی یکبار هم ندیدم Frame شکل GroupBox در بیاد. حالا شما رو نمیدونم.


منم هم همینطور فقط همون یه بار روی کامپوتر خودم و یه بار روی کامپوتر دانشگاه دیدم شد
راستش اون موقع زیاد برام مهم نبود تا ردشو بگیرم که چه تغییراتی روی ویندوز انجام دادم برای همین دیگه مدرکی در دستم نیست.


فکر نکنم اشکالی وجود داشه باشه.


انشاالله راه حلی وجود داشته باشه؟؟


متشکرم

حمید محمودی
یک شنبه 01 شهریور 1388, 00:09 صبح
میگم frame مثل groupbox شده بود میگشن نه؟

اینجارو ببینین

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=36043&lngWId=1

اون برنامه نویسش گفته که خود فریم یه سری مشکلاتی با تم ویندوز داره که من برطرفش کردم و به جاش شما میتونین از groupbox که من ساختم استفاده بکنین

اما عکس رو که نگاه بکین میبینین که فریم هم مثل تم ویندوز شده

http://www.planet-source-code.com/upload_PSC/screenshots/PIC20026191626313199.jpg

لطفا نظرتونو بگین


متشکرم

mmssoft
یک شنبه 01 شهریور 1388, 06:39 صبح
خیلی خوبه. ممنونم که این لینک رو معرفی کردید. تو دنیای کامپیوتر هیچ چیز غیرممکن نیست.
به هر حال ببخشید که گفتم این کار امکان پذیر نیست.

M.T.P
چهارشنبه 01 اردیبهشت 1389, 11:02 صبح
با سلام
با توجه به اینکه زمان زیادی از تاریخ این تاپیک میگذره و من تازه اونو دیدم باید خدمت شما دوست عزیزمون و همچنین کسایی که دوست دارن دلیل این مشکل رو بدونن برسونم که فکر نکنم هیچ کس اندازه من با vb6 جهت اعمال تم و گرافیک کار کرده باشه:بامزه:

و اما مشکل کنترل Frame اینه که شما درست میفرمایین این کنترل هم مثل بقیه کنترل ها میتونه تم ویندوز رو به خودش بگیره منتها به شرط و شروطی...

اگه برنامه تون زبانش فارسی هست که هیچ ، بی خیاله اعمال تم به Frame باشین چون تا وقتی که vbame.dll رو تو System32 دارین هیچ وقت نمیتونین مثل GroupBox ببینیدش اما اگه برنامه تون به زبان و نوشتار فارسی احتیاج نداره (مخصوصا Right To Left) با حذف vbame.dll از پوشه System32 و اجرای برنامه خواهید دید که Frame شما حال و حواش عوض شده و به خودش اومده:قهقهه:

vbame.dll کارش اعمال صحیح نوشته فارسی و عربی به کنترل ها و همچنین امکان استفاده از خصوصیت Right to left هست.

خب اینم یه تجربه بود.:لبخند:
موفق باشید.

حمید محمودی
چهارشنبه 01 اردیبهشت 1389, 13:48 عصر
سلام. این تاپیک رو من یادم رفته بود.(چون خیلی وقته vb6 رو گزاشتم کنار)

خودمم قبلا به این نتیجه رسیده بودم و اینکه متاسفانه مشکل سیاه شدن کنترل هایی مثل Optionbutton که داخل فریم قرار دارن همچنان پابرجاست. برای رفع شدنشم من قبلا چندتا راه دیدیم 1-گزاشتن کنترل ها داخل picturebox و بعد قرار دادن این کنترل داخل فریم 2-استفاده از کنترل سفارسی (مثل همون نمونه user control که قبلا اشاره کردم) 3- repaint کردن کنترل های داخل فریم.

که سومی فکر بکنم بهتر بود....

ولی به هر حال ممنون از اینکه بحث رو کامل کردین . :تشویق:


فکر نکنم هیچ کس اندازه من با vb6 جهت اعمال تم و گرافیک کار کرده باشه


:متفکر: :متعجب:
------------------
ولی در مورد اعمال تم به Ms Windows Common Control 6.0 - msComCtl.ocx

من هنوز به نتیجه ای نرسیدم؟؟؟ شما چی؟؟

M.T.P
چهارشنبه 01 اردیبهشت 1389, 15:51 عصر
ولی در مورد اعمال تم به Ms Windows Common Control 6.0 - msComCtl.ocx

من هنوز به نتیجه ای نرسیدم؟؟؟ شما چی؟؟

خب چرا از comctl32.ocx یعنی Common Control 5.0 استفاده نمی کنید؟
کمبود هاشو بگین لطفا:لبخندساده:

حمید محمودی
چهارشنبه 01 اردیبهشت 1389, 18:14 عصر
خب چرا از comctl32.ocx یعنی Common Control 5.0 استفاده نمی کنید؟
کمبود هاشو بگین لطفا:لبخندساده:

تا اونجایی که یادم مونده وژن 6 این کنترل یکم امکاناتش بیشتر از ورژن 5 هست (البته میشه اون قسمت هایی که توی ورژن 5 نیست - و در ورژن 6 هستش - رو شبیه سازی کرد و با کد نویسی براش گزاشت )

اما اون موقع برام سوال بود که ایا راهی هست که تم رو به ورژن 6 هم اعمال کرد یا خیر؟

ولی در هر حال همین گیرهای کوچیک و برزگی vb6 برام ایجاد کرده بود برنامه نویسی توی این زبان رو گزاشتم کنار...

M.T.P
چهارشنبه 01 اردیبهشت 1389, 19:00 عصر
به هر حال اگه راهی واسش پیدا کردم حتما اینجا توضیح خواهم داد...:متفکر:
اینم یه مطلب مرتبط با این موضوع:لبخندساده:
http://barnamenevis.org/forum/showthread.php?t=213836