Delphi 2007 editöründe Türkçe karakter sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Delphi 2007 editöründe Türkçe karakter sorunu

Mesaj gönderen Berdem »

Delphi 2007 editöründe Türkçe karakterlerde ş,Ş,İ,ğ,Ğ karakterlerinde problem çıkartıyor.

Kod: Tümünü seç

function Tevraki.BuyukHarf(Harf: Char): Char;
begin
  case Harf of
    'ı': Result := 'I';
    'ğ': Result := 'Ğ';
    'ü': Result := 'Ü';
    'ş': Result := 'Ş';
    'i': Result := 'İ';
    'ö': Result := 'Ö';
    'ç': Result := 'Ç';
  else
    Result := UpCase(Harf);
  end;
end;
[DCC Error] ana.pas(99): E2010 Incompatible types: 'Char' and 'WideChar' hatası veriyor.
Yardımlarınız bekliyorum.Teşekkürler.
En son Berdem tarafından 14 Eyl 2007 11:53 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
bence problem d2007 de değil

Kod: Tümünü seç

Result := UpCase(Harf);
satırına dikkat et
result un tip char upcase fonksiyonu ise geriye widechar döndürüyor.
char<>widechar olduğu içinde derleme sırasında sana bu olmaz diyor.. :wink:
çözüm basit kendi fonksiyonundaki (ve tabi kullandığın diğer yerlerdeki) char ları widechar yapacaksın. yada upcase yerine başka bir fonksiyon kullanacaksın.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Türkçe karakterler Unicode'da 2 byte yer kaplıyorlar. Char ise 1 byte. Uyumsuzluk buradan kaynaklanıyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

bir de şu şekilde dene... (UpCase yerine UpperCase veya AnsiUpperCase kullanıldığını gözden kaçırmayın... )

Kod: Tümünü seç

    Result := UpperCase(Harf)[1];
veya

Kod: Tümünü seç

    Result := AnsiUpperCase(Harf)[1];
Resim
Resim ....Resim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Çok teşekkürler...
Sorun bu şekilde çözülüyor. Ama sorun bitmiyor. Widechar Char a nasıl convert ederiz.

Kod: Tümünü seç

function Tevraki.BuyukHarf(Harf: wideChar): wideChar;
begin
  case Harf of
    'ğ': Result := 'Ğ';
    'ü': Result := 'Ü';
    'ş': Result := 'Ş';
    'i': Result := 'İ';
    'ö': Result := 'Ö';
    'ç': Result := 'Ç';
    'ı': Result := 'I';
  else
    Result :=WideUpperCase(Harf)[1];
  end;
end;
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Berdem yazdı:Widechar Char a nasıl convert ederiz.
mrmarman'nın verdiği kodlara bakarsanız orada ansi olarak çıktı veren bir fonksiyon mevcut. Türkçe için Unicode kullanmanız gereksiz. Ansi yeterli. Ama beraberinde arapça, çince gibi şeyler de girecekse o zaman iş değişir.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Çok teşekkür ediyorum. Delphi 7 de çalışan kodlları delphi 2007 ye uygulamaya çalışıyorum. Delphi 7 çalışan bu kodda ilk hatayı char olarak kabul edilen ş,ğ,ç,ı, gibi karakterler delphi 2007 de ise sadece unicode olarak kabul ediliyor.yani Result := AnsiUpperCase(Harf)[1]; gelmeden hatayı "ğ" üzerinde Incompatible types: 'Char' and 'WideChar' hatası veriyor. Fonksiyonu düzeltince keypress char ataması yapmak zorundasınız. Öyle olunca widechar char a dönüştürmeniz gerekli.

Kod: Tümünü seç

procedure Tevraki.DBComboBox3KeyPress(Sender: TObject; var Key: Char);
begin
   key:=BuyukHarf(key);
end;
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Berdem yazdı:delphi 2007 de ise sadece unicode olarak kabul ediliyor.
Bunun Delphi 2007 ile alakası yok. Delphi 8'den sonra artık editörün karakter kodlamasını değiştirebiliyorsunuz. Muhtemelen dosyanızın karakter kodlaması unicode veya türevi bir şeydir. Editöre sağ tuşla tıklayıp "File Format" seçeneğinden unicode ya da utf-8 olan yeri türkçe ile uyumlu bir multi-karakter kodlamasına çevirebilirsiniz, windows-1254 gibi...

vesselam.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

fatihtolgaata yazdı:Editöre sağ tuşla tıklayıp "File Format" seçeneğinden unicode ya da utf-8 olan yeri türkçe ile uyumlu bir multi-karakter kodlamasına çevirebilirsiniz.

Hatta bu soruyu sormadan önce file formatı farketmiştim. Tekrardan yeniden kontrol ettim olmuyor. File formattaki hepsi ile denedim. İlla "ğ" hata veriyor. Widechar olarak kabul ettiğinizde sorun çıkmıyor. Ama mutlaka char lazım...:(
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Hımm. Sadece 'ğ' harfinde sorun olması garip. Görünüşe göre bir bug bulmuş gibisin. Kendim bir kaç deneme yapıp bug olduğunu ortaya çıkarabilirsem Highlander'ın QC'sine girebilirim.
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Şu an Hidhlander'da denedim. File Format ANSI iken aşağıdaki kodlar derlenebiliyor:

Kod: Tümünü seç

var
  a, b, c, d: Char;
begin
  a := 'ğ';
  b := 'ş';
  c := 'İ';
  d := 'ı';
  ShowMessage(a + b + c + d);
Yani bir sorun gözükmüyor.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c, d: Char;
begin
  a := 'ğ';
  b := 'ş';
  c := 'İ';
  d := 'ı';
  ShowMessage(a + b + c + d);
end;
Bu şekildede denme yapayım dedim.
Yine olmadı. Aynı hatayı veriyor.Ne şekilde yaparsam yapayım olmuyor.Sorunu hala çözemedim.
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Çok ilginç. Delphi 2007 şu an kurulu değil deneyemiyorum ama Delphi 2007+Update2 = Highlander olarak biliyorum. Yani ortada breaking sürüm söz konusu değil. Eğer update'lerinizi yaptı iseniz bende çalışan sizde de çalışması gerek, eğerki FileFormat ANSI ise. Aksi durumda aklıma başka bir şey gelmiyor.

vesselam.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

fatihtolgaata yazdı:Hımm. Sadece 'ğ' harfinde sorun olması garip. Görünüşe göre bir bug bulmuş gibisin..
İlgine çok teşekkür ediyorum. Sorun sadece "ğ" değil tüm Türkçe (ö,ş,ç,ü,ğ,ı) karakterlerde sorun yaşıyorum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

@fatihtolgaata sanırım sorunu yanlış anladın.
senin gönderdiğin kodda çalışmaması için bir neden yok.
hepsinin tipi aynı.
arkadaşın problemi char bir değişkene widechar tipinde bir değer atanması..

yoksa benmi birşeyi kaçırdım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla