Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen F.Atagun »

Selamlar Değerli Dostlarım,

Forumdaki diğer yazışmalardan edite sadece sayı girilmesi işlemini aşağıdaki kod ile tamamladım.

Kod: Tümünü seç

case ord(key) of   
  48..57: // Sayısal aralıksa birşey yapma
  else
  ShowMessage('Lütfen Sayı Giriniz');
  key:=#0;
end;

Ancak bu kod Edit 'e nokta (.) yazmasını da engelliyor. Bu alanda küsüratlı hesaplamalar yaptırıyorum. Yukaridaki kodda nasıl birşey yaparak , nokta (.) hariç sayısal bir karakter girilmesini sağlayabiliriz ?

Not: Ayrıca Forumdaki mesajlarda Klavye Tuş Kodlarında nokta (.) tuşunun key kodunu bulamadım. Bilen varmıydı acaba ?

Teşekkür eder, iyi akşamlar dilerim



Sevgi ve Saygılarımla

Fatih
En son F.Atagun tarafından 03 Mar 2008 09:22 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

http://www.delphiturkiye.com/index.php? ... adece_sayi

'.' diye, noktayı eklemen yeterli.

Kolay gelsin.
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Mesaj gönderen F.Atagun »

Hocam Çok teşekkür ederim.
Noktayı da sayende ekledim

Kod: Tümünü seç

if not (key in ['0'..'9','.',#8]) then 
  begin
    Key:=#0;  //girilen karakter rakam veya backspace değilse null(#0)'a dönüştür
    Beep;       //bip sesi ile kullanıcıyı uyar.
  end;
Kullanıcı avatarı
tanerileri
Üye
Mesajlar: 55
Kayıt: 06 Tem 2007 11:30

Cevap aynı ama ben bu işi prosedur haline getirmiştim.

Mesaj gönderen tanerileri »

Genelkodlarının olduğu dosyada bu adla bir prosedur oluştur.


procedure EditeSadeceSayiGir(Sender: TObject; var Key: Char; Ondalikli: Boolean = True);
begin
if Ondalikli then
begin
if not (key in ['0'..'9', #8, '.', ',']) then
Key := #0
end
else
begin
if not (key in ['0'..'9', #8]) then
Key := #0
end;
end;



Çağrılması // Sonrada dilediğin Editte çağır. Editin keypress olayında ..

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
EditeSadeceSayiGir(Sender, Key); // Bu ondalıklı girişide izin verir
EditeSadeceSayiGir(Sender, Key,False); // Bu ondalıklı girişe izin vermez.
end;


kolay gelsin.
Bay_Y
Üye
Mesajlar: 116
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen Bay_Y »

Teşekkürler , Güzel bir örnek olmuş. Elinize Sağlık
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen ozcank »

Arkadaşlar Merhaba; Farkındayım bitmiş bir konu , bende araştırma yaparken Edit1 sadece sayı girilmesi konusunda ve bu konuyu inceledim.
bu kod da şöyle bir hata var Edit1 de sayıdan başka bir şey giremiyorsunuz evet ama iki tane virgül ve nokta koyabiliyorsun. Bu da hata verdiriyor programa.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen loaded »

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if (AnsiPos('.',TEdit(sender).Text)<>0) and (key='.') then key:=#0;
  if (AnsiPos('.',TEdit(sender).Text)=0) and (key=',') then key:='.';
  if not (Key in ['0'..'9', '.', #8, #9]) then Key := #0;
end; 
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen ozcank »

loaded kardeşim sadece nokta girebiliyorum virgül çalışmıyor.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen loaded »

Virgülün çalışmamasının nedeni;
Kodun, ondalıklı sayısal değer girişinde, virgülleri noktaya çevirmesidir.
Sizce;
Sayısal giriş alanın da bazen nokta bazen virgül kullanılması sorun oluşturmaz mı ?

Yine de hem nokta hem virgül kullanmak isterseniz ;

Kod: Tümünü seç

   if ((AnsiPos('.',TEdit(sender).Text)<>0) and (key='.')) or (AnsiPos(',',TEdit(sender).Text)<>0) and (key=',') then key:=#0;
   if not (Key in ['0'..'9', '.',',', #8, #9]) then Key := #0;
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen ozcank »

Kardeşim birde iki kere virgül ve noktalama girişine açık bu da hata verdiriyor.
selim kaplan
Üye
Mesajlar: 3
Kayıt: 14 Nis 2020 01:42

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen selim kaplan »

ben bilgisayar programcılığı okuyorum bir şey sormak istiyorum edit nesnesinin son rakamının çift olmasını nasıl sağlarız.
teşekkürler.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Edit'e sadece Sayı ve Nokta ( . ) Girilmesi

Mesaj gönderen ozcank »

Bu şekilde kullanabilirsin.

Kod: Tümünü seç

TNumericField(StokSabit.FieldByName('SATIS_FIAT1')).DisplayFormat := '#,0.00';
Cevapla