İlk harf büyük diğerleri küçük

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
zaxacm
Üye
Mesajlar: 129
Kayıt: 05 Ara 2005 05:48

İlk harf büyük diğerleri küçük

Mesaj gönderen zaxacm »

Aşağıdaki kodlarla ilk harf büyük oluyor.Benim istediğim, o anda ister capslock açık olsun ister kapalı olsun; sadece ilk harf büyük olacak diğer harfler küçük olacak.Yani capslock aktif de olsa sadece ilk harf büyük olacak diğer harfler küçük olacak.Nasıl bir değişiklik yapmamız lazım.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
with Sender as TEdit do
if (SelStart = 0) or (Text[SelStart] = ' ') or (Text[SelStart] = '.') then
begin
if Key in ['a'..'h','j'..'z'] then
begin
Key := UpCase(Key);
end else
begin
if key in ['ı','ğ','ü','ş','i','ö','ç'] then
begin
Key :=Fana.HARFBUYUT(Key);
end;
end;
end;
end;
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Bu istediğinizi girildiği anda değilde editten çıkışta yapsanız daha kolay olmaz mı? Aşağıdaki kod u programınıza ekleyip editin on exitine de uygun kodları yazarsanız istediğinizi verecektir.

Kod: Tümünü seç

//*************** UPPER FIRST TR    *******************
function tform1.UpperFirstTr(Str:String) : String;
Const
  buyukharf:String='ÇĞIİÖŞÜ';
  kucukharf:String='çğıiöşü';
Var
  I :Integer;
  NewStr:String;
Begin
  NewStr:='';
        IF LENGTH(STR)=0 THEN begin result:=str; exit; end;
    if (Pos(Str[1],buyukharf)>0)   Then
      NewStr:=NewStr+buyukharf[Pos(Str[1],buyukharf)]
   Else
      if (Pos(Str[1],kucukharf)>0)   Then
      NewStr:=NewStr+buyukharf[Pos(Str[1],kucukharf)]
      else

      NewStr:=newstr+uppercase(Str[1]);

  For I:=2 To Length(Str) Do
   if Pos(Str[I],buyukharf)>0 Then
      NewStr:=NewStr+kucukharf[Pos(Str[I],buyukharf)]
   Else
      NewStr:=NewStr+LowerCase(Str[I]);

  Result:=NewStr;
End;


editin onexitini de aşağıdaki gibi bir kod yazabilirsiniz.

Kod: Tümünü seç

edit1.Text:=upperfirsttr(edit1.Text);
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
zaxacm
Üye
Mesajlar: 129
Kayıt: 05 Ara 2005 05:48

Mesaj gönderen zaxacm »

Merhaba
Editten çıkarken olmaz çünkü edittin change olayında filtreleme yapıyorum.Yukarıdaki kod da filtreleme kodlarının bir parçası.Filtrelemenin türkçe sorun çıkarmaması için edite harf girerken ilk harfin büyük diğerlerinin küçük olması gerekir
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Mesaj gönderen sunye »

Selam;

@ofenX in yazdığı kodu Edit'in KeyPress olayına uyarlarsan istediğini sonucu elde etmiş olursun.

Kolay Gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
zaxacm yazdı:Merhaba
Editten çıkarken olmaz çünkü edittin change olayında filtreleme yapıyorum.
bu konuyu biraz açabilir misiniz? Bu işlemi keypresste yapmak bana biraz zor geliyor. Çünkü bir sürü kontrolü düşünmek zorundasınız. Hangi konumdayım. Seçilen bir şey varken mi tuşa basıldı ......
gibi bir sürü şeyle uğraşmak zorunda kalırsınız. Bunun yerine siz edit1 in text ini alacaksınız ya , onu almayın benim aktardığım fonksiyona edit1 in textini uygulayın öyle filtrenizi yapın daha çabuk sonuca ulaşırsınız.

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
      edit1.ClearSelection;

    label1.Caption:=UpperFirstTr(edit1.text+key);

end;

Yukarıdaki gibi kullanabilirsiniz. Yalnız son key değerine biraz dikkat etmeniz gerekir. Eğer BackSpace tuşu ise son karakteri edit1 den silecek şekilde string fonksiyonlarını kullanmanız gerekecek.


Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

@ofenx'in söylediklerine ben de hak veriyorum. EditKeyPres içinde yapmaya çalışırsan bir sürü şeyi kontrol etmen lazım. Ama dert değil diyorsan
Kabaca böyle

Kod: Tümünü seç

function UpperCaseTr(C: Char): Char;
const
  low:string='abcçdefgğhıijklmnoöprsştuüvyz';
  upp:string='ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ';
var
  i : integer;
begin
  i := Pos(c,low);
  if  i > 0 then result := upp[i] else result := c;
end;

function NameCase(Str : String):String;
var
 i : integer;
 prev : char;
begin
  prev := ' ';
  for  i:= 1 to length(Str) do begin
    if prev = ' ' then Str[i] := UpperCaseTr(str[i]);
      prev := Str[i];
  end;
  Result := Str;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  Str : String;
  I : Integer;
begin
  // buraya hangi harflere izin verilecekse onlar gelecek!
  if pos(Key,'abcçdefgğhıijklmnoöprsştuüvyzABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ0123456789') = 0 then exit;
  Str := TEdit(Sender).Text;
  I := TEdit(Sender).SelStart;
  insert(Key,Str,I + 1);
  TEdit(Sender).Text := NameCase(Str);
  TEdit(Sender).SelStart := I + 1;
  Key := #0;
end;
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Büyük yazılmasını istediğiniz bütün editların keypress olayına bunu yazın

Kod: Tümünü seç

 with Sender as TdbEdit do
   if (SelStart = 0) or
      (Text[SelStart] = ' ') then
         if Key in ['a'..'z'] then
            Key := UpCase(Key); 
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Arama sonucu rastladım. :D

Mesela Edit1 de ÇŞÜĞ harfleri bile olsa ister büyük ister küçük kolaylıkla yapılabilir.

Kod: Tümünü seç

Edit1.Text:=AnsiUpperCase(Edit1.Text);
veya

Kod: Tümünü seç

Edit1.Text:=AnsiLowerCase(Edit1.Text);
gibi

ilk harfi büyük yapma ise

Kod: Tümünü seç

begin
Edit1.SelStart:=0;
Edit1.SelLengh:=1;
Edit1.Seltext:=AnsiUpperCase(Edit1.SelText);
end;
:wink: kolay gelsin.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

ender_arslanturk yazdı:Mesela Edit1 de ÇŞÜĞ harfleri bile olsa ister büyük ister küçük kolaylıkla yapılabilir.

Kod: Tümünü seç

Edit1.Text:=AnsiUpperCase(Edit1.Text);
Maalesef i 'yi büyüğe çevirirken veya I'yı küçüğe bu func. çakılıyor. Birilerinin Mikisofta Türkçe için bu çevrimin gerektiğini söylemesi lazım.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

coderlord yazdı:
ender_arslanturk yazdı:Mesela Edit1 de ÇŞÜĞ harfleri bile olsa ister büyük ister küçük kolaylıkla yapılabilir.

Kod: Tümünü seç

Edit1.Text:=AnsiUpperCase(Edit1.Text);
Maalesef i 'yi büyüğe çevirirken veya I'yı küçüğe bu func. çakılıyor. Birilerinin Mikisofta Türkçe için bu çevrimin gerektiğini söylemesi lazım.

zaten benim yaptığım küçük i yi büyük İ ye küçük ş yi büyük Ş ye veya tam tersine çevirir.

Öteki Türlü

Kod: Tümünü seç

begin 
Edit1.SelStart:=0; 
Edit1.SelLengh:=1; 
if Edit1.Seltext='i' then Edit1.Seltext:='I'; 
if Edit1.Seltext='I' then Edit1.Seltext:='i'; 
if Edit1.Seltext='ş' then Edit1.Seltext:='S'; 
if Edit1.Seltext='ü' then Edit1.Seltext:='U'; 
end;
gibi ...
zaxacm
Üye
Mesajlar: 129
Kayıt: 05 Ara 2005 05:48

Mesaj gönderen zaxacm »

Aşağıdaki şekilde çok güzel oluyor hem de keypressde çalışıyor. Başka arkadaşların da işine yarayabilir.

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;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam aynı yaptığın işlemi büyük harfler için de yapsak ya da başlık oldukça uzamış çünkü yanlış anlamış da olabilirim.

- Aşağıdaki şekilde bir kurgu yaptım çalışıyor.

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  low:string='abcçdefgğhıijklmnoöprsştuüvyz';
  upp:string='ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ';

  function UpperCaseTr(C: Char; L:Boolean): Char;
  // L -> True ise Upper, False ise Lower
  var
    i : integer;
  begin
    Case L of
    True : begin
             i := Pos(c,low);
             if  i > 0 then result := upp[i]
                       else result := c;
           end;
    False: begin
             i := Pos(c,upp);
             if  i > 0 then result := low[i]
                       else result := c;
           end;
    end; // Case
  end;
begin
  with Sender as TEdit do
    if (SelStart = 0) or (Text[SelStart] = ' ') or (Text[SelStart] = '.') then
    begin
      if Key in ['a'..'h','j'..'z']
      then Key := UpperCase(Key)[1]
      else if key in ['ı','ğ','ü','ş','i','ö','ç']
           then Key :=UpperCaseTr(Key, True);
    end else
    begin
      if Key in ['A'..'H','J'..'Z']
      then Key := LowerCase(Key)[1]
      else if key in ['I','Ğ','Ü','Ş','İ','Ö','Ç']
           then Key :=UpperCaseTr(Key, False);
    end; // if (SelStart = 0)
end;
Resim
Resim ....Resim
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

Nacizane benim kullandığım bir fonksiyon var

bunun için

Kod: Tümünü seç

Function Stringcevir(kelime: string; tip: integer): string;
var
  buyuk, kucuk: string;
  j, i: integer;
Begin
  {
  0 tümü küçük
  1 TÜMÜ BÜYÜK
  2 İlk harf büyük
  3 Her Kelimenin İlk Harfi Büyük
  }
  buyuk := 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZQWX';
  kucuk := 'abcçdefgğhıijklmnoöprsştuüvyzqwx';
  for i := length(Kelime) downto 1 do
    for j := 29 downto 1 do
      if (kelime[i] = buyuk[j]) or (kelime[i] = kucuk[j]) then
        case tip of
          0: kelime[i] := kucuk[j];
          1: kelime[i] := buyuk[j];
          2: if i = 1 then
              kelime[i] := buyuk[j]
            else
              kelime[i] := kucuk[j];
          3: if i = 1 then
              kelime[i] := buyuk[j]
            else if (kelime[i - 1] = ' ') or (kelime[i - 1] = '.') then
              kelime[i] := buyuk[j]
            else
              kelime[i] := kucuk[j];
        end;
  Result :=kelime;
end;
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@tuanna

- Soruyu dikkatle okursak, giriş sırasında bu işlemin yapılması üzerinde duruluyor. Senin kod girişten sonra çalışan bir model... :lol:
Resim
Resim ....Resim
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

muharem abi
çalışan modelin içine entegre etmesi herhalde sorun olmaz

diye düşünmüştüm... :D
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla