PDA

View Full Version : سوال: تغییر قیافه اشیاء فرمها به حالت قدیمی در دلفی 2010



جواد ملاولی
جمعه 10 آذر 1391, 16:20 عصر
باسلام.
به خاطر مشکلی که برای پروژه پیش آمده بود، فایل ریسورس پروژه (*.res) رو پاک کردم و پروژه رو دوباره Build کردم. اون مشکل برطرف شد ولی یه اتفاقی افتاد و اون اینکه تمام کنترلهای موجود روی فرمها شکل شون عوض شد و حالت قدیمی پیدا کرد.
چطور میشه درستش کرد؟ کسی در این زمینه تجربه ای داره؟

Felony
جمعه 10 آذر 1391, 16:28 عصر
از سربرگ Win32 یک کامپوننت XPManifest بزار روی فرم یا کتابخانه XPMan رو به Uses اضافه کن .

جواد ملاولی
جمعه 10 آذر 1391, 17:00 عصر
از سربرگ Win32 یک کامپوننت XPManifest بزار روی فرم یا کتابخانه XPMan رو به Uses اضافه کن .
با تشکر از شما؛ مساله حل شد، اگه ممکنه بیشتر توضیح بدید. قبلا که این کتابخانه تو Uses نبود؛ چرا با Build کردن پروژه اون اتفاق افتاد و چرا با اضافه کردن این کتابخانه، حل شد؟

Felony
جمعه 10 آذر 1391, 18:01 عصر
از ویندوز XP به بعد کنترل های استاندارد ویندوز بازنویسی اساسی شدن و یک Theme Manger به ویندوز اضافه شد ، پیاده سازی کنترل های استاندارد ویندوز در dll ی با نام comctl32.dll هست ، از ویندوز XP به بعد این dll شامل 2 پیاده سازی مختلف شد ، یکی برای ویندوز XP به قبل ( 95 ، 98 ، 2000 و ... ) که نسخه 5.8 هست و دلیل وجودش در حال حاظر فقط Backward Compatibility و اجرای درست برنامه های فسیل شده هست و یکی هم نسخه ویندوز XP به بعد که نسخه 6 هست .

به صورت پیش فرض برنامه ها در ویندوز با نسخه 5.8 کامپایل میشن ، برای اینکه ویندوز بفهمه که باید از نسخه جدید کنترل ها ( نسخه 6 ) استفاده کنه شما باید توسط فایل Manifest که یک فایل XML هست این موضوع رو به ویندوز اطلاع بدید تا در هنگام اجرای برنامتون Theme Manager بدونه باید برای رسم کنترل هاتون از چه نسخه ای از comctl32.dll استفاده کنه .

حالا میرسیم به دلیل اینکه اون مشکل برای شما پیش اومده بود ؛ همونطور که گفتم Manifest یک فایل XML هست و باید به Resource Section فایل اجرایی مربوطه Bind بشه ، Resource Section محلی برای نگهداری عکس ها ، Icon های ، Cursor موس و Resource String های مربوط به برنامه هست ، حال اگر فایل Manifest در مکان درستی از فایل ریسورس Bind بشه ، Theme Manager ویندوز موقع اجرای برنامه این مقدار رو از اون محل خاص میخونه و میفهمه باید از چه نسخه ای از comctl32.dll استفاده کنه ، وقتی فایل ریسورس رو حذف میکنید این فایل Manifest هم که در فایل ریسورس ضمیمه شده از بین میره و Theme Manager وقتی درخواست خاصی مبنی بر استفاده از نسخه خاصی از کنترل ها نمیبینه طبق عادت میره سراغ نسخه 5.8 کنترل ها برای رسم .

اون کامپوننت یا کتابخانه XPMan هم مخفف XP Manifest هست و فایل Manifest مربوط به برنامه رو موقع کامپایل به روز رسانی میکنه و به فایل ریسورس الحاقش میکنه .

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

موفق باشید .

جواد ملاولی
جمعه 10 آذر 1391, 21:48 عصر
نمیشه کاری کرد که در زمان design هم با نسخه 6 بشناسه؟ میشه با برنامه های Resource Editor اینکار رو کرد؟ الان فقط در زمان اجرا درست میشه

Mask
شنبه 11 آذر 1391, 11:57 صبح
یه روش دیگشم اینه که یه پروژه جدید با دلفی 2010 ایجاد کنی و فایل res ساخته شده رو بزاری کنار پروژه مذکورت.