ورود

View Full Version : سوال: کامپوننت XPMainfest



Batman
دوشنبه 25 شهریور 1387, 20:20 عصر
با سلام
دوستان توی دلفی 7 کامپوننت xpmainfest توی تب win32 به صورت پیش فرض نصبه
چجوری میشه کاربر خودش انتخاب کنه که برنامه حالت xp یا حالت ویندوز 98 رو داشته باشه
ممنونم

Touska
دوشنبه 25 شهریور 1387, 22:57 عصر
من یک بار این مشکلو در سایت داشتم که نه با رهنمودهای Compiler به جایی نرسیدم و نه با Resource

ولی یک راه بهم پیشنهاد شد که این بود از Vcl Skin برای WinXp و برای معمولیش استفاده کنم.

موفق باشید :)

(هیچکس)
چهارشنبه 27 شهریور 1387, 08:23 صبح
با سلام دوست عزیز !
برای اینکار می تونی برنامه رو با حالت ویندوز 98 طراحی کنی بعد :
1- Notepad رو باز کن و کد زیر رو توی اون بنویس و اون رو با نام Project1.exe.manifest ذخیره کن. (به جای Project1 در نام فایل،باید نام فایل اجرایی برنامت رو بنویسی).
2- این فایل رو پهلوی فایل اجرایی برنامت کپی کن.
3- حالا هروقت برنامت اجرا بشه به حالت XP هست هر وقت خواستی که به حالت 98 باشه این فایل که کپی کردی کنار برنامت نامش رو عوض کن (مثلا Project1.exe.manifest_) و برنامت رو یه بار دیگه اجرا کن.

کدی که باید تو Notepad بنویسی:


<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>

موفق باشید...

s.mostafa.rahmani
چهارشنبه 27 شهریور 1387, 08:27 صبح
دوستان توی دلفی 7 کامپوننت xpmainfest توی تب win32 به صورت پیش فرض نصبه
ولي براي من اين طور نيست، اگه بخوام حالت XP داشته باشه اون رو روي فرم مي‌گذارم، البته با حذفش دوباره به حالت عادي برنمي‌گرده مگه اينكه از ليست Usesهاي يونيت اون فرم XPMan رو به صورت دستي پاك كنم.

Felony
چهارشنبه 27 شهریور 1387, 08:40 صبح
ولي براي من اين طور نيست، اگه بخوام حالت XP داشته باشه اون رو روي فرم مي‌گذارم، البته با حذفش دوباره به حالت عادي برنمي‌گرده مگه اينكه از ليست Usesهاي يونيت اون فرم XPMan رو به صورت دستي پاك كنم.

!!! - خودتون جواب خودتون رو دادین دوستمون گفتن :

توی دلفی 7 کامپوننت xpmainfest توی تب win32 به صورت پیش فرض نصبه

خوب خودتون هم دارید میگید که :

اگه بخوام حالت XP داشته باشه اون رو روي فرم مي‌گذارم

اگر اینطور نیست (نصب نیست) پس چطور روی فرم برنامتون قرار میدینش !!!

s.mostafa.rahmani
چهارشنبه 27 شهریور 1387, 08:44 صبح
دوستان گفتند كه پيش فرض نصبه چطوري كاري كنيم كه كاربر خودش انتخاب كنه كه 98 باشه، من برداشتم اين بود كه يعني به طور پيش فرض حالت XP فعاله، اما براي من اينطور نيست تا كامپوننتش رو روي فرم نذارم، حالت 98 داره.
:)

Felony
چهارشنبه 27 شهریور 1387, 16:46 عصر
من برداشتم اين بود كه يعني به طور پيش فرض حالت XP فعاله، اما براي من اينطور نيست تا كامپوننتش رو روي فرم نذارم، حالت 98 داره

خير براي همه همينطوره (به طور پيش فرض حالت XP فعال نيست .

Batman
یک شنبه 31 شهریور 1387, 02:38 صبح
با سلام دوست عزیز !
برای اینکار می تونی برنامه رو با حالت ویندوز 98 طراحی کنی بعد :
1- Notepad رو باز کن و کد زیر رو توی اون بنویس و اون رو با نام Project1.exe.manifest ذخیره کن. (به جای Project1 در نام فایل،باید نام فایل اجرایی برنامت رو بنویسی).
2- این فایل رو پهلوی فایل اجرایی برنامت کپی کن.
3- حالا هروقت برنامت اجرا بشه به حالت XP هست هر وقت خواستی که به حالت 98 باشه این فایل که کپی کردی کنار برنامت نامش رو عوض کن (مثلا Project1.exe.manifest_) و برنامت رو یه بار دیگه اجرا کن.

کدی که باید تو Notepad بنویسی:


<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>

موفق باشید...
با سلام
راه حلتون خیلی خوبه و جواب میده
اما آیا میشه با کد نویسی و بدون استفاده از فایلهای کمکی این کار رو انجام داد چون میخوام حالت امنیت بالا بره.ممکنه کاربر اون فایل رو حذف کنه
مثلا میشه کدی نوشته که این کامپوننت رو از لیست uses های برنامه حذف و اضافه کنه
ممنونم

(هیچکس)
یک شنبه 31 شهریور 1387, 09:45 صبح
با سلام
راه حلتون خیلی خوبه و جواب میده
اما آیا میشه با کد نویسی و بدون استفاده از فایلهای کمکی این کار رو انجام داد چون میخوام حالت امنیت بالا بره.ممکنه کاربر اون فایل رو حذف کنه
مثلا میشه کدی نوشته که این کامپوننت رو از لیست uses های برنامه حذف و اضافه کنه
ممنونم
با سلام خدمت شما...!
دوست من، منظورت اینه که مثلا یه گزینه توی اختیارات برنامت قرار بدی که هروقت کاربری که با برنامت کار میکنه این گزینه رو فعال کرد برنامت به حالت XP یا 98 در بیاد ؟؟؟

اگه با زبان های دات نت برنامه مینوشتی فکر میکنم که بشه (اونم فقط از حالت 98 به XP نه برعکس (تااونجاییکه من میدونم)).
میدونی این خاصیت XP شدن برای یک برنامه (Win32) در همون اول که برنامه اجرا میشه اعمال میشه و برای عوض کردنش باید تغییرش بدی و برنامت رو دوباره اجرا کنی.

موفق باشی............!

Batman
سه شنبه 02 مهر 1387, 02:37 صبح
دوستان کسی راه حلی به نظرش نمیرسه؟

ms_mohaghegh
چهارشنبه 03 مهر 1387, 11:33 صبح
چیزی که میگم مطمئن نیستم توی Win 98 جواب بده، ولی توی Xp کار می کنه. و اینکه من با دلفی 2007 درستش کردم، نمی دونم دلفی 7 یونیت UxTheme رو داره یا نه.

قبل از هر چیز یونیت UxTheme رو به uses فرم اضافه کن و از تابع SetWindowTheme به صورت زیر استفاده کن:

برای حذف Style :
SetWindowTheme(Handle, ' ', ' ');
for i:= 0 to ComponentCount - 1 do
try
SetWindowTheme(TWinControl(Components[i]).Handle, ' ', ' ');
except

end;
Hide;
Show;برای داشتن style :
setwindowtheme(Handle, nil, nil);
for i:= 0 to ComponentCount - 1 do
try
setwindowtheme(TWinControl(Components[i]).Handle, nil, nil);
except

end;
Hide;
Show;البته کد های بالا فقط روی همون فرمی کار میکنن که توش نوشته شدن. برای عمل کردن روی تمام فرم های برنامه، باید به شکل زیر نوشته بشن:

برای حذف Style :
for i:= 0 to Application.ComponentCount - 1 do
try
SetWindowTheme(TWinControl(Application.Components[i]).Handle, ' ', ' ');
for j:= 0 to Application.Components[i].ComponentCount - 1 do
try
SetWindowTheme(TWinControl(Application.Components[i].Components[j]).Handle, ' ', ' ');
except

end;
TWinControl(Application.Components[i]).Hide;
TWinControl(Application.Components[i]).Show;
except

end;برای داشتن Style :
for i:= 0 to Application.ComponentCount - 1 do
try
setwindowtheme(TWinControl(Application.Components[i]).Handle, nil, nil);
for j:= 0 to Application.Components[i].ComponentCount - 1 do
try
SetWindowTheme(TWinControl(Application.Components[i].Components[j]).Handle, nil, nil);
except

end;
TWinControl(Application.Components[i]).Hide;
TWinControl(Application.Components[i]).Show;
except

end; اون مخفی کردن و نمایش دوباره هم برای تلنگر زدن به کنترل هاییه که ویندوز مسئول ترسیمشونه.

AlirezaBahredar
چهارشنبه 03 مهر 1387, 12:21 عصر
باسلام...
تنها یک جواب ساده....زمان RunTime اقدام به ایجاد این کامپوننت کن .
اگه Win98 هست که اینکارو نکن اگه WinXP هست این کامپوننت رو ایجاد کن.
موفق باشی.

vcldeveloper
چهارشنبه 03 مهر 1387, 17:28 عصر
تنها یک جواب ساده....زمان RunTime اقدام به ایجاد این کامپوننت کن .
ایجاد کردن یا نکردن اون کامپوننت تاثیری در Theme برنامه نداره! اون کامپوننت اصلا کاری انجام نمیده، فقط چون در یونیت XPMan تعریف شده، وقتی روی فرم میاندازیدش، دلفی بطور خودکار اسم یونیت را به لیست uses اضافه میکنه. تنها چیزی هم که نیاز هست، همین اسم یونیت هست، نه ساخت اون کامپوننت. چون این Theme از طریق الصاق یک ریسورس XML به فایل EXE ایجاد میشه.
راه حل برنامه نویسی اش همونی هست که در پست #11 گفته شد.


نمی دونم دلفی 7 یونیت UxTheme رو داره یا نه.
بله، داره.