تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
فهم احداث لوحة المفاتيح واستبدال حروف ومنع حروف
#1
اولا لنرى الكود التالي:

كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if NOT (key IN ['0'..'9', '-', #13]) then
key := #0;

end;

هنا يتم مقارنة الحرف المدخل بلوحة المفاتيح اذا كان يساوي من 0 الى 9 اي رقم يمر  والا سيتم منعه او اذا كان المفتاح Enter او المسافة
لاحظ اننا نكتب اول رقم 0 تم نقطتين تم اخر رقم اي من 0 الى الرقم 9

يمكن استخدام الثوابت واختيارها للاسم بدل الارقام مثلا المفتاح Enter رقمه 13 والثابت له vk_Return 

وهنا قائمة بكل الارقام للمفاتيح والتوابث لها
https://www.mods.com.au/budapi_docs/Virt...0Codes.htm


في الوحدة Windows.WindowsAPi يمكننا ان نجدها ايضا

كود :
{ Virtual Keys, Standard Set }
 {$EXTERNALSYM VK_LBUTTON}
 VK_LBUTTON = vkLButton; {1}
 {$EXTERNALSYM VK_RBUTTON}
 VK_RBUTTON = vkRButton; {2}
 {$EXTERNALSYM VK_CANCEL}
 VK_CANCEL = vkCancel; {3}
 {$EXTERNALSYM VK_MBUTTON}
 VK_MBUTTON = vkMButton; {4}  { NOT contiguous with L & RBUTTON }
 {$EXTERNALSYM VK_XBUTTON1}
 VK_XBUTTON1 = vkXButton1; {5}
 {$EXTERNALSYM VK_XBUTTON2}
 VK_XBUTTON2 = vkXButton2; {6}
 {$EXTERNALSYM VK_BACK}
 VK_BACK = vkBack; {8}
 {$EXTERNALSYM VK_TAB}
 VK_TAB = vkTab; {9}
 {$EXTERNALSYM VK_CLEAR}
 VK_CLEAR = vkClear; {12}
 {$EXTERNALSYM VK_RETURN}
 VK_RETURN = vkReturn; {13}
 {$EXTERNALSYM VK_SHIFT}
 VK_SHIFT = vkShift; { $10, 16}
 {$EXTERNALSYM VK_CONTROL}
 VK_CONTROL = vkControl; {17}
 {$EXTERNALSYM VK_MENU}
 VK_MENU = vkMenu; {18}
 {$EXTERNALSYM VK_PAUSE}
 VK_PAUSE = vkPause; {19}
 {$EXTERNALSYM VK_CAPITAL}
 VK_CAPITAL = vkCapital; {20}
 {$EXTERNALSYM VK_KANA }
 VK_KANA = vkKana; {21}
 {$EXTERNALSYM VK_HANGUL }
 VK_HANGUL = vkHangul; {22}
 {$EXTERNALSYM VK_JUNJA }
 VK_JUNJA = vkJunja; {23}
 {$EXTERNALSYM VK_FINAL }
 VK_FINAL = vkFinal; {24}
 {$EXTERNALSYM VK_HANJA }
 VK_HANJA = vkHanja; {25}
 {$EXTERNALSYM VK_KANJI }
 VK_KANJI = vkKanji; {26}
 {$EXTERNALSYM VK_CONVERT }
 VK_CONVERT = vkConvert; {28}
 {$EXTERNALSYM VK_NONCONVERT }
 VK_NONCONVERT = vkNonConvert; {29}
 {$EXTERNALSYM VK_ACCEPT }
 VK_ACCEPT = vkAccept; {30}
 {$EXTERNALSYM VK_MODECHANGE }
 VK_MODECHANGE = vkModeChange; {31}
 {$EXTERNALSYM VK_ESCAPE}
 VK_ESCAPE = vkEscape; {27}
 {$EXTERNALSYM VK_SPACE}
 VK_SPACE = vkSpace; { $20}
 {$EXTERNALSYM VK_PRIOR}
 VK_PRIOR = vkPrior; {33}
 {$EXTERNALSYM VK_NEXT}
 VK_NEXT = vkNext; {34}
 {$EXTERNALSYM VK_END}
 VK_END = vkEnd; {35}
 {$EXTERNALSYM VK_HOME}
 VK_HOME = vkHome; {35}
 {$EXTERNALSYM VK_LEFT}
 VK_LEFT = vkLeft; {37}
 {$EXTERNALSYM VK_UP}
 VK_UP = vkUp; {38}
 {$EXTERNALSYM VK_RIGHT}
 VK_RIGHT = vkRight; {39}
 {$EXTERNALSYM VK_DOWN}
 VK_DOWN = vkDown; {40}
 {$EXTERNALSYM VK_SELECT}
 VK_SELECT = vkSelect; {41}
 {$EXTERNALSYM VK_PRINT}
 VK_PRINT = vkPrint; {42}
 {$EXTERNALSYM VK_EXECUTE}
 VK_EXECUTE = vkExecute; {43}
 {$EXTERNALSYM VK_SNAPSHOT}
 VK_SNAPSHOT = vkSnapShot; {44}
 {$EXTERNALSYM VK_INSERT}
 VK_INSERT = vkInsert; {45}
 {$EXTERNALSYM VK_DELETE}
 VK_DELETE = vkDelete; {46}
 {$EXTERNALSYM VK_HELP}
 VK_HELP = vkHelp; {47}
{ VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) }
{ VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }
 {$EXTERNALSYM VK_LWIN}
 VK_LWIN = vkLWin; {91}
 {$EXTERNALSYM VK_RWIN}
 VK_RWIN = vkRWin; {92}
 {$EXTERNALSYM VK_APPS}
 VK_APPS = vkApps; {93}
 {$EXTERNALSYM VK_SLEEP}
 VK_SLEEP = vkSleep; {95}
 {$EXTERNALSYM VK_NUMPAD0}
 VK_NUMPAD0 = vkNumpad0; {96}
 {$EXTERNALSYM VK_NUMPAD1}
 VK_NUMPAD1 = vkNumpad1; {97}
 {$EXTERNALSYM VK_NUMPAD2}
 VK_NUMPAD2 = vkNumpad2; {98}
 {$EXTERNALSYM VK_NUMPAD3}
 VK_NUMPAD3 = vkNumpad3; {99}
 {$EXTERNALSYM VK_NUMPAD4}
 VK_NUMPAD4 = vkNumpad4; {100}
 {$EXTERNALSYM VK_NUMPAD5}
 VK_NUMPAD5 = vkNumpad5; {101}
 {$EXTERNALSYM VK_NUMPAD6}
 VK_NUMPAD6 = vkNumpad6; {102}
 {$EXTERNALSYM VK_NUMPAD7}
 VK_NUMPAD7 = vkNumpad7; {103}
 {$EXTERNALSYM VK_NUMPAD8}
 VK_NUMPAD8 = vkNumpad8; {104}
 {$EXTERNALSYM VK_NUMPAD9}
 VK_NUMPAD9 = vkNumpad9; {105}
 {$EXTERNALSYM VK_MULTIPLY}
 VK_MULTIPLY = vkMultiply; {106}
 {$EXTERNALSYM VK_ADD}
 VK_ADD = vkAdd; {107}
 {$EXTERNALSYM VK_SEPARATOR}
 VK_SEPARATOR = vkSeparator; {108}
 {$EXTERNALSYM VK_SUBTRACT}
 VK_SUBTRACT = vkSubtract; {109}
 {$EXTERNALSYM VK_DECIMAL}
 VK_DECIMAL = vkDecimal; {110}
 {$EXTERNALSYM VK_DIVIDE}
 VK_DIVIDE = vkDivide; {111}
 {$EXTERNALSYM VK_F1}
 VK_F1 = vkF1; {112}
 {$EXTERNALSYM VK_F2}
 VK_F2 = vkF2; {113}
 {$EXTERNALSYM VK_F3}
 VK_F3 = vkF3; {114}
 {$EXTERNALSYM VK_F4}
 VK_F4 = vkF4; {115}
 {$EXTERNALSYM VK_F5}
 VK_F5 = vkF5; {116}
 {$EXTERNALSYM VK_F6}
 VK_F6 = vkF6; {117}
 {$EXTERNALSYM VK_F7}
 VK_F7 = vkF7; {118}
 {$EXTERNALSYM VK_F8}
 VK_F8 = vkF8; {119}
 {$EXTERNALSYM VK_F9}
 VK_F9 = vkF9; {120}
 {$EXTERNALSYM VK_F10}
 VK_F10 = vkF10; {121}
 {$EXTERNALSYM VK_F11}
 VK_F11 = vkF11; {122}
 {$EXTERNALSYM VK_F12}
 VK_F12 = vkF12; {123}
 {$EXTERNALSYM VK_F13}
 VK_F13 = vkF13; {124}
 {$EXTERNALSYM VK_F14}
 VK_F14 = vkF14; {125}
 {$EXTERNALSYM VK_F15}
 VK_F15 = vkF15; {126}
 {$EXTERNALSYM VK_F16}
 VK_F16 = vkF16; {127}
 {$EXTERNALSYM VK_F17}
 VK_F17 = vkF17; {128}
 {$EXTERNALSYM VK_F18}
 VK_F18 = vkF18; {129}
 {$EXTERNALSYM VK_F19}
 VK_F19 = vkF19; {130}
 {$EXTERNALSYM VK_F20}
 VK_F20 = vkF20; {131}
 {$EXTERNALSYM VK_F21}
 VK_F21 = vkF21; {132}
 {$EXTERNALSYM VK_F22}
 VK_F22 = vkF22; {133}
 {$EXTERNALSYM VK_F23}
 VK_F23 = vkF23; {134}
 {$EXTERNALSYM VK_F24}
 VK_F24 = vkF24; {135}
 {$EXTERNALSYM VK_NUMLOCK}
 VK_NUMLOCK = vkNumLock; {144}
 {$EXTERNALSYM VK_SCROLL}
 VK_SCROLL = vkScroll; {145}
{ VK_L & VK_R - left and right Alt, Ctrl and Shift virtual keys.
 Used only as parameters to GetAsyncKeyState() and GetKeyState().
 No other API or message will distinguish left and right keys in this way. }
 {$EXTERNALSYM VK_LSHIFT}
 VK_LSHIFT = vkLShift; {160}
 {$EXTERNALSYM VK_RSHIFT}
 VK_RSHIFT = vkRShift; {161}
 {$EXTERNALSYM VK_LCONTROL}
 VK_LCONTROL = vkLControl; {162}
 {$EXTERNALSYM VK_RCONTROL}
 VK_RCONTROL = vkRControl; {163}
 {$EXTERNALSYM VK_LMENU}
 VK_LMENU = vkLMenu; {163}
 {$EXTERNALSYM VK_RMENU}
 VK_RMENU = vkRMenu; {165}

 {$EXTERNALSYM VK_BROWSER_BACK}
 VK_BROWSER_BACK = 166;
 {$EXTERNALSYM VK_BROWSER_FORWARD}
 VK_BROWSER_FORWARD = 167;
 {$EXTERNALSYM VK_BROWSER_REFRESH}
 VK_BROWSER_REFRESH = 168;
 {$EXTERNALSYM VK_BROWSER_STOP}
 VK_BROWSER_STOP = 169;
 {$EXTERNALSYM VK_BROWSER_SEARCH}
 VK_BROWSER_SEARCH = 170;
 {$EXTERNALSYM VK_BROWSER_FAVORITES}
 VK_BROWSER_FAVORITES = 171;
 {$EXTERNALSYM VK_BROWSER_HOME}
 VK_BROWSER_HOME = 172;
 {$EXTERNALSYM VK_VOLUME_MUTE}
 VK_VOLUME_MUTE = 173;
 {$EXTERNALSYM VK_VOLUME_DOWN}
 VK_VOLUME_DOWN = 174;
 {$EXTERNALSYM VK_VOLUME_UP}
 VK_VOLUME_UP = 175;
 {$EXTERNALSYM VK_MEDIA_NEXT_TRACK}
 VK_MEDIA_NEXT_TRACK = 176;
 {$EXTERNALSYM VK_MEDIA_PREV_TRACK}
 VK_MEDIA_PREV_TRACK = 177;
 {$EXTERNALSYM VK_MEDIA_STOP}
 VK_MEDIA_STOP = 178;
 {$EXTERNALSYM VK_MEDIA_PLAY_PAUSE}
 VK_MEDIA_PLAY_PAUSE = 179;
 {$EXTERNALSYM VK_LAUNCH_MAIL}
 VK_LAUNCH_MAIL = 180;
 {$EXTERNALSYM VK_LAUNCH_MEDIA_SELECT}
 VK_LAUNCH_MEDIA_SELECT = 181;
 {$EXTERNALSYM VK_LAUNCH_APP1}
 VK_LAUNCH_APP1 = 182;
 {$EXTERNALSYM VK_LAUNCH_APP2}
 VK_LAUNCH_APP2 = 183;

 {$EXTERNALSYM VK_OEM_1}
 VK_OEM_1 = 186;
 {$EXTERNALSYM VK_OEM_PLUS}
 VK_OEM_PLUS = 187;
 {$EXTERNALSYM VK_OEM_COMMA}
 VK_OEM_COMMA = 188;
 {$EXTERNALSYM VK_OEM_MINUS}
 VK_OEM_MINUS = 189;
 {$EXTERNALSYM VK_OEM_PERIOD}
 VK_OEM_PERIOD = 190;
 {$EXTERNALSYM VK_OEM_2}
 VK_OEM_2 = 191;
 {$EXTERNALSYM VK_OEM_3}
 VK_OEM_3 = 192;
 {$EXTERNALSYM VK_OEM_4}
 VK_OEM_4 = 219;
 {$EXTERNALSYM VK_OEM_5}
 VK_OEM_5 = 220;
 {$EXTERNALSYM VK_OEM_6}
 VK_OEM_6 = 221;
 {$EXTERNALSYM VK_OEM_7}
 VK_OEM_7 = 222;
 {$EXTERNALSYM VK_OEM_8}
 VK_OEM_8 = 223;
 {$EXTERNALSYM VK_OEM_102}
 VK_OEM_102 = 226;
 {$EXTERNALSYM VK_PACKET}
 VK_PACKET = 231;
 {$EXTERNALSYM VK_PROCESSKEY}
 VK_PROCESSKEY = vkProcessKey; {229}
 {$EXTERNALSYM VK_ATTN}
 VK_ATTN = vkAttn; {246}
 {$EXTERNALSYM VK_CRSEL}
 VK_CRSEL = vkCrsel; {247}
 {$EXTERNALSYM VK_EXSEL}
 VK_EXSEL = vkExsel; {248}
 {$EXTERNALSYM VK_EREOF}
 VK_EREOF = vkErEof; {249}
 {$EXTERNALSYM VK_PLAY}
 VK_PLAY = vkPlay; {250}
 {$EXTERNALSYM VK_ZOOM}
 VK_ZOOM = vkZoom; {251}
 {$EXTERNALSYM VK_NONAME}
 VK_NONAME = vkNoName; {252}
 {$EXTERNALSYM VK_PA1}
 VK_PA1 = vkPA1; {253}
 {$EXTERNALSYM VK_OEM_CLEAR}
 VK_OEM_CLEAR = vkOemClear; {254}





كود :
if Key in ['a'..'z'] + ['A'..'Z'] then Key := #0


هنا الحروف الكبيرة والصغيرة لاحظ اننا نكتب الحرف اول تم الحرف الاخير يعني من اول حرف الى اخر خرف باللغة

كود :
if Key in ['a'..'z', 'A'..'Z'] then
   Key := #0

او بهذا الشكل



إقتباس :
كود :
if HiWord(GetKeyState(vk_PageUp)) <> 0 then
ShowMessage('PageUp - DOWN')
else
ShowMessage('PageUp - UP') ;


لبعض المفاتيح الخاصة مثل المفتاح TAB او غيره يمكننا استخدام هذه الطريقة في الكشف .

كود :
if NOT (key IN ['0'..'9', '-', #13, #8]) then begin
key := #0;
exit;
end;
هنا شرطين منع نفس السابق مع علامة (-) 


كود :
if (key = '-') and (Length(Edit1.Text) > 0) then
key := #0;

هنا منع علامة (-) فقط بحال كانت الاداة تحتوي على اكثر من حرف يعني يمكنك ادخالها فقط اول مرة في البداية


كود :
if Key = 'أ' then
   Key := 'ا'

هنا نستبدل الحرف (أ) عليه همزة بحرف بدون همزة لمنع ادخال حروف مختلفة يمكنك استبدال اي حروف مثل الألف والهمزة والياء المكسورة والتاء المربوطة
الرد
تم الشكر بواسطة: sendbad100 , asemshahen5


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم