Кирилица

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Кирилица

Сообщение Oleksandr07 » 20.12.2008 18:07:28

Можно ли в fpc-2.2.2.i386-win32 выводить кирилицу? у меня в коде
Word(x,y);
lp:='А';
lk:='Я';
вместо русского алфавиту выводит иероглифы
Oleksandr07
незнакомец
 
Сообщения: 2
Зарегистрирован: 20.12.2008 17:41:51

Re: Кирилица

Сообщение Mr.Smart » 20.12.2008 19:28:40

Oleksandr07 писал(а):Можно ли в fpc-2.2.2.i386-win32 выводить кирилицу? у меня в коде
Word(x,y);
lp:='А';
lk:='Я';
вместо русского алфавиту выводит иероглифы

Не понятно. Можно по подробней
1) Выводите в консоль
2) Какой функцией выводите
3) Кодировка исходников программы.
з.ы. Выводить конечно можно на любом языке если присутствует соответствующий шрифт в ОС
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Кирилица

Сообщение Oleksandr07 » 20.12.2008 20:19:53

Вот код программы

Код: Выделить всё
uses WinGraph,wincrt;
var Gd  : integer;
    Gm  : integer;
    pal : PaletteType;
    st  : string[26];
    sk  : string[26];

procedure The_End(x,y,k,koo:longint);
begin
   setColor(k);
   rectangle(x+33*koo-11,y-10,x+33*(koo+length(st))+7,y+39);
   rectangle(x+33*koo-10,y-9,x+33*(koo+length(st))+6,y+38);
   rectangle(x+33*koo-9,y-8,x+33*(koo+length(st))+5,y+37);
   rectangle(x+33*koo-8,y-7,x+33*(koo+length(st))+4,y+36);
   rectangle(x+33*koo-7,y-6,x+33*(koo+length(st))+3,y+35);

end;

procedure Button(x,y,Len,k0,k1,k2,k3:longint;ch:char);
begin
setFillStyle(1,k0);
bar(x-2,y-2,x+32,y+32);
SetColor(k1);
Line(x,y,x+Len,y);
Line(x+Len,y,x+Len,y+Len);
Setcolor(K2);
Line(x+Len,y+Len,x,y+Len);
Line(x,y+Len,x,y);
Setcolor(K3);
SetTextStyle(ArialFont,0,24);
outTextXY(x+Len div 4,y+Len div 5,ch);
end;

procedure Word(x,y:integer);
var i : integer;
    j : integer;
begin
  j:=26 div 2-length(st) div 2+1;
  for i:=1 to length(st) do begin
   Button(x+33*j,y+300,30,Red,White,White,White,st[i]);
   inc(j);
  end;
end;

procedure Select;
var i    : char;
    ch   : char;
    lp   : char;
    lk   : char;
    j    : integer;
    x    : integer;
    y    : integer;
    ll   : integer;
    l    : integer;
    k    : integer;
    pr   : integer;
    p    : integer;
    koo  : integer;
    flag : boolean;
begin
  x:=10;
  y:=50;
  j:=1;
  flag:=true;
  SetfillStyle(1,Green);
  Bar(0,0,GetMaxX,GetMaxY);
  Word(x,y);
  lp:='Ђ';
  lk:='џ';
  for i:=lp to lk do begin
   Button(x+33*j,y,30,SkyBlue,White,Black,Black,i);
   inc(j);
  end;
  ll:=j-1;
  j:=1;
  i:=lp;
  Button(x+33*j,y,30,Red,white,white,white,i);
  repeat
   ch:=readkey;
   case ord(ch) of
    77:begin
          Button(x+33*j,y,30,SkyBlue,White,Black,Black,i);
          if j<>ll then begin
                         inc(j);
                         inc(i);
                        end
            else begin
                  j:=1;
                  i:=lp;
                 end;
          Button( x+33*j,y,30,Red,White,White,White,i);
       end;
    75:begin
          Button(x+33*j,y,30,SkyBlue,White,Black,Black,i);
          if j<>1 then begin
                        dec(j);
                        dec(i);
                       end
            else begin
                  j:=ll;
                  i:=lk;
                 end;
          Button( x+33*j,y,30,Red,White,White,White,i);
       end;
    32,13:begin
             if not flag then continue;
             flag:=false;
             for k:=1 to length(st) do
              if st[k]=' ' then begin
                                 flag:=true;pr:=k;
                                 if i=sk[pr] then break;
                                end;
             if flag then
             begin
              Button(x+33*j,y,30,Red,White,White,White,i);
              delay(300);
              l:=y;
              repeat
               inc(l,3);
               Button(x+33*j,y+l,30,Red,white,white,white,i);
               delay(20);
               Button(x+33*j,y+l,30,Green,Green,Green,Green,i);
              until l>=260;
              p:=j;
              koo:=26 div 2-length(st) div 2+pr;
              repeat
               if p<koo then inc(p)
                 else if p>koo then dec(p);
               Button(x+33*p,y+l,30,Red,white,white,white,i);
               if (p=koo)and(i=sk[pr]) then delay(500)
                 else delay(10);
               Button(x+33*p,y+l,30,Green,Green,Green,Green,i);
              until p=koo;
              if i<>sk[pr]
                 then Button(x+33*p,y+l,30,Red,White,White,White,i)
                else Button(x+33*p,y+300,30,Red,White,White,White,i)
             end;
            st[pr]:=i;
            if st=sk then flag:=false
              else if st[pr]<>sk[pr] then st[pr]:=' ';
          end;
   end;
   if not flag then
   begin
    repeat
     The_End(x,y+300,Blue,koo-pr+1);
     delay(300);
     The_End(x,y+300,Yellow,koo-pr+1);
     delay(300);
    until keypressed;
    break;
   end;
  until (ord(ch)=27);
end;

Procedure InPut(x,y,k1,k2:longint);
var f : text;
begin
   st:='';
   assign(f,'input.txt');
   reset(f);
   readln(f,st);
   readln(f,sk);
   close(f);
end;

begin
  if (IOResult <> 0) then Halt(1);
  gd:=detect; gm:=m1024x768;
  GetNamesPalette(pal);
  InitGraph(gd,gm,'');
  InPut(10,10,red,red);
  Select;
  CloseGraph;
end.


учим тег [ code ] !!!
Oleksandr07
незнакомец
 
Сообщения: 2
Зарегистрирован: 20.12.2008 17:41:51

Re: Кирилица

Сообщение Mr.Smart » 20.12.2008 20:59:46

Различие кодировок символов.
Дело в том, что ты пишешь код в IDE Free Pascal там используется "ДОС" кодировка CP866, а выводишь в окно Windows где используется кодировка CP1251.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

Рейтинг@Mail.ru