with Sender as TDBEdit do
if (SelStart = 0) or
(Text[SelStart] = ' ') then
begin
Case Key of
'ı': Key := 'I';
'i': Key := 'İ';
else Key := AnsiUpperCase(Key)[1];
end;
end;
yukrıdaki kodla editin ilk karakterini büyük harfe çeviriyorum ama benim istediğim bir harften önce nokta veya boşluk tuşu varsa o harfin büyük yazılması. onkeypress olayına nasıl bir kod yazacağımı çözemedim. dün en az 1000 mesajı kontrol ettim ama bulamadım.
merhaba.
kodu keydown yordamına yazmaya ne dersin?son basılan karakterin değerini length ile öğrenip (length(text)-1)'inci karaktere bakarsın nokta vs.kontrolünü yaparsın ve son harfi büyük harfe çevirirsin.
kolay gelsin.
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
function TR_Upper(ch: char): char;
begin
Case ch of
'ı': result := 'I';
'i': result := 'İ';
else result := AnsiUpperCase(ch)[1];
end;
end;
var
i, ss: integer;
st: string;
begin
ss := Edit1.SelStart;
st := Edit1.Text;
for i := 1 to length(st) do
if (i = 1) or ((i > 1) and (st[i - 1] = ' ') or (st[i - 1] = '.')) then
st[i] := TR_Upper( st[i] );
Edit1.Text := st;
Edit1.SelStart := ss;
end;
Yukarıda üstadımın verdiği kodlarda bir hata var.sonradan farkettiğim için tekrar sormaya yüzüm tutmadı. epey uğraş.tıktan sonra helvamı yapmayı başardım. başkasının işine yarar diye buraya ekliyorum
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
var
strng:string;
begin
strng:=Edit1.text;
if (Edit1.SelStart = 0) or
(Edit1.SelTEXT = ' ') then
Case Key of
'ı': Key := 'I';
'i': Key := 'İ';
else Key := AnsiUpperCase(Key)[1];
end
else
if (strng[Length(Edit1.Text)]=' ') or (strng[Length(Edit1.Text)]='.') then
Case Key of
'ı': Key := 'I';
'i': Key := 'İ';
else Key := AnsiUpperCase(Key)[1];
end
else
if NOT (strng[Length(Edit1.Text)]=' ') or NOT (strng[Length(Edit1.Text)]='.') then
Case Key of
'I': Key := 'ı';
'İ': Key := 'i';
else Key := AnsilowerCase(Key)[1];
end;
end;