PDA

View Full Version : سوال: چطور می تونم متن یک کادر جستجو رو در برنامه دیگه دستکاری کنم؟



mbshareat
سه شنبه 22 فروردین 1391, 15:17 عصر
سلام و خدا قوت
من یه برنامه دارم که تکه هایی از متن کتاب رو لیست می کنه و یک برنامه کاری هم به ما داند که با اون می تونیم متن رو جستجو بدیم و ببینیم متن در قرآن کریم اومده یا نه؟
می خوام به کامپوننتی از نوع CCSuperEdit !!! که جستجو رو انجام میده متن رو ارسال کنم با SendMessage و WM_SetText نتونستم متن داخل کادر جستجو رو عوض کنم چون ربطی به محتوای کادر جستجو نداره.
با WM_Char تونستم عمل BackSpace رو شبیه سازی کنم ولی برنامم ندونه چقدر باید حرف به حرف محتوای کادر جستجو رو پاک کنه چندان به درد نمی خوره.
حالا سوال من اینه که چطور می تونم به ترتیب فشار این کلیدها رو به کادر جستجوی برنامه قرآن ارسال کنم؟:

Home
Shift+End
Delete یا BackSpace

البته من که چشم آب نمی خوره بشه از WM_KeyDown استفاده کرد چون من سعی کردم 'A' رو بهش ارسال کنم اتفاقی نیفتاد.
چطور می تونم بفهمم که پیامهایی که در یونیت Messages لیست شده چطور استفاده کنم؟
اگه بشه من می خوام Position یک TrackBar رو هم تو یه برنامه دیگه دستکاری کنم.
(الآن با ارسال پیغام فشار کلید راست و یا چپ می تونم ولی روش خنده داریه!!)
اگه ممکنه یه نگاهی به این برنامه بیندارین:(اصل برنامه مال برادر مجتبی تاجیکه!)

85540

mbshareat
سه شنبه 22 فروردین 1391, 21:56 عصر
سلام
بعد از کلی جستجو یه چنین کدی پیدا کردم:

keybd_event(VK_SHIFT, 0, 0, 0);
PostMessage(EditHand,WM_KeyDown,36,0);
PostMessage(EditHand,WM_KeyDown,46,0);
ولی کلید Shift رو در حال فشرده حساب می کنه که باید با این کد درست بشه:

keybd_event(VK_SHIFT, 0,KEYEVENTF_KEYUP, 0);
ولی با کمال تعجب وقتی این یک خط رو به سطرهای بالا اضافه می کنم، کدهای قبلی هم بی تاثیر می شند!!

mbshareat
سه شنبه 22 فروردین 1391, 22:01 عصر
این کد رو هم امتحان کردم باعث میشه تنها یک کارکتر حذف بشه!:


Var
XKeyState, XNewKeyState: TKeyboardState;
Begin
GetKeyboardState(XKeyState);
XNewKeyState := XKeyState;
XNewKeyState[VK_SHIFT] := $81;
SetKeyboardState(XNewKeyState);
PostMessage(EditHand,WM_KeyDown,36,0);
PostMessage(EditHand,WM_KeyDown,46,0);
SetKeyboardState(XKeyState);
end;

mbshareat
سه شنبه 22 فروردین 1391, 22:52 عصر
باز هم سلام

application.ProcessMessages; رو اضافه کردم مشکل حل شد!