سلام به تمام دوستان گرامی
کتابخانه AVR-WIN که به جرات میتوان گفت تنها نمونه موجود در نوع خود است توسط این جانب طراحی و پیاده سازی شده است . ممکن است این سوال در ذهن شما مطرح شده باشد که کار این کتابخانه چیست ؟ توضیح مختصری راجبه کاربرد آن ارایه میدهم که امیدوارم مورد قبول واقع شود.
اگر تا به حال با زبان های سطح بالا کار کرده باشید حتما میدانید که جدیدا تمام این زیان ها شیء گرا شده و کار برنامه نویسی را خیلی سهل و آسان نموده اند. مثلا زبان ویژوال بیسیک، یا سی شارپ، تا قبل از پیدایش این زبان ها اگر کسی قصد داشت برنامه ای برای ویندوز بنویسد مجبور بود هزاران خط کد بنویسد تا پنجره ای در ویندوز ظاهر گردد و بعد چند صد خط کد بنویسد تا مثلا دکمه ای روی پنجره ظاهر شده قرار بگیرد. ولی در زبان های مورد استفاده امروزی با چند کلیک خیلی ساده کار هزاران خط کد را به راحتی انجام میدهیم و این یک مزیت برنامه نویسی است که روند انجام یک پروژه سرعت می بخشد.
حال فرض کند میخواهید با AVR خود منویی گرافیکی بسازید و فرمی طراحی کنید که کاربر بتواند تنظیمات مورد نظر خود را همانند ویندوز (همان گونه که عادت کرده) انجام دهد، برنامه ای مثل برنامه موبایل که کاربر با استفاده از رابط گرافیکی تنظیمات مورد نظر خود را اعمال میکند. اگر قصد ارتقاع سطح برنامه های خود را دارید یا این که میل دارید پروژه هایی رو که انجام میدهید به سرعت به پایان برسانید این کتابخانه مثلما راه گشای خوبی خواهد بود. با استفاده از این کتابخانه ویندوز را در سخت افزار خود شبیح سازی می کنید. عکس زیر نمونه ای از فورم(پنجره) طراحی شده توسط این کتابخانه است:
فکر میکند برای طراحی چنین فرمی چه مقدار برنامه نویسی لازم باشد ؟ برنامه زیر صفحه بالا را تولید میکند که متشکل از دو تکست باکس و سه دکمه و دو لیبل می باید:
page=get_page();
set_page_optionf(page,”EXECUTION”,exe_page);
page_add_buttomf(page,0,51,”Cancel”,exe_cancel_but);
page_add_lablef(page,6,10,”Select File”,exe_lable_1);
page_add_text(page,6,20,12,exe_file_text);
page_add_buttomf(page,83,20,”Browse”,exe_browse_but);
page_add_lablef(page,6,35,”Count:”,exe_lable);
page_add_text(page,42,33,6,exe_count_text);
page_add_buttomf(page,85,51,”Start”,exe_start_but);
در واقع این توابع جزیی از توابع سطح بالا میباشند که توسط کتابخانه AVR-WIN در دسترس قرار میگیرد و به راحتی قادر خواهید بود هر چیدمانی از المان های شیء گرا را در صفحه خود به وجود بیاوید
این کتابخانه حاوی ۵۰۰۰۰ خط کد است که کار شما را برای طراحی و برنامه نویسی راحت می کند.و دیگر دغدغه رابط کاربر را نخواهید داشت و به راحتی هر صفحه ای که لازم داشتید را ایجاد می کنید.
البته کتابخانه نوشته شده هنوز کامل نمیباشد و در حال تصحیح و رفع عیب آن هستم، این کتابخامه را طی ۴ ماه کار مداوم برنامه نویسی به این مرحله(مرحله قابل استفاده) رسانده ام.
لیست برخی از توابع سطح بالای آن :
struct page *get_last_page();
struct object *get_page_last_obj(struct page *ptr);
struct page *get_last_active_page();
struct object *get_page_last_active_obj(struct page *ptr);
void active_next_page(void);
void active_prev_page(void);
struct page *get_page();
void add_obj(struct page *ptr, struct object *obj_);
void del_page(struct page *ptr);
void drow_pages(void);
void set_page_option(struct page *ptr,char *name,char handel);
void set_page_optionf(struct page *ptr,flash char *name,char handel);
struct page *get_page_whandel(char handel);
void active_page_whandel(char handel);
void key_process(char key);
struct object *page_add_text(struct page *ptr,char x,char y,char length,char handel);
struct object *page_add_lable(struct page *ptr,char x,char y,char *st,char handel);
struct object *page_add_lablef(struct page *ptr,char x,char y,flash char *st,char handel);
struct object *page_add_buttom(struct page *ptr,char x,char y,char *st,char handel);
struct object *page_add_buttomf(struct page *ptr,char x,char y,flash char *st,char handel);
struct object *page_add_listbox(struct page *ptr,char x,char y,char len_x,char len_y,char handel);
void send_key(char key);
نمونه عکس ها:

فورم ورود:

تغییر پسورد:

منو :

و در آخر فایل شبیح سازی شده :
در این فایل نحوی کار این کتابخانه رو به صورت عملی مشاهده خواهید کرد، برای گردش بین المان های یک فورم از دکمه TAB استفاده کنید و برای انتخاب المان(مثلا فشار دادن دکمه) از کلید Space و برای بالا و پایین شدن منو به ترتیب از کلید های A,D استفاده کند.
لازم به ذکر است که رندر شدن صفحه به دلیل سرعت پایین شبیح سازی است و در عمل مشکلی نخواهد داشت.
دانلود مثال :AVR-WIN (377)
struct page *get_last_page();
struct object *get_page_last_obj(struct page *ptr);
struct page *get_last_active_page();
struct object *get_page_last_active_obj(struct page *ptr);
void active_next_page(void);
void active_prev_page(void);
struct page *get_page();
void add_obj(struct page *ptr, struct object *obj_);
void del_page(struct page *ptr);
void drow_pages(void);
void set_page_option(struct page *ptr,char *name,char handel);
void set_page_optionf(struct page *ptr,flash char *name,char handel);
struct page *get_page_whandel(char handel);
void active_page_whandel(char handel);
void key_process(char key);
struct object *page_add_text(struct page *ptr,char x,char y,char length,char handel);
struct object *page_add_lable(struct page *ptr,char x,char y,char *st,char handel);
struct object *page_add_lablef(struct page *ptr,char x,char y,flash char *st,char handel);
struct object *page_add_buttom(struct page *ptr,char x,char y,char *st,char handel);
struct object *page_add_buttomf(struct page *ptr,char x,char y,flash char *st,char handel);
struct object *page_add_listbox(struct page *ptr,char x,char y,char len_x,char len_y,char handel);
void send_key(char key);