Delphi Can

Orjinalini görmek için tıklayınız: Karakter kontrolü
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
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
Merhaba,
Daha önce benzer konular İzin verilen adet kadar konu başlığı altında görüşülmüştü.
benzer konuya yazdığım son procedure'yi incelediniz mi?
(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.
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.
(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
(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.
firemonkey mobil için bu tip bir örenin var mı hazır komponet tarzında
(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;

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 );
Sayfalar: 1 2