Polskie znaki - duże i małe

0

Przepraszam jeśli taki temat był na forum - nie znalazłem żadnego, który odpowiadałby mojemu problemowi.

Pracuję nad edytorem tekstu (projekt na studiach) w Pascalu. Ponieważ chciałem skorzystać z polskich znaków, skorzystałem z tego artykułu: http://4programmers.net/Turbo_Pascal/FAQ/Ulepszony_ReadKey . Żeby sprawdzić jakie wartości zwraca funkcja dla odpowiednich klawiszy postanowiłem je wypisać... i pojawił się problem - okazało się że przy wciśnięciu alt+litera program nie uwzględnia wciśniętego klawisza shift. Jedyny pomysł na jaki wpadłem by wypisać polskie znaki to tylda-litera, ale szczerze mówiąc nie za bardzo satysfakcjonuje mnie takie rozwiązanie. Jest sposób na to, by program zrozumiał że alt+litera to nie to samo co alt+shift+litera?

Z góry dziękuję za wszelką pomoc.

EDIT: korzystam z FreePascala 2.4.4.

0
var w:word;
begin
  repeat
    w:=m_readkey;
    writeln(w);
  until w=27;
end.

u mnie wyraźnie pokazuje inne kody dla polskich liter dużych i małych. zresztą polskie litery NIE SĄ żadnymi specjalnymi znakami w rozumieniu funkcji readkey, gdyż kombinacje z altem są przetwarzane przez sterownik układu klawiatury zanim w ogóle trafią do readkey'a.

piszesz więc o jakimś problemie, który nie powinien istnieć. może w ogóle nie masz polskich liter na komputerze? możesz je pisać np. przy normalnym readln?
i powiedz dla pewności, czy kompilujesz pod WIN32 czy pod GO32V2.

0

Nie chodzi mi o brak polskich znaków jako takich, bo mogę spokojnie się do nich odwołać (przykładowo: naciśnięto alt+a, więc napisz 'ą'; wartości pl liter w tablicy znaków także sobie zawczasu spisałem). Problem leży w tym, że gdy nacisnę alt+a to identyczna funkcja do tej z podanego przeze mnie tematu zwraca wartość 286 (sprawdzałem wartości dla różnych kombinacji), a przy naciśnięciu shift+alt+a... 286. Krótko mówiąc gdy korzystam z alta klawisz shift nie jest brany pod uwagę, stąd nie mogę rozróżnić czy user chce napisać 'ą' czy 'Ą'.

EDIT: zamieszczam fragmenty kodu dla tej funkcji (mimo że wygląda identycznie) oraz dla fragmentu programu, który wypisuje te wartości na ekran.

function expreadkey:word;
 var c:char;
 begin
  c:=readkey;
  if c=#0 then begin
   c:=readkey;
   expreadkey:=ord(c)+256;
  end else expreadkey:=ord(c);
 end;
 //zmienne x,y:byte; c:word; x i y mają przypisane wartości 1 na wejściu
   repeat
    repeat until keypressed;
     clrscr;
     c:=expreadkey;
     write(c);
     case c of
       328: if y>1 then y:=y-1;
       336: if y<25 then y:=y+1;
       331: if x>1 then x:=x-1;
       333: if x<80 then x:=x+1;
      end;
     gotoxy(x,y);
    until c=27;

Najciekawsze jest to, że przy odczytaniu znaku ze zwykłego readkeya alt+a i shift+alt+a także nie widzi różnicy. Sprawdzę jutro z rana jak to wygląda przy readln.

Kompiluję pod WIN32, o ile dobrze kojarzę.

EDIT2: po podaniu komendy readln() mogę wpisywać dowolne znaki, ale alt+litera nie wypisuje nic. Tak jakby taki znak nie istniał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1