ساخت یه برنامه مثلAutoTyping

i_lover3000

Member
سلام :wink:
کسی میتونه یه یه برنامه کوچیک مثل این برنامه ای که در زیر گذاشتم بنویسه ، یه راهنمایی کوچیک هم کافیه :D
vb.net 2005
برنامه رو می تونید از سایت زیر دانلود کنید. :rose:

untitled-1.jpg



untitled-2.jpg



http://www.wamasoft.com
 
آخرین ویرایش:

Sampro

Member
برنامه جالبیه
اینو می خواید برای برنامه های ویندوزی بنویسید یا برای برنامه خودتون .
 

i_lover3000

Member
راستش می خواستم کلا با نحوه ساختش آشنا بشم . بعد برای برنامه هایی که خودمون مینویسیم بکار میاد هم می تونیم یه برنامه جالب مثل خوده AutoTyping بسازیم البته با امکانات فارسی چون این برنامه AutoTyping از زبان فارسی پشتیبانی نمی کنه !!

با تشکر
 

Sampro

Member
قبلا یه جایی خودنم که اپن آفیس یه جوری هستش که هر چی تایپ می کنی رو یه جا ذخیره می کنه
بعد هر جا تو متن چیزی وارد می کنی دنبال اون کلمه تو پایگاه داد می گرده
و اگر پیداش کرد پیشنهاد می کنه
و کاربر بعد از زدن اینتر اونو به سرعت درج می کنه
من دنبال یه همچین برنامه ای هستم چون واقعا به درد می خوره
اگه بشه می خوام بنویسمش:wink:
 

i_lover3000

Member
--

اگه می خواید با همدیگه بنویسیمش ولی من زیاد دات نت کار نکردم ولی دارم می رم تو کارش :neutral:

مثلا این برنامه که گذاشتم ببینیت
تو این برنامه از هیچ کد نویسی استفاده نکردم فقط از Properties است
 

پیوست ها

  • WindowsApplication2.zip
    47.6 کیلوبایت · بازدیدها: 5

Sampro

Member
این چیز خاصی نیست
خود کمپوننت ها این خاصیت رو دارند
بهش می گن اتو تایپینگ
با وی بی نوشتیش
متاسفانه من با وی بی کار نمی کنم
می دونی چون از اول با دلفی کار کردم پروژه های مورد علاقمو با همون می نویسم
دستم توش باز تره
 

i_lover3000

Member
بله با vb.net 2005 نوشتمش و همون طوری که گفتید از خاصیت اتو تایپینگ استفاده کردم

ولی اون برنامه ای که تو پست اول گذاشتم ، فکر نمی کنم از این خاصیت استفاده کرده باشه چون تو همه برنامه ها می تونی ازش استفاده کنی ( بجز فتوشاپ !!! )

با تشکر
موفق باشید
 

Sampro

Member
سلام.
ببین لاور جان این برنامه میاد هندل برنامه ای توش تایپ می کنی رو می گیره
بعد توش دنبال چیزی مثل ادیت باکس می گرده .
بعد می فهمه اونجا داری تایپ می کنی و برات نمونه می یاره.
تو فتوشاپ به نظرم چون از شیوه های خاصی استفاده می کنه این جوریه .
اونجا دیگه از کنترلای پیش فرض ویندوز استفاده نمی کنه.
چون می دونی معمولا همه ادیت باکسا از یه فرم ویندوزی پیشفرض استفاده می کنن مثل همون اکتیوی ایسک تو وی بی
دلیلشم اینه که وقتی تم ویندوز رو عوض می کنی تقریبا همه برنامه ها هم تم ادیت و باتنا و ... عوض می شه .
 

i_lover3000

Member
خیلی خوبه !

حالا چطوری میتونم هندلش رو بدست بیارم ؟؟؟
من تازه کارم اگه میتونید بهم کمک کنید.


با تشکر
موفق باشید.
 

the_king

مدیرکل انجمن
یک نمونه اش را ساختم که یکسری از کلمات زبان ویزوال بیسیک رو در بانک اطلاعاتی اش داره (درون فایل List.txt)
و وقتی اجرایش می کنید در کنترلهای استاندارد ویژوال بیسیک (ThunderEditBox) و کنترلهای استاندارد سی (Edit)
و کنترلهای بورلند (TEdit) و کنترلهای استاندارد VS.Net درون هر برنامه در حال اجرا ظاهر می شود :

24bvk0l.jpg


رنگ لیست را زرد گرفتم تا با لیست های عادی اشتباهی گرفته نشه. این برنامه با کنترلهای استاندارد Internet Explorer
سازگار است ولی در برنامه هایی مثل Opera و FireFox و Photoshop از یک نوع خاص TextBox استفاده شده که پنجره
اختصاصی ندارند و بصورت استاندارد و عمومی نمیشه کدی را برای آنها نوشت.

بعضی از برنامه ها بعد از تایپ کردن یک عبارت Focus رو از کنترل ویرایشگر می گیرند و به کی کنترل دیگر جابجا می کنند.
به همین دلیل است که بعد از اضافه کردن یک عبارت توسط AutoTyping ویرایشگر از حالت Focus خارج می شه.

البته این کد هنوز جای کار زیاد داره ولی برای اساس یک طرحی اصولی و اهداف آموزش مناسبه.

کد برنامه به همراه فایل اجرایی exe ضمیمه این پست می باشد.
 

پیوست ها

  • AutoTyping.zip
    22.5 کیلوبایت · بازدیدها: 6

Sampro

Member
ولی در برنامه هایی مثل opera و firefox و photoshop از یک نوع خاص textbox استفاده شده
اون برنامه فکر کنم تو موزیلا می آورد . من بقیه رو تست نکردم .
احتمالا باید هندل اونا رو هم جداگانه گیر بیاریم .

اگه بشه کلمه ای که کاربر انتخاب می کنه رو بهمیم خیلی خوبه .
مثلا می شه مثله بابی 7 یه لیست هیستوری علاوه بر لیست خودش نشون داده بشه (تو همون دراپ دون).
 

the_king

مدیرکل انجمن
مشکل اصلی اینجا است که خود اون TextBox درون Address Bar یک Handle مجزا نداره (لااقل اینطور به نظر میاد)
در واقع گویا از نوع Windowless است و در نتیجه با پیغام های استانداردی که به یک پنجره می می فرستند
(مثلا WM_GETTEXT) نمیشه ارتباط برقرار کرد.

من اول با ابزار ++Microsoft Spy که جزو Visual Studio است، پنجره TextBox ها رو جستجو کردم تا در صورت امکان
اسم ClassName کنترلهای جدید رو به لیست اضافه کنم (همانطور که در مورد Edit و TEdit و ThunderTextBox انجام دادم).

ولی متاسفانه نه Opera و نه FireFox و نه Photoshop (صرفا ابزار نوشتن Text فتوشاپ، چون با بقیه قسمتهای آن
- مثل TextBox درون References قسمت Plug Ins - سازگار است) از کنترلهای استاندارد Edit استفاده نمی کنند.

البته کد برنامه رو واسه کنترلهای RichEdit مثل Wordpad و همینطور ویرایشگر Yahoo Messenger (که با نام کلاس
YIMInputWindow ثبت شده) میشه تکمیل کرد چون پنجره شان مشخص و مجزا است.
ولی واسه مواردی مثل Opera و FireFox بایستی توی مستندات سازندگانشون بگردیم، بلکه یک راه حل اختصاصی براشون
پیدا بشه.
 

Sampro

Member
یه چیزی می خواستم بدونم
ما نمی تونیم مثل کاربر که داخلشون تایپ می کنه یه جوری چیزایی که داخلشون تایپ می شن رو بفهمیم ؟
یا مثل کاربر که پیست می کنه ما هم داخلشون چیزی بریزیم ؟
 

the_king

مدیرکل انجمن
البته که میشه، توی یکی از گفتگو ها من همینکار رو برای ارسال متن از ویژوال بیسیک به داخل Command Prompt
انجام دادم ولی چند نکته وجود داره که واسه این مورد خاص باید در نظر بگیریم :

اول اینکه ما نمی دونیم موقعیت پنجره TextBox کجای صفحه است و در پیدا کردن و نمایش کادر لیست مشکل داریم.
این مشکل بر می گرده به همون نداشتن پنجره اختصاصی.

دومین مشکل اینه که واسه موقع تایپ کردن قابلیت Copy Paste رو از کاربر می گیریم چون خودمون لازمش داریم.

سومین مشکل اینه که اگه کاربر سریع متن رو تایپ و ویرایش کنه، برنامه ما به دلیل کندی مراحل Copy و Paste جا می مونه.

چهارمین مشکل اینه که ما پنجره ای نداریم که ترکیب کلیدی Ctrl + C و یا مثلا پیغام WM_COPY رو فقط به اون پنجره ارسال
کنیم. در نتیجه مجبوریم SendKey کنیم که توی همه پنجره ها دریافت میشه.
اشکال این ارسال عمومی اینه که اگه کاربر سریع سراغ یک برنامه دیگه بره متن های ارسالی ما توی اون برنامه دیگه
دریافت می شوند و قابل پیشبینی نیست که چه نتیجه ای ممکنه داشته باشه.
 

the_king

مدیرکل انجمن
کدی که من نوشتم این چند تا مورد رو در نظر نمی گیره :

مورد اول اینکه از یک پنجره و ListBox عادی استفاده می کنه، نه یک List واقعی که در هر ComboBox ای وجود داره.
وقتی شما روی یک ListBox عادی Click کنید Focus از کنترلهای دیگه پس گرفته میشه مثلا اگه چشمکزن (Cursor)
داخل یک ویرایشگر فعال باشه و شما روی ListBox کلیک کنید، حداقل برای یک لحظه اون چشمکزن ناپدید میشه
و Focus منتقل میشه روی ListBox ما.

البته من کد رو طوری نوشتم که سعی کنه دوباره Focus رو به ویرایشگر اصلی برگردونه ولی در برخی موارد این مساله
نتیجه دلخواه رو نداره. این مساله ارتباط مستقیمی داره با کدی که در برنامه مقصد نوشته شده و من شخصا نمی تونم
کار خاصی برایش انجام بدم، در واقع ویژوال بیسیک به من اجازه ساختن پنجره ای که Focusable نباشه رو نمی ده.
البته ساختن چنین پنجره ای که Focus نداشته باشد به طریقی عملی است و روش دشواری دارد و خیلی حرفه ای.

مورد دوم اینکه با کنترلهای RichEdit سازگار نیست. مثلا Wordpad و یکسری ابزارهای ویرایشگر
از کنترلهای RichEdit استفاده می کنند. مهمترین نشونه شناسایی کنترلهای RichEdit اینه که متن داخلشون می تونه
چند رنگی باشه و یا با چند قلم متفاوت در کنار هم نوشته بشه. البته این عدم سازگاری با اضافه کردن کدهای مربوط به
پیغام ها برطرف میشه و برایش راه حل مشخصی داریم.

مورد سوم اینکه نمی تونه با متن های فارسی به درستی کار کنه. مشکل اصلی اینجا است که نه راست به چپ
شدن ListBox رو در نظر گرفتم و نه از کنترلهای Unicode استفاده کردم. ایندو مورد حداقل نکاتی است که برای درج کلمات
فارسی باید رعایت بشه. البته این مشکل رو هم می توانیم برطرف کنیم.

مورد چهارم اینکه در برنامه هایی مثل Opera و Firefox کنترل TextBox ای پیدا نمی کنه. در این مورد فعلا راه حلی
سراغ ندارم چون ظاهرا با اصول برنامه ما باید هر TextBox ای یک پنجره مستقل داشته باشه که گویا در این دو برنامه نداره.

مورد پنجم در پیاده سازی سیستم جستجوی متن اش خیلی موارد و نکته ها رو در نظر نگرفتم و قابلیت محدودی داره
مثلا فقط برای تک کلمات طراحی شده، مثلا اگر در بانک اطلاعاتی اش عبارت auto type رو تعریف کنید و خودتان عبارت
auto را به طور کامل وارد نمایید، دیگه فقط عبارت type رو جستجو می کنه و عبارت auto type رو نشون نمیده.
این مشکل رو با تغییر سیستم جستجو اش میشه به راحتی برطرف کرد.

مورد ششم اصلا کاربر پسند نیست، البته فقط یک مثال آموزشی است ولی به هر حال باید مواردی مثل نمایش در
SysTray و امکان تغییر بانک اطلاعاتی به قابلیت ها اضافه بشه.

مورد هفتم من صرفا کدهای کلیدهای مکان نما به سمت بالا (Up) و پایین (Down) و فاصله (Space) و Enter و
نقطه (.) و تساوی (=) رو برای لیست تعریف کردم. باید کلیدهای مثل Home و End و Page Up و Page Down هم
اضافه بشه.

فعلا همین هفت تا مورد کافیه، خیلی زیاد که بشوند برنامه نویس رو از شوق برطرف کردنشون می اندازه.
 
آخرین ویرایش توسط مدیر:

Sampro

Member
ولی چند نکته وجود داره که واسه این مورد خاص باید در نظر بگیریم
این طور که معلومه باید دنبال هون داکیمنتاشون بگردیم چون این راه مشکلات زیادی داره .

میشه نقص همین برنامه رو بگید !؟
نقصش اینه که اپن سورس نیست و قابلیتایی که می خوایم رو نداره.
 

Sampro

Member
سلام
مورد اول اینکه از یک پنجره و ListBox عادی استفاده می کنه، نه یک List واقعی که در هر ComboBox ای وجود داره.
وقتی شما روی یک ListBox عادی Click کنید Focus از کنترلهای دیگه پس گرفته میشه مثلا اگه چشمکزن (Cursor)
داخل یک ویرایشگر فعال باشه و شما روی ListBox کلیک کنید، حداقل برای یک لحظه اون چشمکزن ناپدید میشه
و Focus منتقل میشه روی ListBox ما.
مثل همون لیست دا خل کمبو بکس یه سری کد هایی هست که پیام های رسیده به یه لیست رو تغییر می دن مثلا به پیامی که فوکوس رو می خواد به اون بده پیغام منفی می دن یا اون برگشت می دن .

البته من کد رو طوری نوشتم که سعی کنه دوباره Focus رو به ویرایشگر اصلی برگردونه ولی در برخی موارد این مساله
نتیجه دلخواه رو نداره. این مساله ارتباط مستقیمی داره با کدی که در برنامه مقصد نوشته شده و من شخصا نمی تونم
کار خاصی برایش انجا
می شه تغییراتی ایجاد کردن که اون کنترل اصلا فوکوس نگیره . چون رد بدل کردن فوکوس هم وقت می گیره و برنامه باید از هر جهت سریع باشه .

در واقع ویژوال بیسیک به من اجازه ساختن پنجره ای که Focusable نباشه رو نمی ده.
تو دلفی می شه با ایجاد یه تابع مسیج های رسیده به یه کنترل رو مدیریت کرد مثلا تو دلفی من می تونم پیغامی که کاربر مثلا روی صفحه برنامه کلیک کرده رو به تایتل بار انتقال بدم . یعنی کاربر می تونه بدون استفاده از تایتل بار فرو رو بکشه . قاعدتا مسیج های دیگه ای هم هستند که به راحتی می شه مدیریتشون کرد .

برایش راه حل مشخصی داریم.
ورد از جه نوع ویرایشگری استفاده می کنه ؟احتمالا یه چیزی به غیر از این هاست!!؟

اینکه در برنامه هایی مثل Opera و Firefox کنترل TextBox ای پیدا نمی کنه
به نظرم بهتره تا این دو رو از لیست خودمون حذف کنیم . چون فایرفوکس خودش یه اتوتایپ خیلی پیشرفته داره . دیدید که نسخه 3 واقعا اتوتایپش عالیه حتی عکس اون ساسیت رو بهتون نشون می ده . و وقتی چیزی تایپ می کنید فقط دنبال اونایی نیست که کلمه تایپ شده با اون شروع بشه . بلکه تو قمت های مختلف URL دنبال اون کلمه می گرده . احتمالا یه کمپوننت خاص برا این کار نوشتن .

امکان تغییر بانک اطلاعاتی به قابلیت ها اضافه بشه
اگر بتونیم این کار رو شروع کنیم . این موارد همون طور که گفتی چیز خاصی نیستند .

باید کلیدهای مثل Home و End و Page Up و Page Down هم
اضافه بشه.
این لیست ها معمولا یه تعداد محدودی کلمه رو نشون می دن مثلا 10 تا و این کلیدا لازمم هم نیست .
در ضمن تو برنامه بابی 7 من تست کردم کلید های Hone و End و ... فقط برای خود تکسباکس کار می کنن نه برای لیست

ممنون به خاطر نکات
 

جدیدترین ارسال ها

بالا