View Full Version : سوال: استفاده از یک کتابخانه خاص
MohsenB
دوشنبه 17 مرداد 1390, 13:13 عصر
سلام
بعد از نصب کامپوننتهایی که کتابخانه گرافیکی دارند مثل LMD ، وقتی برای یک ایمیج عکسی با فرمت PNG انتخاب میشه به صورت پیش فرض از کتابخانه ای به نام TLMDPNGImage استفاده میکنه .
این مثال یه نمونه بود میخوام بدونم چطور میشه یه کتابخانه رو برای یک مشخصه پیش فرض کرد . مثلا برای مثال بالا کتابخانه اصلی دلفی بنام TPNGImage به صورت پیش فرض انتخاب بشه ؟
BORHAN TEC
دوشنبه 17 مرداد 1390, 13:26 عصر
این گونه کتابخانه ها در قسمت Initialization کدهای خاصی دارند که باعث بروز این رفتار می شوند. به عنوان مثال به قسمت Initialization یونیت pngimage نگاه کنید:
initialization
{Initialize}
ChunkClasses := nil;
{crc table has not being computed yet}
crc_table_computed := FALSE;
{Register the necessary chunks for png}
RegisterCommonChunks;
{Registers TPngImage to use with TPicture}
{$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
TPicture.RegisterFileFormat('PNG', 'Portable Network Graphics', TPngImage);
{$ENDIF}{$ENDIF}
finalization
{$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
TPicture.UnregisterGraphicClass(TPngImage);
{$ENDIF}{$ENDIF}
{Free chunk classes}
FreeChunkClassList;
MohsenB
دوشنبه 17 مرداد 1390, 14:20 عصر
ممنون از جوابتون
حالا راه حلش چیه ؟
MohsenB
دوشنبه 17 مرداد 1390, 14:24 عصر
من قبلا یه همچین مشکلایی به طور تقریبا مشابه برخورد کردم .
و اینو فهمیدم که آخرین کتابخانه مربوط که کامپایل و نصب میشه استفاده میشه .
حالا فکر کنم با کامپایل و نصب دوباره کامپوننت های پیش فرض دلفی فکر کنم حل بشه . چطور می تونم این کار رو انجام بدم ؟
MohsenB
سه شنبه 18 مرداد 1390, 22:22 عصر
من قبلا یه همچین مشکلایی به طور تقریبا مشابه برخورد کردم .
و اینو فهمیدم که آخرین کتابخانه مربوط که کامپایل و نصب میشه استفاده میشه .
حالا فکر کنم با کامپایل و نصب دوباره کامپوننت های پیش فرض دلفی فکر کنم حل بشه . چطور می تونم این کار رو انجام بدم ؟
کسی اینها رو نمی دونه ؟
vcldeveloper
چهارشنبه 19 مرداد 1390, 00:43 صبح
حالا فکر کنم با کامپایل و نصب دوباره کامپوننت های پیش فرض دلفی فکر کنم حل بشه .
در حالت عادی نمی تونید، اگر بر فرض انجام بشه؛ هیچ وقت به شما توصیه نمیشه که RTL دلفی را خودتان مجددا کامپایل کنید.
میخوام بدونم چطور میشه یه کتابخانه رو برای یک مشخصه پیش فرض کرد .
یک کتابخونه رو برای چیزی پیش فرض نمی کنند؛ بلکه اون کتابخانه ایی که دارید نصب می کنید، برای یک یا چند نوع از خصوصیات یک یا چند property editor ثبت میکنه، تا دلفی از اون property editor ها برای اون نوع از خصوصیات استفاده کنه؛ مثلا یک property editor خاص برای خصوصیات از نوع TPicture. دلفی در هنگام لود شدن IDE یکی یکی پکیج های Design-time را در IDE لود میکنه. اگر چند پکیج برای یک نوع از خصوصیات property editor ثبت کرده باشند، property editor مربوط به آخرین پکیج لود شده استفاده خواهد شد.
اگر به امکانات Design-time یک کتابخانه نیاز ندارید، لزومی نداره که اون ها را نصب کنید. اگر هم نصب شده هستند، می تونید از منوی Components لیست پکیج های نصب شده را ببینید، و اونهایی که نیاز ندارید را حذف کنید. اگر هم سورس اون کتابخانه خاص رو داشته باشید، می تونید خودتون پکیج های مورد نیازتان را نصب کنید، و سایر پکیج ها را نصب نکنید، یا اینکه اون بخش از سورس کدشان را که مربوط به رجیستر کردن property editor مورد نظر شما هست را حذف کنید.
MohsenB
چهارشنبه 19 مرداد 1390, 02:14 صبح
سلام با تشکر از شاهین و علی جان
خدمت علی آقا بگم که اگر با حذف کردن از لیست کامپوننت ها میشد خودم این کار رو میکردم . ولی بخاطر اینکه این پکیجها معمولا شامل چندین کامپوننت هستن و نمیشه بخاطر یکیشون همه رو حذف کرد ، مخصوصا اینکه یعضیاشون با کد منبع نیستن که بشه کد رجیستر رو ازشون حذف کرد .
من با توضیحات دوستان به این نتایج رسیدم و مشکلم حل شد :
در مرحله اول همون طور که علی آقا گفتن :
اگر به امکانات Design-time یک کتابخانه نیاز ندارید، لزومی نداره که اون ها را نصب کنید. اگر هم نصب شده هستند، می تونید از منوی Components لیست پکیج های نصب شده را ببینید، و اونهایی که نیاز ندارید را حذف کنید. اگر هم سورس اون کتابخانه خاص رو داشته باشید، می تونید خودتون پکیج های مورد نیازتان را نصب کنید، و سایر پکیج ها را نصب نکنید، یا اینکه اون بخش از سورس کدشان را که مربوط به رجیستر کردن property editor مورد نظر شما هست را حذف کنید.
اگر با این راهها نشد در صورت امکان اون یونیت و یا کلاسی رو که میخواید ، از کد اصلی جدا کنید و یه کلاس جدید با اسم جدید تو یونیت جدید بسازید . بعد اونو نصب کنید . ( یعنی اون کلاسی رو که میخواید خودتون درست کنید ) . بعد اونو نصب کنید . با این کار شما یه قسمت رو که میخواستید آخرین پکیجی بوده که نصب شده و بنابر این از اون استفاده خواهد شد .
مثلا تو مشکلی که من داشتم بعد از حذف کردن رجیستر شدن آلفا کنترل از png ، کامپوننت LMD جاش اومد ، بعد از اون DevExpress اومد که تو این مرحله چون این کامپوننت کد منبع نداشت نمی شد رجیستر شدنش رو حذفش کرد و از طرفی نمیشد قید این کامپوننت رو زد .
من کد یونیت pngimage که هدف نهاییم بود رو برداشتم و یه پکیج بنام خودم درست کردم و بعد اونو نصب کردم .
باتشکر از دوستان
vcldeveloper
جمعه 21 مرداد 1390, 02:10 صبح
ولی بخاطر اینکه این پکیجها معمولا شامل چندین کامپوننت هستن و نمیشه بخاطر یکیشون همه رو حذف کرد
اگر کامپوننت درست و حسابی باشه، برای Property editor ها و ابزارهای مربوط به IDE از یک یا چند Design-only پکیج استفاده میکنه؛ و کامپوننت های خودش را که در برنامه ازشون استفاده می کنید را در یک یا چند پکیج دیگه قرار میده؛ تا حساب افزونه های IDE از کامپوننت های اصلی جدا باشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.