Delphi hakkında yardım....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Delphi hakkında yardım....

Mesaj gönderen vedatkaba »

Delphi türkiye mimarları hepinize merhaba.

benim sorum, 2 tane edit arasında birinr sayı girilip öbürüne girmediğimiz zaman otamatik olarak sıfır atayarak programın çalışmasına nasıl devam ettirebilirim.

2.si ise iki form arasındaki bağlantıyı nasıl kursam daha sağlıklı olur.ve formlar arasındaki ilişkide dikkat edeceğim önemli noktalar hakkında bilgi alabilirmiyim.
benim database'm de sorun var.açıkcası register olayı nasıl giderebilirim bu konuyu.Daha önce bu konudan başım çok ağrıdı yardımlarınızı bekliyorum.
kullanıdığım dil delphi..
çok teşekkür ederim.:Hepinize başarılar....
Kullanıcı avatarı
karflake
Üye
Mesajlar: 222
Kayıt: 15 Haz 2003 03:57

Mesaj gönderen karflake »

Merhaba.
Edit'in Text özelliğine 0 atayarak varsayılan değerin 0 olmasını sağlayabilirsiniz.
Yani Object Inspector'de istediğiniz Edit'in text özelliğine 0 değerini atayabilirsiniz. Yeni değer girmediğiniz sürece 0 orada kalacaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

soru cok net olmadigi icin bir cok da yontem ile cozum olabilir gibime geliyor.. Mesela her iki edit'in de onchange eventlerine her iki edit'in de degerlerini kontrol eden ve en az biri sıfırdan buyukse isiniz yapan kodu yazabilir veya procedure'u cagirabilirsiniz....


Database'deki sorunun ne oldugunu ve register olayi derken ne kastettiğiniz daha açık yazarsanız yardımcı olmaya çalışırız....
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Soruma cevap verdiğiniz için çok teşekkür ederim.
cevabınızbeni aydınlattı.Daha geniş açıklarsam sorumu :

edit1.text
edit2.text
edit3.text button1.

butona bastığımda 3 tane edit içindeki sayıları toplayacak ama edit3 e sayı girmediysem edit3 e 0 atayarak yine üç editteki sayıları toplayarak sonucu nasıl verebilirim.
Ben databasedeki problemimi çözdüm.
Hepinize çok teşekkür ederim......
Kolay Gelsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- @karflake ve @fahrettin'e hak vererek bunları nasıl yapacağınız konusunda birşeyler yazmak istedim.

- Şu anda sabah saat 05:30 ve Nöbetçi Delphi HelpDesk olarak :) müsadenizle size bir programcı anekdotu yardımıyla önerimi yapıcam. Bu aslında bu işin ABC'si denebilir. Uygunsuz derseniz şimdiden özür dilerim. :oops:
  • - Afrika kıtasında, kıtanın en aşağısından Ümit Burnundan yukarıya Cebelitarık Boğazına kadar taranarak en az bir Fil bulunması istenmiş. Bunun için bir matematikçi, bir fizikçi ve bir de bilgisayar programcısı görevlendirilmiş. (Bu örnek yerine/konuya göre çoğaltılabilir.)

    - Matematikçi aramasında matematiksel, fizikçi fiziki yöntemler, programcı ise sistem analizi yaparak bunu çözümleyecekler. Programcı dışındakiler bizi ilgilendirmiyor, yorum serbest ama programcının çözümü şuymuş.

    - En son noktaya bir Fil koyup aramaya yine aşağıdan başlamış ama biliyormuş ki sonunda en az bir fil bulacak ve sorunsuz işini halledecektir. :o
- Size önerime gelince. İşleme başlamadan önce ilk olarak bu üç Edit içindeki Text ile ilgili kontrolleri yaparak sorun çıkarmayacak duruma getirin.

1. Kullanıcı Edit1, Edit2 ve Edit3'e giriş yaparken rakam dışındaki ifadelerin girişlerini engelleyin. Her Edit kutusunun OnKeyPress olayına;

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Const
  Rakamlar = ['1'..'9', '0']; // Buraya müsade edilecek karakterler girildi.
begin
  If NOT (Key in Rakamlar) then key := #0; 
  // Bu karakterler dışında girişler reddedildi.
end;
.. şekilde en azında kullanıcıya buraların harf değil rakam alanı olduğunu bir kere daha anlamasını sağlayın.

2. Klavye girişini kontrol altına aldık, ya bu alanlara başka bir şekilde giriş yaparsa ?? Nasıl olur demeyin, bir çok yolu var, en basiti Mouse ile Kopyala/Yapıştır yapılabilir. Klavyeden giriş olmadığından yukarda yaptığımız kontrolleri pass geçer, bu da sorun doğurur.

- Şimdi yazacağımız fonksiyon, toplama işlemini yap butona basıldığında Edit'leri kontrol edecek, gerekli düzeltmeler yapıp, cevaba ulaşmanız için yardımız olacak fonksiyondur.

3. Rakamsal ifade içermeyen karakterler karışmışsa, ufak bir fonksiyon ile bu karakterleri filtreleyip rakamların kalmasını sağlıyoruz...

Kod: Tümünü seç

Function TForm1.SadeceRakamKalsin(Yazi : String):String;
Const
  Rakamlar = ['1'..'9', '0']; // Buraya müsade edilecek karakterler girildi.
Var
  Sayac : Integer;
begin
  Yazi := Trim(Yazi); 
  // Yine yukarda anlattığım Fil hesabı, 
  // İlk olarak boşluklardan kurtulduk. 
  Sayac := 1; // Kontrolen başlanacak harfin sirasi
  Repeat
    If NOT (Yazi[Sayac] in Rakamlar)
    then Delete(Yazi, Sayac, 1); // Rakam içermiyorsa sil.
    else Inc(Sayac); // Rakam içeriyorsa sıradakine geç.
  Until Sayac > Length(Yazi); // Yazi sonunda döngüden çık.
  If Yazi <> '' then Result := Yazi // Yazi içinde halen birşey kaldıysa ki rakamdır, rakamsal ifade dönsün.
                else Result := '0'; // yazının tümü harfsel içerikse, hepsi silinmiştir, 0 rakamı dönsün.
end;
- Butona bastığımızda bu fonksiyonumuz sayesinde, edit'ler içinde harf varsa silinecek, rakam varsa kalacak, hiç rakamsal ifade yoksa yerlerine 0 yazılacak.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
 Toplam : Integer;
begin
 Edit1.Text := SadeceRakamKalsin(Edit1.Text);
 Edit2.Text := SadeceRakamKalsin(Edit2.Text);
 Edit3.Text := SadeceRakamKalsin(Edit3.Text);
 // Burada artık biliyoruz ki fonksiyonumu sayesinde
 // edit'ler içinde harf varsa silindi, rakam varsa kaldı,
 // hiç rakamsal ifade yoksa yerlerine 0 yazıldı.
 // Toplama işlemine gönül rahatlığıyla geçebiliriz.
 Toplam := StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text);
 ShowMessage(IntToStr(Toplam));  // Toplamı bir mesaj pencerisyle ekrana yansıttık.
end;
- Artık gönül rahatlığıyla sonuca ulaştık.

- Burada anlatmak istediğim sadece bu sorununuzla ilgili çözüm üretmek değil, genel düşünme mantığınızı olabilecek sorunlara önceden müdahale şeklinde oluşturmanızı sağlamaktı -ki bu olay zaten zamanla oluşacaktı-

- BU şekilde programlarınızda minimum kodla maksimum verim alırsınız, hem de hatalarınızın basit kod kural hataları şeklinde kalmasını sağlarsınız, zaten bu durumda Delphi IDE hatanın tam yerini söyler. :)

- Başınız ağrıtmadığımı umuyor, benzer sorunlar yaşayan veya başkaları, bu yazıyı okuyacak diğer arkadaşlara da önerilerimi yineliyor, çalışmalarında başarılar diliyorum.
Resim
Resim ....Resim
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

guzel fonksiyon kutuphaneye attım ilerde lazım olur belki:)
muharrem beyin affına sıgınarak
duzenleyip tekrar gonderiyorum

Kod: Tümünü seç

function OnlyNumInStr(S: string): string;
const
  Nums = ['1'..'9', '0'];
var
  i: Integer;
begin
  S := Trim(S);
  i := 1;
  repeat
    if not (S[i] in Nums) then
      Delete(S, i, 1) // Rakam içermiyorsa sil.
    else
      Inc(i); // Rakam içeriyorsa sıradakine geç.
  until i > Length(S); // S sonunda döngüden çık.
  if S <> '' then
    Result := S // S içinde halen birşey kaldıysa ki rakamdır, rakamsal ifade dönsün.
  else
    Result := '0';
  // yazının tümü harfsel içerikse, hepsi silinmiştir, 0 rakamı dönsün.
end;
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@gkimirti, efendim ne demek :) yayınlanmış bu kodlar sizin, bizim yani herkesin tasarrufundadır. :oops: Müsaade istemek yersiz. Bu kodları yazan bizlere genel olarak haber gruplarında kullanırız, biraz kaba tabir ama afiyet olsun demek düşer. :lol:

Ek:

- Ben de kod yazımında İngilizce'yi standart kabul ediyorum. Açıklayıcı olmak adına forumlarda Tütkçe değişken tanımları yapıyorum. 8)

- Aynı fikri paylaştığımızı buradan görmek ayrıca sevindirdi. :)
Resim
Resim ....Resim
Cevapla