📄 syneditkeycmds.pas
字号:
x: integer;
begin
if Source is TSynEditKeyStrokes then
begin
Clear;
for x := 0 to TSynEditKeyStrokes(Source).Count-1 do
begin
with Add do
Assign(TSynEditKeyStrokes(Source)[x]);
end;
end else
inherited Assign(Source);
end;
constructor TSynEditKeyStrokes.Create(AOwner: TPersistent);
begin
inherited Create(TSynEditKeyStroke);
FOwner := AOwner;
end;
function TSynEditKeyStrokes.FindCommand(Cmd: TSynEditorCommand): integer;
var
x: integer;
begin
Result := -1;
for x := 0 to Count-1 do
if Items[x].Command = Cmd then
begin
Result := x;
break;
end;
end;
function TSynEditKeyStrokes.FindKeycode(Code: word; SS: TShiftState): integer;
var
x: integer;
begin
Result := -1;
for x := 0 to Count-1 do
if (Items[x].Key = Code) and (Items[x].Shift = SS) and (Items[x].Key2 = 0)
then begin
Result := x;
break;
end;
end;
function TSynEditKeyStrokes.FindKeycode2(Code1: word; SS1: TShiftState;
Code2: word; SS2: TShiftState): integer;
var
x: integer;
begin
Result := -1;
for x := 0 to Count-1 do
if (Items[x].Key = Code1) and (Items[x].Shift = SS1) and
(Items[x].Key2 = Code2) and (Items[x].Shift2 = SS2) then
begin
Result := x;
break;
end;
end;
function TSynEditKeyStrokes.FindShortcut(SC: TShortcut): integer;
var
x: integer;
begin
Result := -1;
for x := 0 to Count-1 do
if Items[x].Shortcut = SC then
begin
Result := x;
break;
end;
end;
function TSynEditKeyStrokes.FindShortcut2(SC, SC2: TShortcut): integer;
var
x: integer;
begin
Result := -1;
for x := 0 to Count-1 do
if (Items[x].Shortcut = SC) and (Items[x].Shortcut2 = SC2) then
begin
Result := x;
break;
end;
end;
function TSynEditKeyStrokes.GetItem(Index: Integer): TSynEditKeyStroke;
begin
Result := TSynEditKeyStroke(inherited GetItem(Index));
end;
{$IFDEF SYN_COMPILER_3_UP}
function TSynEditKeyStrokes.GetOwner: TPersistent;
begin
Result := FOwner;
end;
{$ENDIF}
{begin} //ac 2000-07-05
procedure TSynEditKeyStrokes.LoadFromStream(AStream: TStream);
var
Num: integer;
begin
Clear;
AStream.Read(Num, SizeOf(Num));
while Num > 0 do begin
with Add do
LoadFromStream(AStream);
Dec(Num);
end;
end;
{end} //ac 2000-07-05
procedure TSynEditKeyStrokes.ResetDefaults;
begin
Clear;
AddKey(ecUp, SYNEDIT_UP, []);
AddKey(ecSelUp, SYNEDIT_UP, [ssShift]);
AddKey(ecScrollUp, SYNEDIT_UP, [ssCtrl]);
AddKey(ecDown, SYNEDIT_DOWN, []);
AddKey(ecSelDown, SYNEDIT_DOWN, [ssShift]);
AddKey(ecScrollDown, SYNEDIT_DOWN, [ssCtrl]);
AddKey(ecLeft, SYNEDIT_LEFT, []);
AddKey(ecSelLeft, SYNEDIT_LEFT, [ssShift]);
AddKey(ecWordLeft, SYNEDIT_LEFT, [ssCtrl]);
AddKey(ecSelWordLeft, SYNEDIT_LEFT, [ssShift,ssCtrl]);
AddKey(ecRight, SYNEDIT_RIGHT, []);
AddKey(ecSelRight, SYNEDIT_RIGHT, [ssShift]);
AddKey(ecWordRight, SYNEDIT_RIGHT, [ssCtrl]);
AddKey(ecSelWordRight, SYNEDIT_RIGHT, [ssShift,ssCtrl]);
AddKey(ecPageDown, SYNEDIT_NEXT, []);
AddKey(ecSelPageDown, SYNEDIT_NEXT, [ssShift]);
AddKey(ecPageBottom, SYNEDIT_NEXT, [ssCtrl]);
AddKey(ecSelPageBottom, SYNEDIT_NEXT, [ssShift,ssCtrl]);
AddKey(ecPageUp, SYNEDIT_PRIOR, []);
AddKey(ecSelPageUp, SYNEDIT_PRIOR, [ssShift]);
AddKey(ecPageTop, SYNEDIT_PRIOR, [ssCtrl]);
AddKey(ecSelPageTop, SYNEDIT_PRIOR, [ssShift,ssCtrl]);
AddKey(ecLineStart, SYNEDIT_HOME, []);
AddKey(ecSelLineStart, SYNEDIT_HOME, [ssShift]);
AddKey(ecEditorTop, SYNEDIT_HOME, [ssCtrl]);
AddKey(ecSelEditorTop, SYNEDIT_HOME, [ssShift,ssCtrl]);
AddKey(ecLineEnd, SYNEDIT_END, []);
AddKey(ecSelLineEnd, SYNEDIT_END, [ssShift]);
AddKey(ecEditorBottom, SYNEDIT_END, [ssCtrl]);
AddKey(ecSelEditorBottom, SYNEDIT_END, [ssShift,ssCtrl]);
AddKey(ecToggleMode, SYNEDIT_INSERT, []);
AddKey(ecCopy, SYNEDIT_INSERT, [ssCtrl]);
AddKey(ecCut, SYNEDIT_DELETE, [ssShift]);
AddKey(ecPaste, SYNEDIT_INSERT, [ssShift]);
AddKey(ecDeleteChar, SYNEDIT_DELETE, []);
AddKey(ecDeleteLastChar, SYNEDIT_BACK, []);
AddKey(ecDeleteLastChar, SYNEDIT_BACK, [ssShift]);
AddKey(ecDeleteLastWord, SYNEDIT_BACK, [ssCtrl]);
AddKey(ecUndo, SYNEDIT_BACK, [ssAlt]);
AddKey(ecRedo, SYNEDIT_BACK, [ssAlt,ssShift]);
AddKey(ecLineBreak, SYNEDIT_RETURN, []);
AddKey(ecLineBreak, SYNEDIT_RETURN, [ssShift]);
AddKey(ecTab, SYNEDIT_TAB, []);
AddKey(ecShiftTab, SYNEDIT_TAB, [ssShift]);
AddKey(ecContextHelp, SYNEDIT_F1, []);
AddKey(ecSelectAll, ord('A'), [ssCtrl]);
AddKey(ecCopy, ord('C'), [ssCtrl]);
AddKey(ecPaste, ord('V'), [ssCtrl]);
AddKey(ecCut, ord('X'), [ssCtrl]);
AddKey(ecBlockIndent, ord('I'), [ssCtrl,ssShift]);
AddKey(ecBlockUnindent, ord('U'), [ssCtrl,ssShift]);
AddKey(ecLineBreak, ord('M'), [ssCtrl]);
AddKey(ecInsertLine, ord('N'), [ssCtrl]);
AddKey(ecDeleteWord, ord('T'), [ssCtrl]);
AddKey(ecDeleteLine, ord('Y'), [ssCtrl]);
AddKey(ecDeleteEOL, ord('Y'), [ssCtrl,ssShift]);
AddKey(ecUndo, ord('Z'), [ssCtrl]);
AddKey(ecRedo, ord('Z'), [ssCtrl,ssShift]);
AddKey(ecGotoMarker0, ord('0'), [ssCtrl]);
AddKey(ecGotoMarker1, ord('1'), [ssCtrl]);
AddKey(ecGotoMarker2, ord('2'), [ssCtrl]);
AddKey(ecGotoMarker3, ord('3'), [ssCtrl]);
AddKey(ecGotoMarker4, ord('4'), [ssCtrl]);
AddKey(ecGotoMarker5, ord('5'), [ssCtrl]);
AddKey(ecGotoMarker6, ord('6'), [ssCtrl]);
AddKey(ecGotoMarker7, ord('7'), [ssCtrl]);
AddKey(ecGotoMarker8, ord('8'), [ssCtrl]);
AddKey(ecGotoMarker9, ord('9'), [ssCtrl]);
AddKey(ecSetMarker0, ord('0'), [ssCtrl,ssShift]);
AddKey(ecSetMarker1, ord('1'), [ssCtrl,ssShift]);
AddKey(ecSetMarker2, ord('2'), [ssCtrl,ssShift]);
AddKey(ecSetMarker3, ord('3'), [ssCtrl,ssShift]);
AddKey(ecSetMarker4, ord('4'), [ssCtrl,ssShift]);
AddKey(ecSetMarker5, ord('5'), [ssCtrl,ssShift]);
AddKey(ecSetMarker6, ord('6'), [ssCtrl,ssShift]);
AddKey(ecSetMarker7, ord('7'), [ssCtrl,ssShift]);
AddKey(ecSetMarker8, ord('8'), [ssCtrl,ssShift]);
AddKey(ecSetMarker9, ord('9'), [ssCtrl,ssShift]);
AddKey(ecNormalSelect, ord('N'), [ssCtrl,ssShift]);
AddKey(ecColumnSelect, ord('C'), [ssCtrl,ssShift]);
AddKey(ecLineSelect, ord('L'), [ssCtrl,ssShift]);
AddKey(ecMatchBracket, ord('B'), [ssCtrl,ssShift]);
end;
procedure TSynEditKeyStrokes.SetItem(Index: Integer; Value: TSynEditKeyStroke);
begin
inherited SetItem(Index, Value);
end;
{begin} //ac 2000-07-05
procedure TSynEditKeyStrokes.SaveToStream(AStream: TStream);
var
i, Num: integer;
begin
Num := Count;
AStream.Write(Num, SizeOf(Num));
for i := 0 to Num - 1 do
Items[i].SaveToStream(AStream);
end;
{end} //ac 2000-07-05
{begin} //ddh 10/16/01 "English" Code Strings
Function ConvertCodeStringToExtended(AString : String) : String;
VAR i : integer;
WorkStr : String;
begin
if pos('ec', AString) = 1 then
begin
delete(AString,1,2);
WorkStr := '';
for i := length(AString) downto 1 do
if (AString[i] in ['A'..'Z', '0'..'9']) and (i > 1) and
not(AString[i - 1] in ['A'..'Z', '0'..'9']) then
begin
WorkStr := ' ' + AString[i] + WorkStr
end else WorkStr := AString[i] + WorkStr;
trim(WorkStr);
i := pos('Sel ', WorkStr);
while i <> 0 do
begin
Delete(WorkStr,i,Length('Sel '));
Insert('Select ',WorkStr,i);
i := pos('Sel ', WorkStr);
end;
i := pos('Marker ', WorkStr);
while i <> 0 do
begin
Delete(WorkStr,i,Length('Marker '));
Insert('Bookmark ',WorkStr,i);
i := pos('Marker ', WorkStr);
end;
Result := trim(WorkStr);
end else Result := AString;
end;
Function ConvertExtendedToCodeString(AString : String) : String;
VAR i : integer;
WorkStr : String;
begin
if pos('ec', AString) = 1 then
begin
result := AString;
exit;
end;
WorkStr := AString;
i := pos('Select All', WorkStr);
if i = 0 then
begin
i := pos('Select ', WorkStr);
while i <> 0 do
begin
Delete(WorkStr,i,Length('Select '));
Insert('Sel ',WorkStr,i);
i := pos('Select ', WorkStr);
end;
end;
i := pos('Bookmark ', WorkStr);
while i <> 0 do
begin
Delete(WorkStr,i,Length('Bookmark '));
Insert('Marker ',WorkStr,i);
i := pos('Bookmark ', WorkStr);
end;
i := pos(' ', WorkStr);
While i <> 0 do
begin
delete(WorkStr,i,1);
i := pos(' ', WorkStr);
end;
Result := 'ec' + WorkStr;
end;
function IndexToEditorCommand(const AIndex: Integer) : Integer;
begin
Result := EditorCommandStrs[AIndex].Value;
end;
function ConvertExtendedToCommand(AString : String) : TSynEditorCommand;
begin
Result := ConvertCodeStringToCommand(ConvertExtendedToCodeString(AString));
end;
function ConvertCodeStringToCommand(AString : String) : TSynEditorCommand;
var I: Integer;
begin
Result := ecNone;
AString := Uppercase(AString);
for i := Low(EditorCommandStrs) to High(EditorCommandStrs) do
if Uppercase(EditorCommandStrs[i].Name) = AString then
begin
Result := EditorCommandStrs[i].Value;
break;
end;
end;
{end} //ddh 10/16/01 "English" code strings
initialization
RegisterIntegerConsts(TypeInfo(TSynEditorCommand), IdentToEditorCommand,
EditorCommandToIdent);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -