Delphi Can

Orjinalini görmek için tıklayınız: Türkçe karakter
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba;

Kullanıcının Edite girdiği harflerin küçük harf olmasını sağlamak istiyorum, fakat ilk harf büyük olacak anacak ilk harfte şöyle bir sıkıntı çıkıyor "İ" olası gerekirken "ı" olarak yazıyor Türkçe karakter ilgili sorun var utf8 araştırdım fakat firemonkeyde çözüm bulamadım, yardımlarınızı rica ederim.

function degis(Harf: String): String;
const
  Buyuk: String = 'ABCÇDEFGGHIİJKLMNOÖPRSŞTUÜVYZQW';
  Degis: String = 'abcçdefgğhıijklmnoöprsştuüvyzqw';
var
  N: Integer;
begin
  for N := 1 to Length(Buyuk) do
    while Pos(Buyuk[N], Harf) > 0 do
      Harf[Pos(Buyuk[N], Harf)] := Degis[N];
  Result := AnsiUpperCase(Harf[1]) + Copy(Harf, 2, Length(Harf));
end;


procedure TForm1.EditChangeTracking(Sender: TObject);
begin
  if Edit.Text.Length > 0 then
  begin
    Edit1.Text := degis(Edit1.Text);
  end;
end;
Belki daha efektif yazılabilirdi ama şöyle bir fonksiyon işinizi görebilir;

function LowerCaseTR(aString: String; aBuyukBasHarf: Boolean = True): String;
const
  K = 'aeirlıdknmyustboüşzghçğcvpöfjwx';   // Harfleri böyle sıralanmasının sebebi
  B = 'AEİRLIDKNMYUSTBOÜŞZGHÇĞCVPÖFJWX';   // Bunların Türkçedeki kullanım sıklıklarına göredir.
var
  I: Integer;                              // Sayaç, indis değişkeni
  X: Integer;                              // Bulunan harfin alfabedeki indis numarası
begin
  Result := aString;
  for I := 1 to Result.Length do begin     // metni harf harf geziyoruz. (Bir rakam ile de karşılaşabiliriz...)
      X := pos(Result[I], B);              // POS, büyük / küçük harfe duyarlıdır (Case Sensitive). Yani büyükse küçüğü, küçükse büyüğü bulmaz.
      if (X > 0) then Result[I] := K[X];   // Bulunan karakter alfabemizde varsa küçüğüyle yer değiştiriyoruz.
  end;
  if (aBuyukBasHarf = True) then
      for I := 1 to Result.Length do begin // Metni harf harf geziyoruz
          X := pos(Result[I], K);
          if (X > 0) then begin
              Result[I] := B[X];
              Exit;                        // İlk harfi büyüttükten sonra çıkıyoruz...
          end;
      end;
end;
Allah razı oldun, hakkınızı helal edin. Açıklamalar için ayrıca teşekkür ederim.
Rica ederim, ben de sayenizde aşağıdakinin farkına varmış oldum;

oOk8bm.jpg

Kaynak;

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Kaynak URL;

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Hocam otomatik büyük harf için uppercase kullanıyoruz. Fakat TR karakterler için Ansiuppercase Wink
Türkçe için ı ve i harfleri AnsiUpperCase fonksiyonu da problem çıkarabiliyor. Yukarıdaki yöntemden farklı olarak aşağıdaki gibi başka bir çözüm daha kullanılabilir.
uses System.StrUtils;

function trBuyut(const sDeger:String):String;
begin
 Result:=AnsiUpperCase(ReplaceStr(ReplaceStr(sDeger, 'i', 'İ'), 'ı', 'I'));
end;