Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
inputquery ile sayisal değer kontrolu
#1
merhaba arkadaşlar.
inputquery yöntemi ile aldığım değerin integer veya dobule olmasını istiyorum(kısacası sayısal değer).
Fakat aşağıdaki kodda   "if not VarIsNumeric(s) then " satırı sayısal değere rağmen false döndürüyor. 
Şartı dogru şekilde nasıl kontrol ettırebılırım.
bölme işlemi ile hata olusuyormu dıye bakmaktan daha kolay bır yolu vardır heralde diye düsünüyorum

  var
    SifirlamaValues: TArray<string>;
begin
 SetLength(SifirlamaValues, 1);
 if InputQuery('SIFIRLAMA DEĞERİNİZ GİRİNİZ',['1.Sayaç: '],SifirlamaValues,
    function(const AValues: array of string): Boolean
    var
     s: string;
    begin
 
     Result := True;
     for s in AValues do
     begin
       if not VarIsNumeric(s) then // bu satır sayısal değer girilse bile false döndürüyor.yanı begın bloguna gırıyor.
       begin
         Result := False;
       end;
     end;

     if not Result then
     begin
       MessageDlg('Sayısal Değer Girilmelidir', mtError, [mbOk], 0);
     end;
   end

 ) then
 begin
   Memo1.Lines.AddStrings(SifirlamaValues);
 end else
 begin
   Memo1.Lines.Add('Sayısal Değer Girilmedi');
 end;
end;
Cevapla
#2
Merhaba,
TryStrToInt fonksiyonu işinizi görecektir. 
var
  Sayi: Integer;
begin
 if TryStrToInt(Edit1.Text, Sayi) then
   ShowMessage(Format('"%d" bir sayıdır.', [Sayi]))
 else
   ShowMessage(Format('"%s" bir sayı değildir! Lütfen bir sayı giriniz.', [Edit1.Text]));
end;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
(18-09-2019, Saat: 13:52)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
TryStrToInt fonksiyonu işinizi görecektir. 
var
  Sayi: Integer;
begin
 if TryStrToInt(Edit1.Text, Sayi) then
   ShowMessage(Format('"%d" bir sayıdır.', [Sayi]))
 else
   ShowMessage(Format('"%s" bir sayı değildir! Lütfen bir sayı giriniz.', [Edit1.Text]));
end;

tesekurler @Fesih ARSLAN  hocam işe yaradı.
Cevapla
#4
(18-09-2019, Saat: 13:20)serdar Adlı Kullanıcıdan Alıntı: merhaba arkadaşlar.
inputquery yöntemi ile aldığım değerin integer veya dobule olmasını istiyorum(kısacası sayısal değer).
Fakat aşağıdaki kodda   "if not VarIsNumeric(s)  then " satırı sayısal değere rağmen false döndürüyor. 
Şartı dogru şekilde nasıl kontrol ettırebılırım.
bölme işlemi ile hata olusuyormu dıye bakmaktan daha kolay bır yolu vardır heralde diye düsünüyorum

  var
    SifirlamaValues: TArray<string>;
begin
 SetLength(SifirlamaValues, 1);
 if InputQuery('SIFIRLAMA DEĞERİNİZ GİRİNİZ',['1.Sayaç: '],SifirlamaValues,
    function(const AValues: array of string): Boolean
    var
     s: string;
    begin
 
     Result := True;
     for s in AValues do
     begin
       if not VarIsNumeric(s) then // bu satır sayısal değer girilse bile false döndürüyor.yanı begın bloguna gırıyor.
       begin
         Result := False;
       end;
     end;

     if not Result then
     begin
       MessageDlg('Sayısal Değer Girilmelidir', mtError, [mbOk], 0);
     end;
   end

 ) then
 begin
   Memo1.Lines.AddStrings(SifirlamaValues);
 end else
 begin
   Memo1.Lines.Add('Sayısal Değer Girilmedi');
 end;
end;

Sorunu @Fesih ARSLAN beyin önerisi ile aşabilmişsiniz ama; VarIsNumeric metodunun neden olumlu yanıt dönmediği hususu havada kalmış. Buna küçük bir izah getirmeye çalışalım.

Bu sorunun nedeni; VarIsNumeric metodu içine string tipli bir değişken geçiyor olmanız. Bu fonksiyon variant türünde bir parametre beklediği için variant haricindeki tüm tipler variant tipine implicit olarak cast ediliyor. Dolayısı ile VarIsNumeric metodunun içine geçilen parametre string değer içeren (VType'ı varUString olan) bir variant oluyor. Bu nedenle fonksiyondan olumlu bir yanıt dönmüyor.

 Yukarıdaki kodunuzda VarIsNumeric metoduna geçilecek parametreyi bir string tip ile değilde; sayısal değer tutabilen herhangi bir tip ile geçmiş olsaydınız, sonucun olumlu olduğunu gözlemleyebilecektiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
@Tuğrul HELVACI hocam aslında merak etmedim değil. VarIsNumeric fonksiyonu nıye var dıye dusundum sonra.
Bİlgilendirmeniz ıcın cok tedekkur ederım
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DBGrid Hücre Kontrolü OZCANK 16 1.053 03-04-2020, Saat: 17:36
Son Yorum: OZCANK
  değişkene atadağımzı deger prg içnde sürekli kalması hk. sadikacar60 10 1.326 17-01-2020, Saat: 17:24
Son Yorum: sadikacar60
  ÇÖZÜLDÜ-timer kullanmadan saat kontrolü mümkünmü? sadikacar60 3 729 10-09-2019, Saat: 22:19
Son Yorum: sadettinpolat
  Deneme süreli lisans kontrolü anemos 1 644 18-07-2019, Saat: 20:12
Son Yorum: cinarbil
  fonksiyon içinde parametreye default değer atama sorunu adelphiforumz 6 1.366 24-05-2019, Saat: 11:20
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi