PDA

View Full Version : dll كردن يك فرم كه محتواي يك جدول از بانك اطلاعاتي را نمايش مي دهد و مي تواند رو ي آن تغييرات دهد



mahdy.asia
دوشنبه 02 خرداد 1390, 11:53 صبح
من مي خواهم در دلفي 7 يك فرم كه محتواي بانك اطلاعاتي را نمايش مي دهد و مي تواند روي جدول فوق تغييرات ايجاد نمايد را بصورت dll ايجاد نمايم و سپس از يك فرم معمولي آن را نمايش دهم اينكار چطور امكان پذير مي باشد

Mask
دوشنبه 02 خرداد 1390, 13:10 عصر
با سلام.
براي اين كار بايد كليه اشيا و كلاسها و كامژوننت ها رو دستي خودتون بسازيد.

یوسف زالی
دوشنبه 02 خرداد 1390, 13:15 عصر
جناب Gold آیا میشه .DFM رو به عنوان resource وارد DLL کنیم؟
بعد از این راه DLL کنیم؟
مثلا با سریالایز کردن

Felony
دوشنبه 02 خرداد 1390, 13:57 عصر
وقتی پروژه DLL ایجاد میکنید میتونید بهش فرم اضافه کنید و توابعی برای نمایش فرم و ... در DLL قرار بدید و به واسطه اون توابع فرم رو صدا بزنید و نمایش بدید .

vcldeveloper
دوشنبه 02 خرداد 1390, 19:16 عصر
براي اين كار بايد كليه اشيا و كلاسها و كامژوننت ها رو دستي خودتون بسازيد.
نیازی به همچین کاری نیست.


مي خواهم در دلفي 7 يك فرم كه محتواي بانك اطلاعاتي را نمايش مي دهد و مي تواند روي جدول فوق تغييرات ايجاد نمايد را بصورت dll ايجاد نمايم
فرم رو به پروژه DLL خودتون اضافه می کنید، و از طریق DLL مربوطه یه تابع export می کنید که در داخل خودش یک نمونه شی از اون فرم بسازه، و اون رو نمایش بده. نمونه سورس کدش در همین سایت وجود داره، برای همین توضیح بیشتری نمیدم؛ اما برای بانک اطلاعاتی، یا باید اون فرم خودش کانکشن درست کنه و از طریق کانکشن خودش به بانک وصل بشه، یا اینکه باید از کانکشن برنامه فراخوان DLL استفاده کنه. حالت اول که هیچی، ولی در حالت دوم، باید شی کانکشن مربوطه به صورت pointer به تابع مربوطه در DLL ارسال بشه.

mahdy.asia
شنبه 07 خرداد 1390, 12:43 عصر
نمونه سورس کدش در همین سایت وجود داره
لطلفا لينك دانلود نمونه را بگذاريد

vcldeveloper
یک شنبه 08 خرداد 1390, 04:47 صبح
لطلفا لينك دانلود نمونه را بگذاريد
http://barnamenevis.org/showthread.php?62946-%D9%81%D8%B1%D9%85-%D8%A7%D8%B5%D9%84%DB%8C-%D9%88-%D9%81%D8%B1%D9%85-%D8%AF%D9%88%D9%85-%D8%AF%D8%A7%D8%AE%D9%84-%D9%81%D8%A7%DB%8C%D9%84-DLL

alinikaein
جمعه 20 خرداد 1390, 15:31 عصر
ولی در حالت دوم، باید شی کانکشن مربوطه به صورت pointer به تابع مربوطه در DLL ارسال بشه.

يعني چي به صورت pointer بايد ارسال بشه؟ مي شه لطفاً بيشتر توضيح بديد؟


ممنون

vcldeveloper
دوشنبه 23 خرداد 1390, 00:27 صبح
يعني چي به صورت pointer بايد ارسال بشه؟ مي شه لطفاً بيشتر توضيح بديد؟
این در صورتی هست که هم DLL شما و هم برنامه استفاده کننده از DLL با دلفی نوشته شده باشند. در این حالت، می تونید اشیاء دلفی را بین DLL و برنامه رد و بدل کنید؛ البته باید از یونیت ShareMem (یا SimpleShareMem در نسخه های جدیدتر دلفی) استفاده کنید، تا مدیر حافظه بین DLL و برنامه به صورت اشتراکی استفاده بشه.
می تونید شی مربوطه رو به صورت Pointer هم به DLL ارسال کنید، ولی باید حواستون باشه که اون شی رو در DLL آزاد نکنید. اگر بخواید شی رو به صورت Pointer ارسال کنید، باید اون رو Type-cast کنید به نوع Pointer. به این صورت:


MyConnection : TAdoConnection;
...
MyDllFunction(Pointer(MyConnection));

mahdy.asia
دوشنبه 30 خرداد 1390, 10:47 صبح
سورس نمونه http://barnamenevis.org/showthread.p...B%8C%D9%84-DLL (http://barnamenevis.org/showthread.p...B%8C%D9%84-DLL)

در اين نمونه كامپوننت edit هنگام نمايش فرم readonly مي باشد چطور مي توان اين اشكال را بر طرف نمود

mahdy.asia
دوشنبه 30 خرداد 1390, 11:52 صبح
اگر Dll نمونه سورس را از فرمي صدا بزنيم كه از فرم ديگري ارث برده شود خطا مي دهد
TForm2 = class(TForm1)
71392

Felony
دوشنبه 30 خرداد 1390, 12:04 عصر
این چه وضع سوال پرسیدنه ؟ منتظر چه جوابی هستید ؟!
کدی که نوشتید رو قرار بدید .

سعید صابری
دوشنبه 30 خرداد 1390, 21:06 عصر
فکر کنم به خاطر اینکه آدرس فایل DLL اشتباه دادین. این پیغام که اینو میگه

mahdy.asia
چهارشنبه 01 تیر 1390, 09:18 صبح
این چه وضع سوال پرسیدنه ؟ منتظر چه جوابی هستید ؟!
کدی که نوشتید رو قرار بدید .

كد مطابق با نمونه سورس مي باشد كه در همين تاپيك گذاشته شده است.
وقتي TForm2 = class(TForm1 را به TForm2 = class(TForm تغيير مي دهم كد اجرا مي شود و هيچ مشكلي ندارد. منمنون از حسن توجه شما

vcldeveloper
چهارشنبه 01 تیر 1390, 12:21 عصر
وقتي TForm2 = class(TForm1 را به TForm2 = class(TForm تغيير مي دهم كد اجرا مي شود و هيچ مشكلي ندارد.
دوست عزیز، طبیعی هست که با تغییر TForm به TForm1 در سورس، برنامه تون کار نکنه!

این مشکلی که باهاش برخورد کردید ارتباطی به نمایش فرم از داخل DLL نداره؛ بلکه به خاطر عدم آشنایی شما با چگونگی کارکرد فرم ها در دلفی هست. تغییر کلاس پایه یک فرم صرفا با تغییر در نام کلاس پایه (مثل یک کلاس معمولی) امکان پذیر نیست، چون نام کلاس پایه اون فرم در فایل DFM مربوط به فرم هم ثبت شده. برای همچین کاری باید فایل DFM هم به طور دستی تغییر کنه، یا اینکه در داخل IDE دلفی برای ایجاد یک فرم جدید مبتنی بر یکی از فرم های موجودتان، گزینه File | New | Others | Inheritable Items را انتخاب کنید، و فرم پایه مورد نظرتان را انتخاب کنید تا فرم جدید بر پایه اون فرم موجود ایجاد بشه.

mahdy.asia
دوشنبه 06 تیر 1390, 15:32 عصر
دوست عزیز، طبیعی هست که با تغییر TForm به TForm1 در سورس، برنامه تون کار نکنه!
از راهنمايي درست شما متشكرم واقعيت اين بود كه من فرم Dll را از نرم افزاري كه با روش ارث بري تهيه كرده بودم مي خواستم نمايش دهم كه با اين خطا مواجه شده اما براي اينكه بتوانم خطا را رديابي نمايم كار مورد ذكر در تاپيك قبل را انجام دادم.
جهت اطلاع ديگران:
با توجه به راهنمايي شما مشكلم را در نرم افزار طراحي شده خودم دوباره ارزيابي كردم من در تنظيمات هنگام كامپايل Exe را در شاخه ايي مي ريختم كه فايل Dll در آن شاخه وجود نداشت و برنامه خطايي كه در اين سايت گذاشتم مي داد

mahdy.asia
دوشنبه 06 تیر 1390, 15:35 عصر
كامپوننت ها در
سورس نمونه http://barnamenevis.org/showthread.p...B%8C%D9%84-DLL (http://barnamenevis.org/showthread.p...B%8C%D9%84-DLL)
در اين نمونه كامپوننت edit هنگام نمايش فرم readonly مي باشد چطور مي توان اين اشكال را بر طرف نمود