ouais en fait le problème c'est pas le "case" c'est le fait que readln ne peut pas assigner une lettre à une variable numérique.
tu pourrais essayer ça :
{$I-} readln(choixmenu) {$I+};
if IOResult = 0 then
begin
(* et là tu mets ton case et le reste de ton programme *)
end;
{$I-} sert est une directive de compilation qui désactive l'interception des erreurs, autrement dit, ton programme ne fermera pas si writeln cause une erreur.
{$I+} ben on le remet quand le risque est passé...
IOResult (attention aux majuscules) contient le code de la dernière erreur survenue ; s'il vaut zéro, c'est que tout s'est bien passé (donc que writeln a bien reçu un chiffe)
dès lors on peut continuer le programme avec case etc.
j'espère que c'était pas trop urgent...