Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Karakter kontrolü
#1
Merhaba; Daha önce açmış olduğum (Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol) başlıklı benzen konu gibi olsa da bir birinden faklı.
Edit içine ondalıklı sayı olsun veya olmasın toplama işlemini yaptırmak istiyorum, bu nedenden dolayı nokta ve virgül adet kontrolüyle işleme başlamak istiyorum.
fakat bir türlü nokta ve virgül kontrolünü sağlayamadı. edit içine maksimum 1 adet virgül 2 adet nokta girilecek.  acaba nerede hata yapıyorum? bir türlü kontrol sağlanmıyor

var
  NoktaSay, VirgulSay: Integer;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Aranan: String = '.,';
var
  SearchChar: String;
begin
  for I := 1 to length(Aranan) do
  begin
    SearchChar := Key;
    if Pos('.', SearchChar[I]) > 0 then // Nokta var mı?
      Inc(NoktaSay);
    if Pos(',', SearchChar[I]) > 0 then // Virgül var mı?
      Inc(VirgulSay);

    if NoktaSay > 2 then // Nokta say
      if Not(Key in ['0' .. '9', #8]) then
      begin
        Key := #0;
      end;

    if VirgulSay > 1 then // Virgül say
      if Not(Key in ['0' .. '9', #8]) then
      begin
        Key := #0;
      end;
  end;end;

Anlayamadığım marketlerde bu işlem mi adamlar nasıl çözmüş Huh
Cevapla
#2
Merhaba,
Daha önce benzer konular Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konu başlığı altında görüşülmüştü.
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
benzer konuya yazdığım son procedure'yi incelediniz mi?
Cevapla
#4
(19-06-2017, Saat: 15:54)meko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olbenzer konuya yazdığım son procedure'yi incelediniz mi?

Aynen inceledim hata sizin vermiş olduğunuz örnekten fikir alarak yola çıktım, kaç gündür resmen kafayı yedim...

(19-06-2017, Saat: 15:53)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Daha önce benzer konular Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konu başlığı altında görüşülmüştü.

Onuda incelemiştim Fesih hocam.
Cevapla
#5
Suyu baştan keselim Big Grin  jedi componenti yükle jvcalcedit componenti forma bırak display formata #,##0.00 yapıştır yada cxcalcedit onda da aynı şekilde #,##0.00 işini göreceği kanısındayım.

“Do. Or do not. There is no try.”
Cevapla
#6
(19-06-2017, Saat: 16:23)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSuyu baştan keselim Big Grin  jedi componenti yükle jvcalcedit componenti forma bırak display formata #,##0.00 yapıştır yada cxcalcedit onda da aynı şekilde #,##0.00 işini göreceği kanısındayım.

Smile Hiç bizi yorma diyorsun
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#7
(19-06-2017, Saat: 17:03)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(19-06-2017, Saat: 16:23)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSuyu baştan keselim Big Grin  jedi componenti yükle jvcalcedit componenti forma bırak display formata #,##0.00 yapıştır yada cxcalcedit onda da aynı şekilde #,##0.00 işini göreceği kanısındayım.

Smile Hiç bizi yorma diyorsun

virgülden sonra 4 hane yeter diye düşünüyorum parasal tutarlar için (genel olarak) hiç bu kadar uğraştığımı da hatırlamıyorum yok noktadır yok vigüldür şukadar nokta bu kadar virgül display formatları ayarlıyoruz geçiyoruz müşteriye göre parametrik yapıp gül gibi geçiniyoruz.

“Do. Or do not. There is no try.”
Cevapla
#8
firemonkey mobil için bu tip bir örenin var mı hazır komponet tarzında
Cevapla
#9
(19-06-2017, Saat: 15:47)serhat Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba; Daha önce açmış olduğum (Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol) başlıklı benzen konu gibi olsa da bir birinden faklı.
Edit içine ondalıklı sayı olsun veya olmasın toplama işlemini yaptırmak istiyorum, bu nedenden dolayı nokta ve virgül adet kontrolüyle işleme başlamak istiyorum.
fakat bir türlü nokta ve virgül kontrolünü sağlayamadı. edit içine maksimum 1 adet virgül 2 adet nokta girilecek.  acaba nerede hata yapıyorum? bir türlü kontrol sağlanmıyor

var
  NoktaSay, VirgulSay: Integer;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Aranan: String = '.,';
var
  SearchChar: String;
begin
  for I := 1 to length(Aranan) do
  begin
    SearchChar := Key;
    if Pos('.', SearchChar[I]) > 0 then // Nokta var mı?
      Inc(NoktaSay);
    if Pos(',', SearchChar[I]) > 0 then // Virgül var mı?
      Inc(VirgulSay);

    if NoktaSay > 2 then // Nokta say
      if Not(Key in ['0' .. '9', #8]) then
      begin
        Key := #0;
      end;

    if VirgulSay > 1 then // Virgül say
      if Not(Key in ['0' .. '9', #8]) then
      begin
        Key := #0;
      end;
  end;end;

Anlayamadığım marketlerde bu işlem mi adamlar nasıl çözmüş Huh


Anladığım kadarıyla edite siz izin verilen adet kadar yani nokta 2 adet, virgül ise 1 adet girilmesini istiyorsunuz.
Fesih hocanın verdiği linki inceledim Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  Hakan uçar beyin yapmış olduğu kodlarda biraz değişiklik yaparak, sanırım sizin işini görecek şekilde uyarladım. 
bakalım sorununuzu çözecek mi?

function DelimiterCount(aValue: string; aDelimiter: Char): integer;
var
  X: Integer;
  S: String;
begin
  Result := 0;
  S := '';
  for X := 1 to length(aValue) do
  begin
    if aValue[X] <> aDelimiter then
      S := S + aValue[X]
    else
    begin
      Inc(Result);
      S := '';
    end;
  end;
end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if DelimiterCount(Edit2.Text, ',') >= 1 then
    if Not(Key in ['0' .. '9', '.', #8]) then
    begin
      Key := #0;
    end;
  if DelimiterCount(Edit2.Text, '.') >= 2 then
  begin
    if Not(Key in ['0' .. '9', ',', #8]) then
    begin
      Key := #0;
    end;
  end;
end;

Cevapla
#10
Gerekli Namespace ler..
uses RegularExpressions, StrUtils;

Fonksiyonuzmuz
function SaydaGelGurbanOlam(const Value, Delim : String) : Byte;
var
 tmpStr : String;
begin
 tmpStr := TRegEx.Replace(Value, '\w|\d|\'+ IfThen((Delim = '.'), ',', '.'), '');
 result := Length(tmpStr);
end;

Nasıl Kullanılır?
 // SaydaGelGurbanOlam(<Neyin İçinde Arayacak>, 'Ne Arayacak Nokta mı? Virgül mü?')
 showmessage( SaydaGelGurbanOlam('10.10', ',').toString );
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Datasnap Türkçe karakter sorunu [Çözüldü] hakanharbeli 4 118 11-02-2018, Saat: 03:29
Son Yorum: hakanharbeli
  XML'de Türkçe karakter sorunu [Çözüldü] serhat 5 457 25-07-2017, Saat: 19:57
Son Yorum: serhat
Question Form İçinde Form Parent Olayında Edit Kontrolü hyperxman 7 374 01-07-2017, Saat: 12:41
Son Yorum: hyperxman
  Mükerrer Kayıt Kontrolü quake16 20 1.387 17-03-2017, Saat: 17:44
Son Yorum: quake16
  Karakter silme serhat 7 581 11-02-2017, Saat: 08:49
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi