آموزش استفاده از Scintilla در ویندوز به زبان ساده

در مقاله قبل با عنوان “ Scintilla چیست و چه کاربرد هایی دارد .” در بخش مقدمه اعلام کردم که میخواهم کتابی آموزشی برای Scintilla بنویسم اما به دلیل مشغله زیاد از آن منصرف شدم ولی پس از کمی تامل در نبود منابع فارسی Scintilla و مشاهده بازخورد خوب مقاله بر آن شدم تا بخش اسناد Scintilla رو ترجمه و منتشر کنم تا قدم کوچکی در گسترش دانش برداشته باشم. چگونه از Scintilla در ویندوز استفاده کنیم ؟ در زیر بصورت قدم به قدم نحوه استفاده از Scintilla آورده شده است . اول از همه باید فایل DLL بارگزاری شود .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
hmod = LoadLibrary(“DLL”);

if (hmod==NULL)

{

MessageBox(hwndParent,

“The Scintilla DLL could not be loaded.”,

“Error loading Scintilla”,

MB_OK | MB_ICONERROR);

}

اگر DLL با موفقیت Load شود . یک کلاس جدید ثبت میشود . این کلاس جدید “Scintilla” نام دارد .حالا شما میتوانید همانند دیگر کنترل های ویندوز از این کنترل استفاده کنید :

hwndScintilla = CreateWindowEx(0,”Scintilla”,””, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL);

توجه داشته باشید که نام کلاس جدید “Scintilla” است . چگونه Scintilla را کنترل کنیم ؟ شما میتوانید دستوراتی را برای Scintilla ارسال کنید . برای این کار دو روش وجود دارد که در زیر آمده است .

راه ساده کنترل Scintilla : این را ه دقیقا همانند استفاده از دیگر کنترل ها در ویندوز می باشد . در این راه شما دستورات خود را به Scintilla ارسال می کنید و Scintilla Edit Control اطلاعات مورد نظر شما را بر می گرداند .

ساختار ارسال دستورات :

SendMessage(hwndScintilla,sci_command,wparam,lparam);


مثال :

SendMessage(hwndScintilla,SCI_CREATEDOCUMENT, 0, 0);


بعضی از دستورات مقادیری را برمیگردانند و از پارامترها استفاده نمیکنند برای همین پارامتر ها باید NULL باشد.

راه سریع کنترل Scintilla : راه سریع استفاده از Scintilla استفاده از یک تابع دست نویس است . شما میتوانید با استفاده از یک پوینتر (اشاره گر) به طور مستقیم از فرمان ها استفاده کنید . این روش بسیار سریع تر از SendMessage() عادی میباشد . اول از همه شما باید از دستورات SCI__GETDIRECTFUNCTION و SCI__GETDIRECTPOINTER استفاده کنید و همچنین یک پوینتر برای بازگشت مقادیر به تابع و یک اشاره گر باید پارامتر اول را برای تابع بازیابی کند . که این کارباید توسط روش SendMessage انجام شود .

مثال :

int (*fn)(void*,int,int,int);

void * ptr;

int canundo;

fn = (int (__cdecl *)(void *,int,int,int))SendMessage(

hwndScintilla,SCI_GETDIRECTFUNCTION,0,0);

ptr = (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0);

canundo = fn(ptr,SCI_CANUNDO,0,0);

چگونگی دریافت اطلاعیه ها ؟ هرگاه رویدادی رخ میدهد Scintilla آن را توسط WM__NOTIFY به پنجره والد میفرستد . پس شما برای خواندن طالاعیه از پنجره والد از کدی مثل کد زیر استفاده میکنید .

NMHDR *lpnmhdr;

[…]

case WM_NOTIFY:

lpnmhdr = (LPNMHDR) lParam;

if(lpnmhdr->hwndFrom==hwndScintilla)

{

switch(lpnmhdr->code)

{

case SCN_CHARADDED:

/* Hey, Scintilla just told me that a new */

/* character was added to the Edit Control.*/

/* Now i do something cool with that char. */

break;

}

}

break;

یادگیری برنامه نویسی برای متخصصین حوزه کامپیوتر این روزها یک الزام به حساب می آید. از جمله محبوب ترین زبان های برنامه نویسی دنیا می توانیم به زبان برنامه نویسی سی شارپ ، زبان برنامه نویسی جاوا ، زبان برنامه نویسی پایتون ، زبان برنامه نویسی سی پلاس پلاس و زبان برنامه نویسی SQL ( لازمه هر زبان دیگری ) و زبان برنامه نویسی PHP اشاره کنیم.

برای آموزش برنامه نویسی می توانید با خیال راحت در قالب دوره های آموزش برنامه نویسی سایت توسینسو ، آموزش سی شارپ ، آموزش جاوا ، آموزش پایتون ، آموزش جنگو ، آموزش PHP ،  آموزش جاوا اسکریپت ، آموزش برنامه نویسی اندروید ، آموزش SQL و آموزش MySQL را بصورت جامع و حرفه ای آموزش ببینید.


نظرات