keydown altında Türkçe Uppercase sorunu hakkında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
keydown altında Türkçe Uppercase sorunu hakkında
Selamlar
Forumda araştırdığımda türkçe karakter sorunu ve cxgrid türkçe sorunu olarak konular açılmış
fakat hepsi ya componentlerin source codelarına müdahale ile yada if ile yapılmış.
bir edit içerisindeki türkçe karakterleri uppper ettiğimizde "i" ve "ı" harfleri farklılık gösteriyor
fakat keydown altında içerisindeki key alanını upper yapmaya kalktığımızda işler iyice karışıyor
Keydown altında türkçe karakterleri nasıl upper edebiliriz kolay bir yolu varmıdır.
i = İ, ı=I, ö=Ö .... gibi
İyi Çalışmalar
Forumda araştırdığımda türkçe karakter sorunu ve cxgrid türkçe sorunu olarak konular açılmış
fakat hepsi ya componentlerin source codelarına müdahale ile yada if ile yapılmış.
bir edit içerisindeki türkçe karakterleri uppper ettiğimizde "i" ve "ı" harfleri farklılık gösteriyor
fakat keydown altında içerisindeki key alanını upper yapmaya kalktığımızda işler iyice karışıyor
Keydown altında türkçe karakterleri nasıl upper edebiliriz kolay bir yolu varmıdır.
i = İ, ı=I, ö=Ö .... gibi
İyi Çalışmalar
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: keydown altında Türkçe Uppercase sorunu hakkında
Merhaba,
Büyük harf modunda iken sadece "ı" ve "i" harflerinde sorun olur. Aşağıdaki gibi KeyPress event'inde sorunu çözebilirsin.
Büyük harf modunda iken sadece "ı" ve "i" harflerinde sorun olur. Aşağıdaki gibi KeyPress event'inde sorunu çözebilirsin.
Kod: Tümünü seç
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if TEdit(Sender).CharCase = ecUpperCase then
begin
if Key = 'ı' then Key := 'I';
if Key = 'i' then key := 'İ';
end;
end;
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: keydown altında Türkçe Uppercase sorunu hakkında
xxxjedixxx
zaten daha öncedende bu şekilde yapıyordum başka bir yolu varmı diye sordum
Bu yol her nesnenin altına yada formun altındaki keypress üzerinde bulunan nesne uppercase ise control ediliyor diye
yapmak istemiyordum.
teşekkürler
zaten daha öncedende bu şekilde yapıyordum başka bir yolu varmı diye sordum
Bu yol her nesnenin altına yada formun altındaki keypress üzerinde bulunan nesne uppercase ise control ediliyor diye
yapmak istemiyordum.
teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: keydown altında Türkçe Uppercase sorunu hakkında
Kod: Tümünü seç
Function BuyukHarf(Harf: Char): Char;
begin
case Harf of
'ı': Result:='I';
'ğ': Result:='Ğ';
'ü': Result:='Ü';
'ş': Result:='Ş';
'i': Result:='İ';
'ö': Result:='Ö';
'ç': Result:='Ç';
'İ': Result:='İ';
else
Result:=UpCase(Harf);
end;
end;
Kod: Tümünü seç
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
key:=BuyukHarf(key);
end;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: keydown altında Türkçe Uppercase sorunu hakkında
xozcanx
Daha öncedende belirttiğim gibi dediğiniz yöntem yada benzeri yöntemlerle zaten sonuca ulaşıyorum.
Amaç butarz bir fonksiyon yazmadan delphinin ayarlarında yada nebileyim
ilk initialize kısmında birşeyler yazarak projenin genelinde çözebilirmiyiz diye öğrenmek istemiştim
ilginiz için tekrardan teşekkürler
Daha öncedende belirttiğim gibi dediğiniz yöntem yada benzeri yöntemlerle zaten sonuca ulaşıyorum.
Amaç butarz bir fonksiyon yazmadan delphinin ayarlarında yada nebileyim
ilk initialize kısmında birşeyler yazarak projenin genelinde çözebilirmiyiz diye öğrenmek istemiştim
ilginiz için tekrardan teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: keydown altında Türkçe Uppercase sorunu hakkında
Merhaba;
Delphi XE3 ve daha sonraki sürümlerde .ToUpper string helper'ı (ı İ de dahil olmak üzere) tüm Türkçe karakterleri desteklemektedir.
Örnek kullanımı;
Delphi XE3 ve daha sonraki sürümlerde .ToUpper string helper'ı (ı İ de dahil olmak üzere) tüm Türkçe karakterleri desteklemektedir.
Örnek kullanımı;
Kod: Tümünü seç
ShowMessage(string(Edit1.Text).ToUpper);
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: keydown altında Türkçe Uppercase sorunu hakkında
TEdit nesnesinin OnKeyPress olayında aşağıdaki gibi kullanabilirsiniz.
Kod: Tümünü seç
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage(string(Key).ToUpper);
end;
Re: keydown altında Türkçe Uppercase sorunu hakkında
Bi tane record olustur. Iki adet isaretci olsun icinde.
Bir adet class olustur. Tlist'den türesin. Icine bir adet function yaz.bu function icinde bir döngü olustur. Listenin icindeki recordlari tek tek dolasip senderi bulsun ve result olarak bu senderin eventini döndürsünsimdi windows'un mesajlarini yakalayip create'de olusturulan nesnelerin property'lerine bak. Onkeypress isminde published bir eventi var ise yeni bir teventrec olusturup sender'i create olan nesne ve event'i de onkeypress eventi olarak isaretle ve olusturdugun tlist'e add yap. Akabinde setpropinfo ile nesnenin onkeypress eventini kendi yazdigin prosedür ile degistir.
Kendi yazdigin prosedürün icerisinde parametre olarak gelen key ile ilgili islemlerini yap ve listendeki geteventbysender functionu ile eventi bulupyaparak orjinal eventi tetikle.
Her olusan nesne otomatik olarak senin prosedürünü tetikleyecek ve akabinde kendine ait olan orjinal eventini tetikleyecektir.
Kod: Tümünü seç
Teventrec = record
Sender: tobject;
event: tkeypressevent;
end
Kod: Tümünü seç
function geteventbysender(asender: tobject): tkeypressevent;
Kod: Tümünü seç
if teventrec(items[i]).sender = asender then
begin
Result := teventrec(items[i]).event;
break;
end;
Kendi yazdigin prosedürün icerisinde parametre olarak gelen key ile ilgili islemlerini yap ve listendeki geteventbysender functionu ile eventi bulup
Kod: Tümünü seç
if assigned(event) then
Event(sender, key)
Her olusan nesne otomatik olarak senin prosedürünü tetikleyecek ve akabinde kendine ait olan orjinal eventini tetikleyecektir.
kıdemsiz üye
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: keydown altında Türkçe Uppercase sorunu hakkında
adelphiforumz,
Sizi çok iyi anlıyorum. Edit nesnelerine herhangi ilave bir kod yazmadan düzgün bir büyük harf kullanımı olmuyor. XE8 de bile sorun devam etmekte. Hatırladığım kadarıyla başka programlama dillerinde de bu sorun var. Ben, büyük harf ihtiyacı olan Edit nesneleri için size verdiğim kod gibi bir tane procedure yazıp bütün Edit nesnelerinin keypress eventlerini bu koda bağlıyordum. Sadece tek procedure ile çözüm sağlamış oluyorum. Muhtemelen siz de bu şekilde çözüm bulmuşsunuzdur.
Edit:
TCustomEdit nesnesinin kodunu incelerseniz, büyük/küçük harf yönetimini Delphi'nin değil Windows'un yaptığını göreceksiniz. Yani sorun Windows'dan kaynaklanıyor.
Sizi çok iyi anlıyorum. Edit nesnelerine herhangi ilave bir kod yazmadan düzgün bir büyük harf kullanımı olmuyor. XE8 de bile sorun devam etmekte. Hatırladığım kadarıyla başka programlama dillerinde de bu sorun var. Ben, büyük harf ihtiyacı olan Edit nesneleri için size verdiğim kod gibi bir tane procedure yazıp bütün Edit nesnelerinin keypress eventlerini bu koda bağlıyordum. Sadece tek procedure ile çözüm sağlamış oluyorum. Muhtemelen siz de bu şekilde çözüm bulmuşsunuzdur.
Edit:
TCustomEdit nesnesinin kodunu incelerseniz, büyük/küçük harf yönetimini Delphi'nin değil Windows'un yaptığını göreceksiniz. Yani sorun Windows'dan kaynaklanıyor.
Kod: Tümünü seç
procedure TCustomEdit.CreateParams(var Params: TCreateParams);
const
Alignments: array[Boolean, TAlignment] of DWORD =
((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));
Passwords: array[Boolean] of DWORD = (0, ES_PASSWORD);
ReadOnlys: array[Boolean] of DWORD = (0, ES_READONLY);
CharCases: array[TEditCharCase] of DWORD = (0, ES_UPPERCASE, ES_LOWERCASE);
HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
OEMConverts: array[Boolean] of DWORD = (0, ES_OEMCONVERT);
NumbersOnlyStyle: array[Boolean] of DWORD = (0, ES_NUMBER);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'EDIT');
with Params do
begin
Style := Style or (ES_AUTOHSCROLL or ES_AUTOVSCROLL) or
Alignments[UseRightToLeftAlignment, FAlignment] or
BorderStyles[FBorderStyle] or Passwords[FPasswordChar <> #0] or
NumbersOnlyStyle[FNumbersOnly] or
ReadOnlys[FReadOnly] or CharCases[FCharCase] or
HideSelections[FHideSelection] or OEMConverts[FOEMConvert];
if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
begin
Style := Style and not WS_BORDER;
ExStyle := ExStyle or WS_EX_CLIENTEDGE;
end;
end;
end;
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: keydown altında Türkçe Uppercase sorunu hakkında
Bu kodu deneyen olmadı galiba?fesiharslan yazdı:TEdit nesnesinin OnKeyPress olayında aşağıdaki gibi kullanabilirsiniz.
Kod: Tümünü seç
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin ShowMessage(string(Key).ToUpper); end;

Re: keydown altında Türkçe Uppercase sorunu hakkında
Delphi 7 de yazığınız kod kesinlikle çalışmıyorfesiharslan yazdı:Bu kodu deneyen olmadı galiba?fesiharslan yazdı:TEdit nesnesinin OnKeyPress olayında aşağıdaki gibi kullanabilirsiniz.
Kod: Tümünü seç
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin ShowMessage(string(Key).ToUpper); end;
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: keydown altında Türkçe Uppercase sorunu hakkında
Haklısınız. String Helper yapısı Delphi XE3 ve daha üst sürümleri içindir.