好像问题不那么简单!
请看例:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i:integer;
begin
i:=0;
//英文字母
if (key>80) and (key<123) then
if Shift<>[ssShift] then i:=32;
//数字及上档符号
if (key=49) or ((key>50) and (key<54)) or (key=57) then
if Shift=[ssShift] then i:=-16;
if (key=48) then
if Shift=[ssShift] then i:=-7;
if (key=50) then
if Shift=[ssShift] then i:=14;
if (key=54) then
if Shift=[ssShift] then i:=40;
if (key=55) then
if Shift=[ssShift] then i:=-17;
if (key=56) then
if Shift=[ssShift] then i:=-14;
label1.Caption:=inttostr(key+i);
label2.Caption:=chr(key+i);
end;