hangi buttondan geldi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
aliyonca
Üye
Mesajlar: 34
Kayıt: 06 Ara 2004 04:57
Konum: GEBZE/KOCAELİ

hangi buttondan geldi

Mesaj gönderen aliyonca »

Merhaba.
programımda 40 adet tuş var ve bunların "enable/disable" durumların "database" den okutuyorum.
Aynı şekilde "enable" durumdaki bir tuşa basıldığı anda; basılma anındaki "tarihi", "saati" ve "hangi düğmeye basıldığını" "database" e kayıt etmek istiyorum.
Şimdi bunu yapabilmek için bir adet "procedure" kullanmak istiyorum ve bu "procedure" de hangi düğmeye basıldığını bulmak için "if then else" kullanmak istemiyorum.
Neden? diyecek olursanız, artık bu şekilde programlama konusunda ilerleyemiyeceğimi anladım. Bu işlemi yapabilmek için daha kısa bir yol bulmam lazım diye düşünüyorum.
Bunun için ise şöyle bir yol düşündüm
"TusEnable" adıyla bir "procedure" tanımladım ve "procedure" e aşağıdaki kodları yazdım

Kod: Tümünü seç

with TButton(FindComponent('Button' + IntToStr(TusNo))) do
  begin
  Enabled:=False;
  end;
devamına "database" e kayıt için gerekli kodları yazdım.
Tuşların herbirinin "OnClick" olayına da aşağıdaki kodları yazdım.

Kod: Tümünü seç

TusNo:=1; {Button numarası}
TusEnable;
Bu şekile "if then else" kodlarından kurtulmuş oluyorum :).
Ama benim istediğim şu;
bütün tuşların onclick olayı için Button1 in onclick olayını seçip kod satırlarından tasarruf etmek istiyorum.
Button1 in Onclick olayına da öyle bir kod yazmalıyımki hangi tuşa basıp Button1 in Onclick olayının çalıştığını bulayım.

Teşekkürler...
www.DelphiTurkiye.com u Çok Seviyorum :)
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Caption);
end;
bu kod belki bi fikir verir :)

Bu kodu bir butonun OnClick olayına yazarsın, diğer butonlardan da bu olayı çağırırsın...
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

muskut yazdı:

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Caption);
end;
bu kod belki bi fikir verir :)

Bu kodu bir butonun OnClick olayına yazarsın, diğer butonlardan da bu olayı çağırırsın...
Bende benzeri yöntem kullanırım her butona ayrı bir Tag no veririm. Ona göre yönlendirme yaparım.

Kod: Tümünü seç

begin
  Case TButton(Sender).Tag of
  0 :
  1 :
  2 :
  end;
end;
gibi ..
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

case ile bu iş 40'a kadar gider :) ömür dayanmaz gibi geliyor bana :)
aliyonca
Üye
Mesajlar: 34
Kayıt: 06 Ara 2004 04:57
Konum: GEBZE/KOCAELİ

Mesaj gönderen aliyonca »

Teşekkürler.
Örnekleriniz çok güzel.
Programın tamamı 6 satır ama bir dünya iş yaptırıyorum :wink:
www.DelphiTurkiye.com u Çok Seviyorum :)
aliyonca
Üye
Mesajlar: 34
Kayıt: 06 Ara 2004 04:57
Konum: GEBZE/KOCAELİ

Mesaj gönderen aliyonca »

Merhaba yine ben :).
Bu yaptığım programı iki ayrı bilgisayarda, biri server diğeri client olacak şekilde çalıştırmak istiyorum. Database tabiki serverda bulunacak. client, kendi üzerindeki basılan tuşun zamanlamasını serverda ki database e aktarımını yapacak. Client aynı zamanda serverdaki database i de okuyabilecek (hatta filtreleme de yaptırmam lazım). Bu işlemleri client ten nasıl gerçekleştireceğim ? Birde database deki ilgili table daki kayıtlardan düne ait olanları, server ilk açıldığında farklı bir table a taşımam lazım.
bunu neden istiyorum? Çünkü clientleri ilgilendiren bugünkü oluşacak kayıtlar.
Bu iş için interneti kullanacağım. her kayıt eklenmesinde ve kayıt değişiminde clientlerin tabloyu tekrar yüklemeleri gerektiğini düşünürsek, olayın yavaşlaması söz konusu olabilir. Tabi test etmek lazım kesin bişi diyemem.
bu iş için hangi component i kullanmalıyım. Ben indy i düşünüyorum ama daha uygunu varsa, neden olmasın :).

Ha birde yukarıda anlattığım ama daha basit bir şekli olabilir diye düşündüğüm şu noktada (her kayıt değişikliğinde clientlerin database i yeniden okumaları ve kayıtlara göre kendi üzerlerindeki tuşları enable/disable özelliklerini ayarlamaları) bir fikre ihtiyacım var :). Çünkü bir günde eğer 1000 kayıt (veya daha fazla) olursa bu demek oluyorki ortalama serverdan 800.000 kayıt okunacak ve clientlere gönderilecek. Acaba bu iş yavaş olurmu? (Clientlerin sayısı bu konu için önemli) Tecrübem olmadığından bunun için yorum yapamıyacağım. Tecrübeli arkadaşlarımdan yorum bekliyorum.

Teşekkürler.
www.DelphiTurkiye.com u Çok Seviyorum :)
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

muskut yazdı:case ile bu iş 40'a kadar gider :) ömür dayanmaz gibi geliyor bana :)
Slm

her buttonun görevi farklı olursa :roll:
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

orası öyle, eğer her buton kendine ait bir fonksiyona, faklı bir işleve de sahip olacaksa, bunun için dediğiniz gibi bir yöntem kullanmak gerekir. Ben hepsinin aynı işi yaptığını varsaymıştım
Cevapla