Lazarus'un Console Applicaton'ında Türkçe Karakter Sorunu

Programlamaya hangi dil ile başlamalı? Bu sorunun cevabı bence Pascal'dır. Muhtemel rakiplerinin ilk programlama dili olmak için uygun olmayan özelliklerini yazarsam, bu tercihimin sebebi daha net anlaşılabilir.

İlk akla gelen dillerden C, C++ ve Java'da büyük küçük harf ayrımı vardır. Yeni programlamaya başlayan bir kişinin bir harfi büyük yazacağına küçük yazdığı için yazdığı program çalışmadığında yaşayacağı hayal kırıklığını düşünün. Bu dilleri eledik.

Python dediğinizi duyar gibiyim. Bu dilde değişken tanımlaması yok. Bu yeni programlamla öğrenenlerin başını oldukça ağrıtacak bir konu. Ayrıca şu for döngüsü yeni programlama öğrenen birini bu işten soğutmaya yetecektir:

#For loop from 0 to 2, therefore running 3 times.
for x in range(0, 3):
    print "We're on time %d" % (x)

Visual Basic'in DotNet platformundaki halleri malum, yeni programlama öğrenen birini nesneye yönelik programlamanın ayrıntılarında boğmak çok akıl karı değil.

Gördüğünüz gibi rakiplerini incelediğimizde elimizdeki en iyi alternatifin Pascal olduğu ortada.

Peki Pascal'ı hangi ortamda öğreteceğiz? Malum Turbo Pascal güncel Windows platformlarında artık çalışmıyor. DosBox'la filan çalıştırmak yeni öğrenen biri için pratik olmayacaktır. Her ne kadar ücretsiz bir versiyonu olsa da, Delphi, gerektirdiği güçlü sistem gereksinimleri nedeniyle çok uygun bir seçenek değil CharmPascal vs'yi de inceledim ve ne yazık ki yetersizler.

Geriye Lazarus kalıyor. Ancak Lazarus'ta da Dosya'dan Yeni'yi seçip sonra da Project bölümünden Simple Program'ı seçip bir konsol uygulaması yazdığınızda, Türkçe karakterlerin konsolda düzgün görünmediğini fark edeceksiniz. Bu sorunu şu şekilde çözmek mümkün. Önce aşağıdaki unit'i oluşturuyoruz:

unit setdefaultcodepages;

interface

uses
  Windows;

implementation

Const
  LF_FACESIZE = 32;

Type
  CONSOLE_FONT_INFOEX = record
    cbSize     : ULONG;
    nFont      : DWORD;
    dwFontSize : COORD;
    FontFamily : UINT;
    FontWeight : UINT;
    FaceName   : array [0..LF_FACESIZE-1] of WCHAR;
  end;

{ Only supported in Vista and onwards!}

function SetCurrentConsoleFontEx(hConsoleOutput: HANDLE; bMaximumWindow: BOOL; var CONSOLE_FONT_INFOEX): BOOL; stdcall; external kernel32;

var
  New_CONSOLE_FONT_INFOEX: CONSOLE_FONT_INFOEX;

initialization
  SetConsoleOutputCP(DefaultSystemCodePage);
  SetTextCodePage(Output, DefaultSystemCodePage);

  FillChar(New_CONSOLE_FONT_INFOEX, SizeOf(CONSOLE_FONT_INFOEX), 0);
  New_CONSOLE_FONT_INFOEX.cbSize := SizeOf(CONSOLE_FONT_INFOEX);
  New_CONSOLE_FONT_INFOEX.FaceName := 'Consolas';
//  New_CONSOLE_FONT_INFOEX.FaceName := 'Lucida Console';  //use Lucida Console for Win XP
  New_CONSOLE_FONT_INFOEX.FontWeight := 400;
  //New_CONSOLE_FONT_INFOEX.dwFontSize := 20;

  SetCurrentConsoleFontEx(StdOutputHandle, False, New_CONSOLE_FONT_INFOEX);
end. 

Sonra programımızı şu şekilde yazıyoruz:

program project1;

uses
  crt, setdefaultcodepages;

begin
  Writeln('Console output codepage: ', GetTextCodePage(Output));
  Writeln('System codepage: ', DefaultSystemCodePage);
  writeln('Hello Türkçe');
  readln;
  clrscr;
  readln;
end.

En son olarak da Lazarus'un Code Editor'ünde sağ tıklayıp File Settings'den Encoding/Ansi (cp1254)'ü seçip dosyayı kaydediyoruz. Sonuç şu şekilde oluyor:

 

11.02.2017 08:50:15

Yorumlar

Bu yazıya henüz yorum yapılmamış.

Yazı hakkında yorum yapmak için, buraya tıklayın.

Kategoriler :

Arşiv :

Etiketler :

Bağlantılar :