MFiRE
Member
سلام.
اینم یه آموزش در مورد ساخت پلاگین به زبانه دلفی :
منبع : vb-delphi-cpp.blogfa.com
در صورت درخواست بروبچزه فروم ، SDK ای که به زبان Borland C++ Builder بود رو هم آموزش می دم.
برای برنامه نویسی پلاگین از زبان های مختلف برنامه نویسی مانند دلفی یا سی ++ استفاده می کنند.
در اینجا به آموزش پلاگین نویسی برایه مالتی مدیا بیلدر می پردازیم.
توجه داشته باشید که این آموزش برای افرادیست که با دلفی تا حدودی اشنا دارند.
تقریبا ساختار کلیه پلاگین ها در برنامه هایه مختلف مشابه است. مثلاً گرفتن ورودی ، پردازش/اجرای دستورات ، و صدور خروجی !
در مالتی مدیا بیلدر ما ابتدا در صورت لزوم اطلاعاتی را به پلاگین می فرستیم تا پردازش مورد نظرمان بر روی این داده ها انجام شود . مثال کد زیر :
در پلاگین باید تابعی باشد که این اطلاعات رو دریافت کنه. در واقع هر وقت کد بالا رو اجرا می کنید برنامه ی مالتی مدیا بیلدر یک تابع APi (از پلاگین یا همون فایل DLL)اجرا می کنه که اسم این تابع SetData برای مقادیر integer و SetFile برای مقادیر PChar است.
شکل این تابع در دلفی به صورته زیر است :
در اینجا g_nScriptInt و g_sScriptString متغییرهایی سراسری هستند که اطلاعاته ورودی در آنها ذخیره می شود و برنامه نویسی که در حال نوشتن پلاگین است می تواند از آنها برای کار بر روی اطلاعات ورودی استفاده کند. یعنی اگر خواستید اطلاعاتی که کاربر وارد می کند را به صورت یک پیغام نمایش دهید باید به صورت زیر کد بنویسید :
مثاله نحوه ی کارکرد کلی پلاگین :
ما می خوایم پلاگینی بنویسیم که متنه دلخواه ما رو در یک MessageBox نمایش بده !
برای این کار باید اول متن پیغام رو Set کنید که در مالتی مدیا بیلدر از طریقه [FONT=courier new,courier,monospace]PluginSet[/FONT] انجام می شه. بعد هم اجرا کردن تابع مورد نظر شما ، که در قطعه کده زیر اسم تابعی که قراره پیغام رو نشون بده [FONT=courier new,courier,monospace]ShowMessage[/FONT] هست ! تابع مورد نظر رو شما در دلفی کد نویسی می کنید !
حالا به سورسه پلاگین می ریم ... به تابع [FONT=courier new,courier,monospace]ShowMessage[/FONT] دقت کنید :
به نظر خیلی ساده اس ! نه !
به کلماته رنگی شده دقت کنید ! اگه یادتون باشه [FONT=courier new,courier,monospace]ShowMessage[/FONT] همون تابعی بود که توسط [FONT=courier new,courier,monospace]PluginRun[/FONT] صدا زده می شد.
در تابع نامبرده فقط یه خط کد نوشته شده که اونم یه تابع Api هست به نام [FONT=courier new,courier,monospace]MessageBox[/FONT] که پیغامی رو با متنه فرستاده شده از برنامه ی مالتی مدیا بیلدر نمایش می ده ! البته می تونستیم خاصیت عنوان رو هم مقدار دهی کنیم که به خاطر ساده بودن برنامه به همین متنه ثابت ( [FONT=courier new,courier,monospace]'My Caption'[/FONT]) بسنده می کنیم.
به صورته مختصر اینم بگم که در بخشه [FONT=courier new,courier,monospace]exports[/FONT] در واقع توابع استخراجی لیست شده اند ! بخشه اول رو که فقط خوده برنامه ی مالتی مدیا بیلدر با هاشون کار می کنه ([FONT=courier new,courier,monospace]SetFile[/FONT] تا [FONT=courier new,courier,monospace]Draw[/FONT]) ! و بخشه دوم که توابعی هست که ما نوشتیم و می خوایم که کاربرانی که از پلاگین ما استفاده کنند به این توابع دسترسی داشته باشند !
در صورته نیاز می تونید یه تابع در پلاگینتون داشته باشید که فقط بقیه توابع داخله پلاگین بتونن ازش استفاده کنن ! یعنی کاربری که داره از پلاگینتون استفاده می کنه به اون تابع دسترسی نداره !
در مورده [FONT=courier new,courier,monospace]g_sScriptString[/FONT] هم که گفتم ، وقتی داده ای رو به پلاگین Set می کنید به متغییره سراسری [FONT=courier new,courier,monospace]g_sScriptString[/FONT] می ره تا در بخش هایه مختلفه پلاگین ازش استفاده شه !
راستی گرفتن خروجی هم توسط تابع [FONT=courier new,courier,monospace]GetFile[/FONT] و [FONT=courier new,courier,monospace]GetData[/FONT] انجام می شه ! از این دو تابع برای صادر کردن خروجی استفاده می شه که شما نیازی به یادگیری یا کلنجار رفتن باهاشونو ندارید ! فقط بدونید که برای صادر کردنه خروجی از نوع String باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_sScriptString := 'test Output !' ;[/FONT]و برای صادر کردنه خروجی از نوع Integer باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_nScriptInt := 1234 ;[/FONT]در کل اگه تابعی دارید خروجی داره و می خواید خروجی رو به برنامه ی مالتی مدیا بیلدر بفرستید ، به این صورت عمل کنید :
ابتدا عملیات مورد نظرتون رو انجام بدید ، بعد نتیجه رو در یکی از این دو متغییر (بسته به نوع کارکتری یا عددی بودن) ذخیره کنید. به مثاله زیر توجه کنید :
در تابع [FONT=courier new,courier,monospace]Calc[/FONT] عددی که از ورودی گرفته شده بود ([FONT=courier new,courier,monospace]g_nScriptInt[/FONT]) در طول تابع به اضافه ی 5 کردیم و به خروجی فرستادیم !
تذکر : پس همونطور که گفته شد در توابعی که خروجی متن یا کارکتر است به جای [FONT=courier new,courier,monospace]g_nScriptInt[/FONT] از [FONT=courier new,courier,monospace]g_sScriptString[/FONT] استفاده کنید.
مقاله ی کاملی نبود ولی سورسی که به زبانه دلفی در همین پست ضمیمه کردم شامل توضیحاتی هست که می تونه خیلی کمکتون کنه !
دانلود آموزش کار با محیط دلفی برای کسایی که دلفی بلد نیستن.
آموزش کد نویسی رو هم بعدا می زارم... آموزشو می تونین از همین تاپیک یا وبلاگم دریافت کنین.
وبلاگ من :
دانلود SDK :
پسورد :
اینم یه آموزش در مورد ساخت پلاگین به زبانه دلفی :
منبع : vb-delphi-cpp.blogfa.com
در صورت درخواست بروبچزه فروم ، SDK ای که به زبان Borland C++ Builder بود رو هم آموزش می دم.
برای برنامه نویسی پلاگین از زبان های مختلف برنامه نویسی مانند دلفی یا سی ++ استفاده می کنند.
در اینجا به آموزش پلاگین نویسی برایه مالتی مدیا بیلدر می پردازیم.
توجه داشته باشید که این آموزش برای افرادیست که با دلفی تا حدودی اشنا دارند.
تقریبا ساختار کلیه پلاگین ها در برنامه هایه مختلف مشابه است. مثلاً گرفتن ورودی ، پردازش/اجرای دستورات ، و صدور خروجی !
در مالتی مدیا بیلدر ما ابتدا در صورت لزوم اطلاعاتی را به پلاگین می فرستیم تا پردازش مورد نظرمان بر روی این داده ها انجام شود . مثال کد زیر :
[FONT=courier new,courier,monospace]
در کد بالا اطلاعاتی رو به پلاگینمون فرستادیم.[/FONT][FONT=courier new,courier,monospace]PluginSet("MyPlugIn","myInformation$")[/FONT]
در پلاگین باید تابعی باشد که این اطلاعات رو دریافت کنه. در واقع هر وقت کد بالا رو اجرا می کنید برنامه ی مالتی مدیا بیلدر یک تابع APi (از پلاگین یا همون فایل DLL)اجرا می کنه که اسم این تابع SetData برای مقادیر integer و SetFile برای مقادیر PChar است.
شکل این تابع در دلفی به صورته زیر است :
[FONT=courier new,courier,monospace]// Called when PluginSet() is called with a string variable[/FONT]
[FONT=courier new,courier,monospace]procedure SetFile (s: PChar); cdecl;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]g_sScriptString := s;[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]
[FONT=courier new,courier,monospace]// Called when PluginSet() is called with an integer varaible[/FONT]
[FONT=courier new,courier,monospace]procedure SetData (nData: integer); cdecl;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]g_nScriptInt := nData;[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]
در اینجا g_nScriptInt و g_sScriptString متغییرهایی سراسری هستند که اطلاعاته ورودی در آنها ذخیره می شود و برنامه نویسی که در حال نوشتن پلاگین است می تواند از آنها برای کار بر روی اطلاعات ورودی استفاده کند. یعنی اگر خواستید اطلاعاتی که کاربر وارد می کند را به صورت یک پیغام نمایش دهید باید به صورت زیر کد بنویسید :
[FONT=courier new,courier,monospace]
[/FONT][FONT=courier new,courier,monospace]MessageBox(0,PChar(g_sScriptString),'my Caption',MB_OK);[/FONT]
مثاله نحوه ی کارکرد کلی پلاگین :
ما می خوایم پلاگینی بنویسیم که متنه دلخواه ما رو در یک MessageBox نمایش بده !
برای این کار باید اول متن پیغام رو Set کنید که در مالتی مدیا بیلدر از طریقه [FONT=courier new,courier,monospace]PluginSet[/FONT] انجام می شه. بعد هم اجرا کردن تابع مورد نظر شما ، که در قطعه کده زیر اسم تابعی که قراره پیغام رو نشون بده [FONT=courier new,courier,monospace]ShowMessage[/FONT] هست ! تابع مورد نظر رو شما در دلفی کد نویسی می کنید !
[FONT=courier new,courier,monospace]myInformation$ = 'im Message Plugin ! this is test teXt.'[/FONT]
[FONT=courier new,courier,monospace]PluginSet("MessagePlugin","myInformation$")[/FONT]
[FONT=courier new,courier,monospace]PluginRun("[/FONT][FONT=courier new,courier,monospace]MessagePlugin[/FONT][FONT=courier new,courier,monospace]","ShowMessage")[/FONT]
حالا به سورسه پلاگین می ریم ... به تابع [FONT=courier new,courier,monospace]ShowMessage[/FONT] دقت کنید :
[FONT=courier new,courier,monospace]library Plugin;[/FONT]
[FONT=courier new,courier,monospace]uses[/FONT]
[FONT=courier new,courier,monospace]SysUtils, Windows, Messages, PluginAPI;[/FONT]
[FONT=courier new,courier,monospace]procedure ShowMessage();[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]MessageBox(0,PChar(g_sScriptString),'My Caption',0);[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]
[FONT=courier new,courier,monospace]exports[/FONT]
[FONT=courier new,courier,monospace]// MMB plugin API functions[/FONT]
[FONT=courier new,courier,monospace]SetFile,[/FONT]
[FONT=courier new,courier,monospace]GetFile,[/FONT]
[FONT=courier new,courier,monospace]SetData,[/FONT]
[FONT=courier new,courier,monospace]GetData,[/FONT]
[FONT=courier new,courier,monospace]SetPath,[/FONT]
[FONT=courier new,courier,monospace]Copyright,[/FONT]
[FONT=courier new,courier,monospace]GetShortInfo,[/FONT]
[FONT=courier new,courier,monospace]GetInfo,[/FONT]
[FONT=courier new,courier,monospace]GetType,[/FONT]
[FONT=courier new,courier,monospace]SetParentWindow,[/FONT]
[FONT=courier new,courier,monospace]Draw,[/FONT]
[FONT=courier new,courier,monospace]// plugin functions[/FONT]
[FONT=courier new,courier,monospace]ShowMessage;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]end.[/FONT]
به نظر خیلی ساده اس ! نه !
به کلماته رنگی شده دقت کنید ! اگه یادتون باشه [FONT=courier new,courier,monospace]ShowMessage[/FONT] همون تابعی بود که توسط [FONT=courier new,courier,monospace]PluginRun[/FONT] صدا زده می شد.
در تابع نامبرده فقط یه خط کد نوشته شده که اونم یه تابع Api هست به نام [FONT=courier new,courier,monospace]MessageBox[/FONT] که پیغامی رو با متنه فرستاده شده از برنامه ی مالتی مدیا بیلدر نمایش می ده ! البته می تونستیم خاصیت عنوان رو هم مقدار دهی کنیم که به خاطر ساده بودن برنامه به همین متنه ثابت ( [FONT=courier new,courier,monospace]'My Caption'[/FONT]) بسنده می کنیم.
به صورته مختصر اینم بگم که در بخشه [FONT=courier new,courier,monospace]exports[/FONT] در واقع توابع استخراجی لیست شده اند ! بخشه اول رو که فقط خوده برنامه ی مالتی مدیا بیلدر با هاشون کار می کنه ([FONT=courier new,courier,monospace]SetFile[/FONT] تا [FONT=courier new,courier,monospace]Draw[/FONT]) ! و بخشه دوم که توابعی هست که ما نوشتیم و می خوایم که کاربرانی که از پلاگین ما استفاده کنند به این توابع دسترسی داشته باشند !
در صورته نیاز می تونید یه تابع در پلاگینتون داشته باشید که فقط بقیه توابع داخله پلاگین بتونن ازش استفاده کنن ! یعنی کاربری که داره از پلاگینتون استفاده می کنه به اون تابع دسترسی نداره !
در مورده [FONT=courier new,courier,monospace]g_sScriptString[/FONT] هم که گفتم ، وقتی داده ای رو به پلاگین Set می کنید به متغییره سراسری [FONT=courier new,courier,monospace]g_sScriptString[/FONT] می ره تا در بخش هایه مختلفه پلاگین ازش استفاده شه !
راستی گرفتن خروجی هم توسط تابع [FONT=courier new,courier,monospace]GetFile[/FONT] و [FONT=courier new,courier,monospace]GetData[/FONT] انجام می شه ! از این دو تابع برای صادر کردن خروجی استفاده می شه که شما نیازی به یادگیری یا کلنجار رفتن باهاشونو ندارید ! فقط بدونید که برای صادر کردنه خروجی از نوع String باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_sScriptString := 'test Output !' ;[/FONT]و برای صادر کردنه خروجی از نوع Integer باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_nScriptInt := 1234 ;[/FONT]در کل اگه تابعی دارید خروجی داره و می خواید خروجی رو به برنامه ی مالتی مدیا بیلدر بفرستید ، به این صورت عمل کنید :
ابتدا عملیات مورد نظرتون رو انجام بدید ، بعد نتیجه رو در یکی از این دو متغییر (بسته به نوع کارکتری یا عددی بودن) ذخیره کنید. به مثاله زیر توجه کنید :
[FONT=courier new,courier,monospace]procedure Calc();[/FONT]
[FONT=courier new,courier,monospace]var[/FONT]
[FONT=courier new,courier,monospace]a ,output : Integer ;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]a := 5 ;[/FONT]
[FONT=courier new,courier,monospace]output := a + g_nScriptInt ; //here [/FONT][FONT=courier new,courier,monospace]g_nScriptInt is Input[/FONT]
[FONT=courier new,courier,monospace]g_nScriptInt := output ; [/FONT][FONT=courier new,courier,monospace]//here [/FONT][FONT=courier new,courier,monospace]g_nScriptInt is Output[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]
در تابع [FONT=courier new,courier,monospace]Calc[/FONT] عددی که از ورودی گرفته شده بود ([FONT=courier new,courier,monospace]g_nScriptInt[/FONT]) در طول تابع به اضافه ی 5 کردیم و به خروجی فرستادیم !
تذکر : پس همونطور که گفته شد در توابعی که خروجی متن یا کارکتر است به جای [FONT=courier new,courier,monospace]g_nScriptInt[/FONT] از [FONT=courier new,courier,monospace]g_sScriptString[/FONT] استفاده کنید.
مقاله ی کاملی نبود ولی سورسی که به زبانه دلفی در همین پست ضمیمه کردم شامل توضیحاتی هست که می تونه خیلی کمکتون کنه !
دانلود آموزش کار با محیط دلفی برای کسایی که دلفی بلد نیستن.
آموزش کد نویسی رو هم بعدا می زارم... آموزشو می تونین از همین تاپیک یا وبلاگم دریافت کنین.
وبلاگ من :
دانلود SDK :
پسورد :
vb-delphi-cpp.blogfa.com