📄 ikeyboard.pas
字号:
(FButtonList.Objects[i] as TiButton).MouseDown := False;
inherited;
end;
//****************************************************************************************************************************************************
function TiKeyBoard.GetRowSize(RowList: TStringList): Integer;
var
x : Integer;
begin
Result := 0;
for x := 0 to RowList.Count-1 do
Result := Result + (RowList.Objects[x] as TiKeyBoardButton).Size;
end;
//****************************************************************************************************************************************************
procedure TiKeyBoard.CalcRects;
var
x : Integer;
Row : Integer;
Col : Integer;
Button : TiKeyBoardButton;
RowIndex : Integer;
RowList : TStringList;
CurrentLeft : Integer;
RowSize : Integer;
RowSizeMax : Integer;
XSizePixels : Integer;
YSizePixels : Integer;
XStart : Integer;
YStart : Integer;
begin
RemoveAllRows;
for x := 0 to FButtonList.Count-1 do
begin
Button := (FButtonList.Objects[x] as TiKeyBoardButton);
RowIndex := FRowListManager.IndexOf(IntToStr(Button.Row));
if RowIndex = - 1 then
begin
RowList := TStringList.Create;
FRowListManager.AddObject(IntToStr(Button.Row), RowList);
end
else RowList := FRowListManager.Objects[RowIndex] as TStringList;
RowList.AddObject('', Button);
end;
RowSizeMax := 1;
for x := 0 to FRowListManager.Count-1 do
begin
RowSize := GetRowSize(FRowListManager.Objects[x] as TStringList);
if RowSize > RowSizeMax then RowSizeMax := RowSize;
end;
XSizePixels := (Width -2*FOuterMargin ) div RowSizeMax;
YSizePixels := (Height-2*FOuterMargin-FSecondRowMargin) div FRowListManager.Count;
XStart := (Width - XSizePixels*RowSizeMax ) div 2;
YStart := (Height - YSizePixels*FRowListManager.Count -FSecondRowMargin) div 2;
for Row := 0 to FRowListManager.Count-1 do
begin
CurrentLeft := XStart;
RowList := FRowListManager.Objects[Row] as TStringList;
for Col := 0 to RowList.Count-1 do
begin
Button := (RowList.Objects[Col] as TiKeyBoardButton);
if Row = 0 then
Button.Top := Button.Row * YSizePixels + YStart
else
Button.Top := Button.Row * YSizePixels + YStart + FSecondRowMargin;
if Button.DoubleHeight then
Button.Bottom := Button.Top + 2*YSizePixels
else
Button.Bottom := Button.Top + YSizePixels;
Button.Left := CurrentLeft;
Button.Right := CurrentLeft + XSizePixels*Button.Size;
CurrentLeft := Button.Right;
end;
end;
end;
//****************************************************************************************************************************************************
procedure TiKeyBoard.iPaintTo(Canvas: TCanvas);
var
i : Integer;
Button : TiKeyBoardButton;
begin
with Canvas do
begin
CalcRects;
DrawBackGround(Canvas, BackGroundColor);
Font.Assign(FFont);
Brush.Style := bsClear;
for i := 0 to FButtonList.Count-1 do
begin
Button := (FButtonList.Objects[i] as TiKeyBoardButton);
if not Button.Visible then Continue;
if Button.Style = ikbbsSpacer then Continue;
Button.Draw(Canvas);
end;
end;
end;
//*************************************************************************************************************************************
procedure TiKeyBoard.LoadKeyData(Index, VirtualKeyCode: Integer; Style: TiKeyBoardButtonStyle; CaptionStandard, CaptionShift: String; AcceptLock: Boolean);
begin
KeyDataArray[Index].Style := Style;
KeyDataArray[Index].CaptionStandard := CaptionStandard;
KeyDataArray[Index].CaptionShift := CaptionShift;
KeyDataArray[Index].VirtualKeyCode := Index;
KeyDataArray[Index].AcceptLock := AcceptLock;
end;
//*************************************************************************************************************************************
procedure TiKeyBoard.LoadKeyDataArray;
begin
LoadKeyData(iVK_BACK, 8, ikbbsStandard, 'bksp', '', False);
LoadKeyData(iVK_TAB, 9, ikbbsStandard, 'Tab', '', False);
// 10 Undefined
// 11 Undefined
// 12 iVK_Clear
LoadKeyData(iVK_RETURN, 13, ikbbsStandard, 'Enter','', False);
// 14 Undefined
// 15 Undefined
LoadKeyData(iVK_SHIFT, 16, ikbbsShift, 'Shift','', False);
LoadKeyData(iVK_CONTROL, 17, ikbbsCtrl, 'Ctrl', '', False);
LoadKeyData(iVK_MENU, 18, ikbbsAlt, 'Alt', '', False);
LoadKeyData(iVK_PAUSE, 19, ikbbsStandard, 'brk', '', False);
LoadKeyData(iVK_CAPITAL, 20, ikbbsLock, 'Lock', '', False);
// 21 iVK_KANA or iVK_HANGUEL or iVK_HANGUL
// 22 Undefined
// 23 iVK_JUNJA
// 24 iVK_FINAL
// 25 iVK_HANJA or iVK_KANJI
// 26 Undefined
LoadKeyData(iVK_ESCAPE, 27, ikbbsStandard, 'Esc', '', False);
// 28 iVK_CONVERT (IME)
// 29 iVK_NONCONVERT(IME)
// 30 iVK_ACCEPT(IME)
// 31 iVK_MODECHANGE(IME)
LoadKeyData(iVK_SPACE, 32, ikbbsStandard, '', '', False);
LoadKeyData(iVK_PRIOR, 33, ikbbsStandard, 'pup', '', False);
LoadKeyData(iVK_NEXT, 34, ikbbsStandard, 'pdn', '', False);
LoadKeyData(iVK_END, 35, ikbbsStandard, 'end', '', False);
LoadKeyData(iVK_HOME, 36, ikbbsStandard, 'hm', '', False);
LoadKeyData(iVK_LEFT, 37, ikbbsStandard, 'L', '', False);
LoadKeyData(iVK_UP, 38, ikbbsStandard, 'U', '', False);
LoadKeyData(iVK_RIGHT, 39, ikbbsStandard, 'R', '', False);
LoadKeyData(iVK_DOWN, 40, ikbbsStandard, 'D', '', False);
// 41 iVK_SELECT
// 42 iVK_PRINT
// 43 iVK_EXECUTE
LoadKeyData(iVK_SNAPSHOT, 44, ikbbsStandard, 'psc', '', False);
LoadKeyData(iVK_INSERT, 45, ikbbsStandard, 'ins', '', False);
LoadKeyData(iVK_DELETE, 46, ikbbsStandard, 'del', '', False);
// 47 iVK_HELP
LoadKeyData(iVK_0, 48, ikbbsStandard, '0', ')', False);
LoadKeyData(iVK_1, 49, ikbbsStandard, '1', '!', False);
LoadKeyData(iVK_2, 50, ikbbsStandard, '2', '@', False);
LoadKeyData(iVK_3, 51, ikbbsStandard, '3', '#', False);
LoadKeyData(iVK_4, 52, ikbbsStandard, '4', '$', False);
LoadKeyData(iVK_5, 53, ikbbsStandard, '5', '%', False);
LoadKeyData(iVK_6, 54, ikbbsStandard, '6', '^', False);
LoadKeyData(iVK_7, 55, ikbbsStandard, '7', '&', False);
LoadKeyData(iVK_8, 56, ikbbsStandard, '8', '*', False);
LoadKeyData(iVK_9, 57, ikbbsStandard, '9', '(', False);
// 58 Undefined
// 59 Undefined
// 60
// 61
// 62
// 63
// 64
LoadKeyData(iVK_A, 65, ikbbsStandard, 'a', 'A', True);
LoadKeyData(iVK_B, 66, ikbbsStandard, 'b', 'B', True);
LoadKeyData(iVK_C, 67, ikbbsStandard, 'c', 'C', True);
LoadKeyData(iVK_D, 68, ikbbsStandard, 'd', 'D', True);
LoadKeyData(iVK_E, 69, ikbbsStandard, 'e', 'E', True);
LoadKeyData(iVK_F, 70, ikbbsStandard, 'f', 'F', True);
LoadKeyData(iVK_G, 71, ikbbsStandard, 'g', 'G', True);
LoadKeyData(iVK_H, 72, ikbbsStandard, 'h', 'H', True);
LoadKeyData(iVK_I, 73, ikbbsStandard, 'i', 'I', True);
LoadKeyData(iVK_J, 74, ikbbsStandard, 'j', 'J', True);
LoadKeyData(iVK_K, 75, ikbbsStandard, 'k', 'K', True);
LoadKeyData(iVK_L, 76, ikbbsStandard, 'l', 'L', True);
LoadKeyData(iVK_M, 77, ikbbsStandard, 'm', 'M', True);
LoadKeyData(iVK_N, 78, ikbbsStandard, 'n', 'N', True);
LoadKeyData(iVK_O, 79, ikbbsStandard, 'o', 'O', True);
LoadKeyData(iVK_P, 80, ikbbsStandard, 'p', 'P', True);
LoadKeyData(iVK_Q, 81, ikbbsStandard, 'q', 'Q', True);
LoadKeyData(iVK_R, 82, ikbbsStandard, 'r', 'R', True);
LoadKeyData(iVK_S, 83, ikbbsStandard, 's', 'S', True);
LoadKeyData(iVK_T, 84, ikbbsStandard, 't', 'T', True);
LoadKeyData(iVK_U, 85, ikbbsStandard, 'u', 'U', True);
LoadKeyData(iVK_V, 86, ikbbsStandard, 'v', 'V', True);
LoadKeyData(iVK_W, 87, ikbbsStandard, 'w', 'W', True);
LoadKeyData(iVK_X, 88, ikbbsStandard, 'x', 'X', True);
LoadKeyData(iVK_Y, 89, ikbbsStandard, 'y', 'Y', True);
LoadKeyData(iVK_Z, 90, ikbbsStandard, 'z', 'Z', True);
LoadKeyData(iVK_LWIN, 91, ikbbsStandard, 'W', '', False);
LoadKeyData(iVK_RWIN, 92, ikbbsStandard, 'W', '', False);
LoadKeyData(iVK_APPS, 93, ikbbsStandard, 'L', '', False);
// 94 Reserved
// 95 iVK_SLEEP
LoadKeyData(iVK_NUMPAD0, 96, ikbbsStandard, '0', '', False);
LoadKeyData(iVK_NUMPAD1, 97, ikbbsStandard, '1', '', False);
LoadKeyData(iVK_NUMPAD2, 98, ikbbsStandard, '2', '', False);
LoadKeyData(iVK_NUMPAD3, 99, ikbbsStandard, '3', '', False);
LoadKeyData(iVK_NUMPAD4, 100, ikbbsStandard, '4', '', False);
LoadKeyData(iVK_NUMPAD5, 101, ikbbsStandard, '5', '', False);
LoadKeyData(iVK_NUMPAD6, 102, ikbbsStandard, '6', '', False);
LoadKeyData(iVK_NUMPAD7, 103, ikbbsStandard, '7', '', False);
LoadKeyData(iVK_NUMPAD8, 104, ikbbsStandard, '8', '', False);
LoadKeyData(iVK_NUMPAD9, 105, ikbbsStandard, '9', '', False);
LoadKeyData(iVK_MULTIPLY, 106, ikbbsStandard, '*', '', False);
LoadKeyData(iVK_ADD, 107, ikbbsStandard, '+', '', False);
// 108 iVK_SEPARATOR
LoadKeyData(iVK_SUBTRACT, 109, ikbbsStandard, '-', '', False);
LoadKeyData(iVK_DECIMAL, 110, ikbbsStandard, '.', '', False);
LoadKeyData(iVK_DIVIDE, 111, ikbbsStandard, '/', '', False);
LoadKeyData(iVK_F1, 112, ikbbsStandard, 'F1', '', False);
LoadKeyData(iVK_F2, 113, ikbbsStandard, 'F2', '', False);
LoadKeyData(iVK_F3, 114, ikbbsStandard, 'F3', '', False);
LoadKeyData(iVK_F4, 115, ikbbsStandard, 'F4', '', False);
LoadKeyData(iVK_F5, 116, ikbbsStandard, 'F5', '', False);
LoadKeyData(iVK_F6, 117, ikbbsStandard, 'F6', '', False);
LoadKeyData(iVK_F7, 118, ikbbsStandard, 'F7', '', False);
LoadKeyData(iVK_F8, 119, ikbbsStandard, 'F8', '', False);
LoadKeyData(iVK_F9, 120, ikbbsStandard, 'F9', '', False);
LoadKeyData(iVK_F10, 121, ikbbsStandard, 'F10', '', False);
LoadKeyData(iVK_F11, 122, ikbbsStandard, 'F11', '', False);
LoadKeyData(iVK_F12, 123, ikbbsStandard, 'F12', '', False);
// 124 iVK_F13
// 125 iVK_F14
// 126 iVK_F15
// 127 iVK_F16
// 128 iVK_F17
// 129 iVK_F18
// 130 iVK_F19
// 131 iVK_F20
// 132 iVK_F21
// 133 iVK_F22
// 134 iVK_F23
// 135 iVK_F24
// 136 Unassigned
// ... ...
// 143 Unassigned
LoadKeyData(iVK_NUMLOCK, 144, ikbbsNumLock, 'nlk', '', False);
LoadKeyData(iVK_SCROLL, 145, ikbbsScroll, 'slk', '', False);
// 146 OEM Specific
// ... OEM Specific
// 150 OEM Specific
// 151 Unassigned
// ... Unassigned
// 159 Unassigned
LoadKeyData(iVK_LSHIFT, 160, ikbbsShift, 'Shift','', False);
LoadKeyData(iVK_RSHIFT, 161, ikbbsShift, 'Shift','', False);
LoadKeyData(iVK_LCONTROL, 162, ikbbsCtrl, 'Ctrl', '', False);
LoadKeyData(iVK_RCONTROL, 163, ikbbsCtrl, 'Ctrl', '', False);
LoadKeyData(iVK_LMENU, 164, ikbbsAlt, 'Alt', '', False);
LoadKeyData(iVK_RMENU, 165, ikbbsAlt, 'Alt', '', False);
LoadKeyData(iVK_OEM_1, 186, ikbbsStandard, ';', ':', False);
LoadKeyData(iVK_OEM_PLUS, 187, ikbbsStandard, '=', '+', False);
LoadKeyData(iVK_OEM_COMMA, 188, ikbbsStandard, ',', '<', False);
LoadKeyData(iVK_OEM_MINUS, 189, ikbbsStandard, '-', '_', False);
LoadKeyData(iVK_OEM_PERIOD, 190, ikbbsStandard, '.', '>', False);
LoadKeyData(iVK_OEM_2, 191, ikbbsStandard, '/', '?', False);
LoadKeyData(iVK_OEM_3, 192, ikbbsStandard, '`', '~', False);
LoadKeyData(iVK_OEM_4, 219, ikbbsStandard, '[', '{', False);
LoadKeyData(iVK_OEM_5, 220, ikbbsStandard, '\', '|', False);
LoadKeyData(iVK_OEM_6, 221, ikbbsStandard, ']', '}', False);
LoadKeyData(iVK_OEM_7, 222, ikbbsStandard, '''', '"', False);
end;
//****************************************************************************************************************************************************
procedure TiKeyBoard.Setup104;
var
Row : Integer;
begin
RemoveAllButtons;
Row := 0;
CreateButton(iVK_ESCAPE, Row, 2, False);
CreateSpacer( Row, 2);
CreateButton(iVK_F1, Row, 2, False);
CreateButton(iVK_F2, Row, 2, False);
CreateButton(iVK_F3, Row, 2, False);
CreateButton(iVK_F4, Row, 2, False);
CreateSpacer( Row, 1);
CreateButton(iVK_F5, Row, 2, False);
CreateButton(iVK_F6, Row, 2, False);
CreateButton(iVK_F7, Row, 2, False);
CreateButton(iVK_F8, Row, 2, False);
CreateSpacer( Row, 1);
CreateButton(iVK_F9, Row, 2, False);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -