Цитата
Да не парь ты с этой таблицей:
Код
uses crt;
var c:char;
begin
clrscr;
repeat
c:=readkey;
writeln (ord(c));
until c=#27;
end.
Тыкай любую клавишу вот он - код!!
Ты немного не прав... Есть такая штука, как расширенные коды.... Вот талмудик от Some1 на эту тему :
Значит так, отвечаю на первый вопрос: 
Для того чтобы получить нажатие от клавиши F1 тебе нужно знать, что не все клавиши возвращают только один символ. 
Поясню - вот к примеру такой код: 
c:=readkey; 
write(byte©); 
Если ты нажмёшь одну из букв, цифр, или целого ряда других кнопок, типа "-", "_", "+", то на экран выведется номер этого символа в таблице ASCII, и ты это знаешь 

) 
Так происходит потому, что при нажатии клавиши в буффер клавиатуры попадает один байт с номером той клавиши, которую ты нажал. 
С клавишами F1-F12 происходит по другому - Когда ты жмёшь одну из таких клавиш, то в буффер клавиатуры попадает не один, а два байта - первый байт равен нулю, и он обозначает, что нажата клавиша с расширенным кодом. И следующий за этим нулевым байт будет обозначать, какая именно из расширенных клавиш была нажата. 
Поясню на примере: 
c1:=readkey; 
c2:=readkey; 
write(byte(c1),':',byte(c2)); 
Если нажать к примеру клавишу "А" то программа выполнит первую строку, и в переменную c1 будет занесён символ "А", после чего программа будет ожидать от тебя другого нажатия клавиши - нажмём к примеру "B", и тогда в c1 будет "А", а в c2 будет "В", что тебе и выведет команда Write. 
Давай на этом же коде попробуем нажать F1: 
В c1 будет занесён первый байт, равный нулю, и он будет обозначать, что нажата клавиша с расширенным кодом, и значит в буффере клавиатуры есть ещё один байт, который укажет нам, какая именно клавиша была нажата. После этого в c2 попадёт код нажатой клавиши и Write выведет тебе этот код. 
Подведу итоги - если клавиша простая, то на неё нужен один readkey а если клавиша расширенная, то на неё нужно два readkey'а.  
Как же тебе быть, если надо использовать проверку и простых и сложных клавиш сразу ? 
Ответ на этот вопрос тесно переплетён с твоим вторым вопросом - "как сделать так, чтобы в программе где угодно выполнялась реакция на F1 ?" 
Для того, чтобы у твоей программы появилась возможность выполнять F1 когда угодно есть два способа - один очень сложный и более гибкий - создать резидентный модуль с реакцией на клавишу. Этот способ мы пока рассматривать не будем. 
Второй способ заключается в том, чтобы сделать в твоей программе один цикл, который выполнялся бы на протяжении всей твоей программы, и в него поместить проверку на нажатие клавиши F1. 
Вот тебе код, который я уже много раз писал: 
begin 
  repeat {Этот цикл будет всегда выполняться, пока не нажмёшь ESC} 
    {Тут наша программа выполняет что нибудь, к примеру всегда выводит на экран символ "@" - write('@');} 
    if keypressed then case readkey of {Если появился код клавиши в буффере клавиатуры} 
      #27: break; {Это простая клавиша - ESC - выход из программы} 
      'A' : {чётить делаем на клавишу "A"} 
      #0: case readkey of {Первый байт был нулём ? значит у нас расширенная клавиша, прочитаем её} 
        #59: {Это твой F1, пиши реакцию на него, к примеру вызывай функцию} 
        #68: {Это для примера - F10} 
        #72: {Это кнопка курсора - вверх} 
      end; 
    end; 
  until false; 
end.