Sayıları hanelerine bölen metodu işletme problemi..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Immortal
Üye
Mesajlar: 34
Kayıt: 18 Ağu 2003 01:03
Konum: istanbul
İletişim:

Sayıları hanelerine bölen metodu işletme problemi..

Mesaj gönderen Immortal »

Merhaba sayıları hanelerine bölen bir metod yazmak istedim ve yaptım.
Şimdi ise sorum/sorun ben bu işlemi tıpkı hesap makinesinde ki gibi giriş anında yapmak istiyorum!

Yani...;

Yazdığım Metod -v1.0
-----------------------------------------------------------------

Kod: Tümünü seç

function NoktaKoy(ParasalAlan:String):string;
var
  KS,_Index,Bolum,Sbt,AO:Integer;
begin
KS:=Length(ParasalAlan);
Sbt:=3;
AO:=0;
  if (KS <= 3) then exit
  Else
  begin
    for Bolum := 1 to (KS div 3) do
    begin
    inc(Sbt,AO);
    _Index := (KS - Sbt) + 1;
    Insert('.',ParasalAlan,_Index);
    AO:=3;
      if (ParasalAlan[1]='.') then  Delete(ParasalAlan,1,1);
    result:=ParasalAlan;
    end;
  end;
end;
{sayılar hanelerine ayrıldığı zaman result 'a bir değer atanmakta!}
-----------------------------------------------------------------

...Buna göre metod u herhangi bir Edit 'in onKeyUp olayında işlettiğimde sonuç anlamsızlaşıyor!
-Nasıl anlamsızlaşıyor ? - Edit1.Text:=NoktaKoy(Edit1.Text); diye kullanınca result değeri Edit 'e eşitlendiği
an imleç başa dönüyor! ve iş arap saçı moduna giriyor, kısaca deniyin görün derim.[belki denemeniz bile gerekmez]

Fakat Edit1'in onKeyUp olayına -> Edit2.Text:=NoktaKoy(Edit1.Text); yazdığımızda birinci alana sayı girilirken ikinci alanda aynı anda bu sayının
hanelere ayrıldığı görülüyor ama istediğim şeyden bir hayli uzak! -Ben bu etkiyi veri girişi yaptığım Edit1 de istiyorum-
NOT: Veri girerken "Aynı an" noktasında metodun bu hali biraz yetersiz kaçıyor! bu anlamda metodu aşağıda ki gibi bir hale soktum!

Yazdığım Metod -v1.1
-----------------------------------------------------------------

Kod: Tümünü seç

procedure NoktaKoy(ParasalAlan:TEdit);
var
  KS,_Index,Bolum,Sbt,AO:Integer;
  temp:string;
begin
KS:=Length(ParasalAlan.Text);
Sbt:=3;
AO:=0;
temp:=ParasalAlan.Text;
  if (KS <= 3) then exit
  Else
  begin
    for Bolum := 1 to (KS div 3) do
    begin
    inc(Sbt,AO);
    _Index := (KS - Sbt) + 1;
    Insert('.',temp,_Index);
    AO:=3;
    ParasalAlan.Text:=temp;
      if (ParasalAlan.Text[1]='.') then  Delete(temp,1,1);
    ParasalAlan.Text:=temp;
    end;
  end;
end;
-----------------------------------------------------------------
işletimi Edit1 'in onKeyUp 'ı --> bu hali 1.0 versyonundan biraz daha sağlıklı çalışıyor gibi.
................
Edit2.Text=Edit1.Text;
NoktaKoy(Edit2);
...............
------------------------------------------------------------------
Kısaca Hesap makinesinde ki gibi giriş anında hanelere bölme olayını bu metodlardan birisiyle
sizce yapabilir miyim ya da ne gibi değişiklikler yapmalıyım?...vs???
Yardımlarınızı bekliyorum teşekkürler ve iyi çalışmalar!


NOT1: kullanılan bileşenler; 2 tane Edit(Edit1,Edit2) alanı isterseniz birde button!
UYARI: metodlarda hanelerine bölme esnasında noktalardan arındırma yapmadım bunun farkındayım ama sorun bundan ziyade
aktif olan edite metodlarla değer atandığında imlecin başa dönmesinden kaynakladığını sanıyorum ve görüşlerinizi buna yoğunlaştırmanızı
diliyorum. Örn: Hesap makinesinde imleç yok.
En son Immortal tarafından 20 Eyl 2004 05:21 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bul olay için kuruş olayı ilevesi olmayacaksa en güzeli onchange eventinde kodlama yapmak olacaktır.

Daha önce bu konuyla ilgili bir çok kod yazdım hatta Komponentim bile var arama yaparsan hepsine ulaşabilirsin. :wink:

viewtopic.php?p=5001#5001

Bu içlerinden birtanesi.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Immortal
Üye
Mesajlar: 34
Kayıt: 18 Ağu 2003 01:03
Konum: istanbul
İletişim:

Mesaj gönderen Immortal »

Merhaba,

Kod: Tümünü seç

 Edit1.SelStart := length(Edit1.Text);  
Sanırım aradığım şey bu ! teşekkür ederim!
Bu arada bu konu ile ilgili bende component yazmak istiyorum o yüzden bu şekilde sorma gereği duydum.
Tekrar teşekkürler!
Kullanıcı avatarı
Immortal
Üye
Mesajlar: 34
Kayıt: 18 Ağu 2003 01:03
Konum: istanbul
İletişim:

Mesaj gönderen Immortal »

merhaba selstart ile sorunumu çözdüm .... ve kendi metodumda bazı sorunlarıda düzeltim sonuç

Kod: Tümünü seç

function NoktaKoy(ParasalAlan:String):string;
var
  KS,_Index,Bolum,Sbt,AO:Integer;
begin

KS:=Length(ParasalAlan);
Sbt:=3;
AO:=0;
  if (KS <= 3) then begin result:=ParasalAlan; exit; end  //    <-- düzeltildi
  Else
  begin
    for Bolum := 1 to (KS div 3) do
    begin
    inc(Sbt,AO);
    _Index := (KS - Sbt) + 1;
    Insert('.',ParasalAlan,_Index);
    AO:=3;
      if ((ParasalAlan[1]='.') or (ParasalAlan[1]='0') ) then  Delete //    <-- düzeltildi
         (ParasalAlan,1,1);
    end;
    result:=ParasalAlan;
  end;
end;

işletimi ise;

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject);
var
    i:integer;
    Sayi:String;
begin

  Sayi := Edit1.Text;

    for i:=1 to length(Edit1.Text) do
    begin
    delete(sayi,pos('.',sayi),1);
    end;

  Edit1.Text:=NoktaKoy(Sayi);
  Edit1.SelStart:=Length(Edit1.Text);
end;
Bu da sizin bana yolladığınız linkteki metoda alternatif bir metod olarak kabul edilebilir!

Kod dosyası

NOT : NHesabi.ra --> dosyayı indirdikten sonra uzantısını "rar" diye değiştirin! geocities bu tarz dosyaları almıyorda:)

Teşekkürler ve iyi çalışmalar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Tabikide :wink:

Teşekkürler

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla