MG: fixed DeleteObject

git-svn-id: trunk@3327 -
This commit is contained in:
lazarus 2002-09-12 05:32:14 +00:00
parent 1e57a6f00c
commit 22a70e8c85

View File

@ -36,7 +36,7 @@ interface
uses
LCLLinux, LCLType,
Forms, Classes, SysUtils, Buttons, LResources, StdCtrls, Controls,
SynEdit, SynEditKeyCmds, Laz_XMLCfg, Dialogs;
SynEdit, SynEditKeyCmds, Laz_XMLCfg, Dialogs, StringHashList;
const
{ editor commands constants. see syneditkeycmds.pp for more
@ -298,7 +298,7 @@ function ShowKeyMappingEditForm(Index:integer;
function KeyStrokesConsistencyErrors(ASynEditKeyStrokes:TSynEditKeyStrokes;
Protocol: TStrings; var Index1,Index2:integer):integer;
function EditorCommandToDescriptionString(cmd: word):AnsiString;
function StrToVKCode(s: string): integer;
function StrToVKCode(const s: string): integer;
var KeyMappingEditForm: TKeyMappingEditForm;
@ -310,12 +310,26 @@ implementation
const
KeyMappingFormatVersion = 2;
UnknownVKPrefix = 'Word(''';
UnknownVKPostfix = ''')';
function StrToVKCode(s: string): integer;
var i: integer;
VirtualKeyStrings: TStringHashList = nil;
function StrToVKCode(const s: string): integer;
var
i: integer;
begin
Result:=VK_UNKNOWN;
if copy(s,1,6)='Word(''' then
if VirtualKeyStrings=nil then
VirtualKeyStrings:=TStringHashList.Create(true);
i:=-1; //VirtualKeyStrings(s);
if i>=0 then begin
end else begin
if (length(UnknownVKPrefix)<length(s))
and (AnsiStrLComp(PChar(s),PChar(UnknownVKPrefix),length(UnknownVKPrefix))=0)
then
Result:=StrToIntDef(copy(s,7,length(s)-8),VK_UNKNOWN)
else if s<>'none' then begin
for i:=1 to 300 do
@ -330,6 +344,7 @@ begin
end;
end;
end;
end;
function ShowKeyMappingEditForm(Index:integer;
AKeyCommandRelationList:TKeyCommandRelationList):TModalResult;
@ -656,82 +671,126 @@ begin
end;
function KeyAndShiftStateToStr(Key:Word; ShiftState:TShiftState):AnsiString;
var
p, ResultLen: integer;
procedure AddStr(const s: string);
var
OldP: integer;
begin
Result:='';
if ssCtrl in ShiftState then Result:=Result+'+Ctrl';
if ssAlt in ShiftState then Result:=Result+'+Alt';
if ssShift in ShiftState then Result:=Result+'+Shift';
if Result<>'' then
Result:=copy(Result,2,length(Result)-1)+'+';
if s<>'' then begin
OldP:=p;
inc(p,length(s));
if p<=ResultLen then
Move(s[1],Result[OldP+1],length(s));
end;
end;
procedure AddAttribute(const s: string);
begin
if p>0 then
AddStr('+');
AddStr(s);
end;
procedure AddAttributes;
begin
if ssCtrl in ShiftState then AddAttribute('Ctrl');
if ssAlt in ShiftState then AddAttribute('Alt');
if ssShift in ShiftState then AddAttribute('Shift');
end;
procedure AddKey;
begin
AddStr(' ');
case Key of
VK_UNKNOWN :Result:=Result+'Unknown';
VK_LBUTTON :Result:=Result+'Mouse Button Left';
VK_RBUTTON :Result:=Result+'Mouse Button Right';
VK_CANCEL :Result:=Result+'Cancel';
VK_MBUTTON :Result:=Result+'Mouse Button Middle';
VK_BACK :Result:=Result+'Backspace';
VK_TAB :Result:=Result+'Tab';
VK_CLEAR :Result:=Result+'Clear';
VK_RETURN :Result:=Result+'Return';
VK_SHIFT :Result:=Result+'Shift';
VK_CONTROL :Result:=Result+'Control';
VK_MENU :Result:=Result+'Menu';
VK_PAUSE :Result:=Result+'Pause';
VK_CAPITAL :Result:=Result+'Capital';
VK_KANA :Result:=Result+'Kana';
// VK_HANGUL :Result:=Result+'Hangul';
VK_JUNJA :Result:=Result+'Junja';
VK_FINAL :Result:=Result+'Final';
VK_HANJA :Result:=Result+'Hanja';
// VK_KANJI :Result:=Result+'Kanji';
VK_ESCAPE :Result:=Result+'Escape';
VK_CONVERT :Result:=Result+'Convert';
VK_NONCONVERT :Result:=Result+'Nonconvert';
VK_ACCEPT :Result:=Result+'Accept';
VK_MODECHANGE :Result:=Result+'Mode Change';
VK_SPACE :Result:=Result+'Space';
VK_PRIOR :Result:=Result+'Prior';
VK_NEXT :Result:=Result+'Next';
VK_END :Result:=Result+'End';
VK_HOME :Result:=Result+'Home';
VK_LEFT :Result:=Result+'Left';
VK_UP :Result:=Result+'Up';
VK_RIGHT :Result:=Result+'Right';
VK_DOWN :Result:=Result+'Down';
VK_SELECT :Result:=Result+'Select';
VK_PRINT :Result:=Result+'Print';
VK_EXECUTE :Result:=Result+'Execute';
VK_SNAPSHOT :Result:=Result+'Snapshot';
VK_INSERT :Result:=Result+'Insert';
VK_DELETE :Result:=Result+'Delete';
VK_HELP :Result:=Result+'Help';
VK_0..VK_9 :Result:=Result+IntToStr(Key-VK_0);
VK_A..VK_Z :Result:=Result+chr(ord('A')+Key-VK_A);
VK_LWIN :Result:=Result+'left windows key';
VK_RWIN :Result:=Result+'right windows key';
VK_APPS :Result:=Result+'application key';
VK_NUMPAD0..VK_NUMPAD9:Result:=Result+'Numpad '+IntToStr(Key-VK_NUMPAD0);
VK_MULTIPLY :Result:=Result+'*';
VK_ADD :Result:=Result+'+';
VK_SEPARATOR :Result:=Result+'|';
VK_SUBTRACT :Result:=Result+'-';
VK_DECIMAL :Result:=Result+'.';
VK_DIVIDE :Result:=Result+'/';
VK_F1..VK_F24 :Result:=Result+'F'+IntToStr(Key-VK_F1+1);
VK_NUMLOCK :Result:=Result+'Numlock';
VK_SCROLL :Result:=Result+'Scroll';
VK_EQUAL :Result:=Result+'=';
VK_COMMA :Result:=Result+',';
VK_POINT :Result:=Result+'.';
VK_SLASH :Result:=Result+'/';
VK_AT :Result:=Result+'@';
VK_UNKNOWN :AddStr('Unknown');
VK_LBUTTON :AddStr('Mouse Button Left');
VK_RBUTTON :AddStr('Mouse Button Right');
VK_CANCEL :AddStr('Cancel');
VK_MBUTTON :AddStr('Mouse Button Middle');
VK_BACK :AddStr('Backspace');
VK_TAB :AddStr('Tab');
VK_CLEAR :AddStr('Clear');
VK_RETURN :AddStr('Return');
VK_SHIFT :AddStr('Shift');
VK_CONTROL :AddStr('Control');
VK_MENU :AddStr('Menu');
VK_PAUSE :AddStr('Pause');
VK_CAPITAL :AddStr('Capital');
VK_KANA :AddStr('Kana');
// VK_HANGUL :AddStr('Hangul');
VK_JUNJA :AddStr('Junja');
VK_FINAL :AddStr('Final');
VK_HANJA :AddStr('Hanja');
// VK_KANJI :AddStr('Kanji');
VK_ESCAPE :AddStr('Escape');
VK_CONVERT :AddStr('Convert');
VK_NONCONVERT :AddStr('Nonconvert');
VK_ACCEPT :AddStr('Accept');
VK_MODECHANGE :AddStr('Mode Change');
VK_SPACE :AddStr('Space');
VK_PRIOR :AddStr('Prior');
VK_NEXT :AddStr('Next');
VK_END :AddStr('End');
VK_HOME :AddStr('Home');
VK_LEFT :AddStr('Left');
VK_UP :AddStr('Up');
VK_RIGHT :AddStr('Right');
VK_DOWN :AddStr('Down');
VK_SELECT :AddStr('Select');
VK_PRINT :AddStr('Print');
VK_EXECUTE :AddStr('Execute');
VK_SNAPSHOT :AddStr('Snapshot');
VK_INSERT :AddStr('Insert');
VK_DELETE :AddStr('Delete');
VK_HELP :AddStr('Help');
VK_0..VK_9 :AddStr(IntToStr(Key-VK_0));
VK_A..VK_Z :AddStr(chr(ord('A')+Key-VK_A));
VK_LWIN :AddStr('left windows key');
VK_RWIN :AddStr('right windows key');
VK_APPS :AddStr('application key');
VK_NUMPAD0..VK_NUMPAD9:AddStr('Numpad '+IntToStr(Key-VK_NUMPAD0));
VK_MULTIPLY :AddStr('*');
VK_ADD :AddStr('+');
VK_SEPARATOR :AddStr('|');
VK_SUBTRACT :AddStr('-');
VK_DECIMAL :AddStr('.');
VK_DIVIDE :AddStr('/');
VK_F1..VK_F24 :AddStr('F'+IntToStr(Key-VK_F1+1));
VK_NUMLOCK :AddStr('Numlock');
VK_SCROLL :AddStr('Scroll');
VK_EQUAL :AddStr('=');
VK_COMMA :AddStr(',');
VK_POINT :AddStr('.');
VK_SLASH :AddStr('/');
VK_AT :AddStr('@');
else
if (Key>=VK_IRREGULAR+33) and (Key<=VK_IRREGULAR+255) then
Result:=Result+chr(Key-VK_IRREGULAR)
else
Result:=Result+'Word('''+IntToStr(Key)+''')';
AddStr(chr(Key-VK_IRREGULAR))
else begin
AddStr(UnknownVKPrefix);
AddStr(IntToStr(Key));
AddStr(UnknownVKPostfix);
end;
end;
end;
procedure AddAttributesAndKey;
begin
AddAttributes;
AddKey;
end;
begin
ResultLen:=0;
p:=0;
AddAttributesAndKey;
ResultLen:=p;
SetLength(Result,ResultLen);
p:=0;
AddAttributesAndKey;
end;
{ TKeyMappingEditForm }
@ -1696,5 +1755,9 @@ end;
initialization
KeyMappingEditForm:=nil;
finalization
VirtualKeyStrings.Free;
VirtualKeyStrings:=nil;
end.