Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Karakter kontrolü
#1
Merhaba; Daha önce açmış olduğum (Parayı çarpma ve toplama işlemi) 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 İzin verilen adet kadar konu başlığı altında görüşülmüştü.
DelphiCan'dır!
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ı: benzer 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ı: Merhaba,
Daha önce benzer konular İzin verilen adet kadar 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ı: 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.

Smile Hiç bizi yorma diyorsun
WWW
Cevapla
#7
(19-06-2017, Saat: 17:03)yhackup Adlı Kullanıcıdan Alıntı:
(19-06-2017, Saat: 16:23)masteryoda Adlı Kullanıcıdan Alıntı: 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.

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ı: Merhaba; Daha önce açmış olduğum (Parayı çarpma ve toplama işlemi) 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 İzin verilen adet kadar  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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  CxGrid Türkçe karakter sorunu mur93 1 350 12-11-2025, Saat: 09:22
Son Yorum: cinarbil
  ADOConnection bağlantı kontrolü hakkında mxpain 1 542 26-05-2025, Saat: 11:49
Son Yorum: mrmarman
Exclamation Ftp gönderilen dosyada tr karakter sorunu forumcuali 7 3.460 01-05-2025, Saat: 02:26
Son Yorum: m_ekici
  idftp dosya kontrolü ercanskose 2 791 30-10-2024, Saat: 16:15
Son Yorum: ercanskose
  karakter silme sorunu ercanskose 2 656 03-09-2024, Saat: 11:02
Son Yorum: ercanskose



Konuyu Okuyanlar: 1 Ziyaretçi