واضح آرشیو وب فارسی:سایت ریسک: majid_kntu24-06-2006, 09:53 PMاز اولين باري كه با VB 6 آشنا شدم با شكل ظاهري كنترل هاي آن مشكل داشتم تا اينكه بعد ها با زير و رو كردن MSDN راه حلي براي رفع اين مشكل پيدا كردم: "استفاده از اعلانيه وابستگي ها" تا اينكه چند تا از بچه هاي دانشگاه ازم پرسيدن چرا VB 6 مثل VB.NET نگارش 2005 خود به خود از نگارش جديد كنترل ها استفاده نمي كنه . بعد از صحبت و تبادل نظر به اين فكر افتادم اين مقاله رو بنويسم تا علاقه مندان وي بي بخونن . به عكس هاي زير نگاه كنين: http://i5.tinypic.com/15hd 5s0.gif http://i3.tinypic.com/15hd 6c3.gif يكي تصوير يه برنامه با اعلانيه است و اونيكي تصوير همون برنامه بدون اعلانيه. اگه دوست داريد برنامه هاتون باسبك اكس پي يا هر Theme ديگه اي كه در اكس پي قابل نصبه اجرا بشه مراحل زير رو انجام بدين 1-Start up Object پروژتون رو به Sub Main تغيير بديد. 2- يه مدول به برنامتون اضافه كنين و كد زير رو توش وارد كنيد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در كد بالا فرض براين است كه شي آغازين قبلي شما Form1بوده است. 3- پروژه خود را كامپايل كنيد. 4- مثال ضميمه را از لينك زير دريافت كنيد و فايل Project1.exe.manifest را از آن كپي كرده در كنار برنامه كامپايل شده خود قرار دهيد و سپس نام آنرا تغيير دهيد و به جاي Project1 نام برنامه خود را تايپ كنيد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اين تغير نام خيلي مهم است چراكه اكس پي هنگام اجراي يك برنامه در پوشه آن بدنبال اعلانيه آن خواهد گشت تا بدين ترتيب وابستگي هاي برنامه را به همراه نگارش آنها شناسايي كند .اين پروسه در راستاي پياده سازي پروژه اسمبلي هاي پهلو به پهلو انجام مي گيرد كه بحث در باره آن در اين مقوله نمي گنجد. البته اين رو هم بگم نتيجه كار رو تو محيط IDE وي بي نمي تونيد ببينيد كه البته اين هم راه داره.كافيه يه اعلانيه براي vb 6.exe تو پوشه محل نصب قرار بديد البته اين به معني عدم نياز برنامه هاي نوشته شده توسط اون به اعلانيه نيست. این فایل اکس ام ال می تواندشامل برچسب هایی برای قرار دادن توصیف ونام برنامه شما باشد که اختیاری هستند وآنها رابرای درک بهتر مطلب حذف کرده ام. این کار ممکن است عواقب ناخواسته ای درپی داشته باشد مثلا برای یک دکمه رادیویی که در یک قاب قرار گرفته باشد(به مثال پیوست شده رجوع کنید) سی پلاس پلاس دارای امکاناتی است که به کمک آنها می توان اعلانیه را در فایل اجرایی قرار داد تا به این ترتیب هر کجا که فایل اجرایی قرار گرفت اعلانیه به همراه آن باشد که این مزایای خاص خود را دارد. بعد از کمی تحقیق و تفحص متوجه شدم در وی بی هم می توان اعلانیه را مثل زبان سی پلاس پلاس به صورت ماخذ به فایل اجرایی پیوست کردبدلیل پیچیده بودن مراحل کار روش اونو شرح نمیدم . براي اينكه اعلانيه برنامه هميشه همراه برنامه تون باشه بهتره اونو به شكل resource به برنامه پيوست كنيد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! navid_mansour25-06-2006, 01:26 AMچرا برای microsoft comon contorls 6 جواب نمیده این کد؟ majid_kntu25-06-2006, 06:07 PMمن حدس ميزنم منظور شما كنترل هايي مثل TabStrip يا نگارش هاي پيشرفته تر كنترل هايي مثل Progressbar باشد.همانطور كه در كد مثال نوشته ام تابع API ي مربوطه از Comctl32 فراخواني ميشود و براي تعريف وابستگي به Microsoft windows common controls 6 sp4 (كه احيانا منظور شماست) بايد كل قطعه كد مربوط به Intialize كنترل ها را تغيير داد.در مثال ضميمه ما فقط به اكس پي ميگوييم كه از نگارش 6 فايل comctl32.ocx استفاده كند و درباره mscomctl.ocx چيزي اعلان نكرده ايم. navid_mansour26-06-2006, 02:27 AMمیشه بیشتر توضیح بدی؟؟؟؟ shahabmusic26-06-2006, 03:04 AMاگه اينطوري برنامه رو بنويسم بعد توي ويندوز 98 اجرا مي شه؟؟؟ navid_mansour26-06-2006, 03:29 AMفکر نکنم,هر ویندوزی با سبک خودش اجرا میشه majid_kntu26-06-2006, 08:10 PMحدست درسته!هر نگارشي از ويندوز با سبك خودش برنامه را اجرا مي كند . مثلا Vista يا 98. اين را هم بگويم كه در محيط ويندوز خيلي چيزها هستند كه از آنچه به نظر مي رسند پيچيده ترند.مثلا ممكن است اين شبه پيش بياد كه روش بالا درمورد هر كنترلي كه در ويندوز مي بينيد جواب بدهد. ولي حقيقتش اينه كه ما مي تونيم حتي يك سبك مخصوص خودمون رو طراحي كنيم وبا روشي مشابه برنامه رو وادار كنيم از Texture هايي كه براش تعريف كرديم استفاده كنه كه البته راستش رو بخواهيد هنوز خودم امتحانش نكردم. بعدش اينرو هم اضافه كنم كه اگر Intialize رو مثل مثال بدرستي انجام داده باشيد هيچ مشكل سيستماتيكي براي برنامه ايجاد نميشه. پس هيچ نگراني درباره اجرا مثلا در 98 نداشته باشيد. البته انتظار ديدن سبك اكس ژي رو تو 98 نداشته باشيد. navid_mansour26-06-2006, 10:13 PMبرای microsft common controls 6 توضیح ندادی؟میشه لطف کنی؟ majid_kntu27-06-2006, 09:19 PMببين اين روش فقط قادره كنترل هايي رو كه در comctl32 هستند رو تغيير بده و براي هر كنترل ديگه اي كه در اين فايل نباشه اين روش بي تاثيره . واضح تر بگم تو IDE وي بي كليد تركيبي Ctrl+T رو بزن Microsoft Windows Common Controls 5 رو انتخاب كن . در قسمت Location آدرسي مثل آدرس زير ميبيني c:windowssystem32comctl32.ocx در واقع وي بي به طور پيش فرض از نگارش 5 اين فايل استفاده مي كنه. به خاطر خصلت نسل اكس پي در يك ويندوز هر دو نگارش 5 و 6 اين فايل وجود داره و برنامه ها انتخاب مي كنن كه از كدوم نسخه استفاده كنن. همانطور كه گفتم برنامه هاي كامپايل شده با وي بي 6 به طور پيش فرض از نگارش 5 استفاده مي كنن. در اين مثال هم ما اونو وادار مي كنيم تا از نگارش 6 فايل comctl32 استفاده كنه . بنابراين من منظور شما از Microsoft Common Controls 6 رو متوجه نمي شم!!!! اگه مي شه يكي از كنترل هايي كه به نظر شما اين مثال در مورد اون جواب نميده رو نام ببريد.به ياد داشته باشيد كه كنترلي رو كه مي خواهيد مثال بزنيد بايد تو فايل comctl32.ocx باشه... Blue Rose28-06-2006, 05:10 AMسلام قبلا توضیح داده شده بود majid_kntu02-07-2006, 06:21 AMلطفاًاز مبحث گفتگو خارج نشويد و سولات خود را واضح بيان كنيد! سمیرا6206-07-2006, 05:08 AMچي قبلاً توضيح داده شده بود؟ shahabmusic10-07-2006, 03:35 PMممنون درست اجرا شد ولي كاش راهي براي اجراي همه ابزارهاي ايكس پي وجود مي داشت. مرسي.ممنون. taghi_ramzi13-07-2006, 04:52 PMخیلی عذر میخام تو فایل comctl32.ocx ما اصلا کنترلهایی که شما بالا تو عکس گذاشتی نیست این عکس رو ببینید : http://pixhost.eu/share/2006-07-13/untitled 2.jpg (http://pixhost.eu/show_big.php?id=31812) همونطور که تو این عکس میبینید فایل comctl32.ocx شامل کنترلهایی میشه که من دورش خط کشیدم ! قضیه چیه ؟ Payman_6214-07-2006, 01:33 AMکدوم عکس رو میگی؟ هنگام تبدیل استایل برنامه به ایکس پی هم کنترل های خود ویبی تغییر میکنن هم common controls taghi_ramzi14-07-2006, 12:34 PMاصلا همچین اتفاقی نمیفته !!!! Payman_6214-07-2006, 03:10 PMپس یه جای کار رو اشتباه انجام دادی. majid_kntu14-07-2006, 05:01 PMبراي رفع هر گونه ابهام درباره كنترل ها به تصاوير زير نگاه كنيد: http://i1.tinypic.com/1zxxx7l.jpg اميدوارم متوجه مطلب شده باشيد. majid_kntu14-07-2006, 05:08 PMاگر مي خواهيد تغيرات را در IDE وي بي هم مشاهده كنيد پرونده زير را با حجم 1 كيلوبايت دانلود كنيد: XP visual style for vb 6 IDE (http://www.esnips.com/doc/d 30abec1-c267-4501-9081-a 10c1b 997ce8/VB 6.zip) بعد از Unzip كردن پرونده vb 6.exe.manifest رو در محلي كه vb 6.exe قرار دارد (محل نصب ويژوال بيسيك 6 يه چيزي مثل : c:Program FilesMicrosoft Visual StudioVB 98 ) قرار دهيد.با اجرا مجدد وي بي نتيجه را ملاحظه كنيد. سمیرا6219-07-2006, 01:25 PMمن این روش رو روی چند برنامه کامپایل شده اجرا کردم ولی بعضیاشون دیگه اجرا نمیشن.چرا؟ shahabmusic19-07-2006, 01:37 PM1-Start up Object پروژتون رو به Sub Main تغيير بديد. 2- يه مدول به برنامتون اضافه كنين و كد زير رو توش وارد كنيد: Declare Sub InitCommonControls Lib "comctl32" () Sub Main() InitCommonControls Form1.Show End Sub user32. مال منم هيچ وقت درست نميشد ولي از وقتي اين كدو اضافه كردم مشكل حل شد. Payman_6219-07-2006, 03:12 PMسلام. خوب قسمت مهم کار همینه دیگه. orange19-07-2006, 04:57 PMسلام دوستان خسته نباشد. آيا مي توان اين كار را براي Common Controls 6 هم انجام داد؟ majid_kntu19-07-2006, 05:20 PMانتظار نداشته باشيد كه هر فايل exe اي به كمك اين روش از كنترل هاي اكس پي استفاده كنه چرا كه قبل از هر چيزي كنترل ها بايد تو حافظه بار بشن واين كار توسط تابع API با نام InitCommonControls انجام ميشه .بايد بگم اين مهمه كه اين تابع ( يا به قول برنامه نويساي وي بي ساب روتين) كجا فراخوني بشه مثلا اگه اونو تو رويداد Form_Load فراخوني كنيد موقع اجرا پيغام خطا دريافت مي كنيد و برنامه بسته ميشه. majid_kntu21-07-2006, 07:39 PMOrange عزيز فكر كنم راه حل مشكلتو بتوني تو كامنت هاي قبلي همين تاپيك پيدا كني .براي جلو گيري از زياده گويي جوابتو نميدم ولي اگه نتونستي جوابتو تو اونا پيدا كني يه كامنت ديگه اينجا بذار. ممنون! majid_kntu21-07-2006, 07:41 PMيعني اين روش ذاتاً براي Microsoft Common Controls 6 است. سمیرا6222-07-2006, 07:21 PMمجيد جان از مطلب خوبت ممنونم.اميدوارم بتونيم چيزاي بيشتري ازت ياد بگيريم. سمیرا6222-07-2006, 07:23 PMمنظورتون از Microsoft Common Controls6 چيه؟؟ Ali-Bahal22-07-2006, 10:02 PMتنکیو majid_kntu23-07-2006, 08:22 AMدوستان به اين وسيله اصلاح مي كنم.ويژوال بيسيك دات نت 2005 از سيستم كاملا متفاوتي براي پياده سازي كنترلهاش استفاده مي كنه و ربطي به اين تكنيك نداشت.اگه دچار سو تفاهم شديد بايد بگم اون از .Net Framework 2.0 استفاده مي كنه. majid_kntu26-07-2006, 11:42 PMبراي توليد اعلانيه از برنامه زير كه هر چند كامل نيست ولي كار مي كنه استفاده كنيد. http://www.esnips.com/doc/7e70ae81-4bcf-447b-b 9b 9-fae189609188/Styler.zip majid_kntu26-07-2006, 11:44 PMقبل از استفاده از برنامه بالا مطمئن شويد مراحل شرح داده شده در كد برنامه خود را بدرستي انجام داده ايد سمیرا6227-07-2006, 06:37 PMكمك! برنامه بالا رو روي يه فايل اجرا كردم ديگه باز نميشه error مي زنه majid_kntu07-08-2006, 07:48 PMكمك! برنامه بالا رو روي يه فايل اجرا كردم ديگه باز نميشه error مي زنه فايل اعلانيه آن را پاك كنيد يا تغير نام دهيد majid_kntu22-02-2008, 05:44 PMاين تاپيكو خيلي وقت پيش زدم! يادم رفته بود اينو هم اضافه كنم. براي اينكه اعلانيه برنامه هميشه همراه برنامه تون باشه بهتره اونو به شكل resource به برنامه پيوست كنيد. براي اينكار از برنامه زير استفاده كنيد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! طرز كارش سادس توضيح نمي دم. به اين ترتيب ديگه با جابجا شدن EXEيا DLL اعلانيه برنامه غير فعال نميشه. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1328]