Tam Sürümünü Görmek İçin : 1000 Label ise nasıl oluyo 2 !
Cevap yazan ve dalga geçen arkadaşlara çok teşekkürler.
Şimdi bu 1000 label için 1 oncilik() fonksiyonu yazıp, 1000 tanesinide bu onclick() fonksiyonuna yönlendirmeyi ögrendim.Ama şimdi de bu 1000 labelden hangisine tıklandığını bilemiyorum.Bunu nasıl öğrenebilirm.
Sender diye bişe var sanırım onunla oluyo.Ama nasıl kullanacağımı bilmiyorum
çok kısa bir kodla gösterebilirmisiniz.
yardımlarınız için şimdiden çok teşekkür ederim
1. http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
2. Bunu öğrenmek için öncelikle typecasting hakkında biraz bilgi edinsen daha iyi olur inancındayım
2.a http://www.developerfusion.com/show/3653/3/
2.b http://www.cprogramming.com/tutorial/lesson11.html
Type Casting çalıştım şimdi kısa bir kodla onclik() olayları aynı olan Label lerden
hangisinin Tıklandığını nasıl bileceğim konusunda yardım edermisin.
Teşekkürler.
Bak şimdi bu C builder'da nasıl yürüyor işler bilmem ama sana C# da bu işi nasıl yaptığımızı anlatayım ( aşağı yukarı çıkarırsın )
...
//Burada bir Label belirliyoruz o bin tanenin 586. sı
Label benimLabel586 = new Label( "ben 586 nolu butonum" );
//burada Label'a tıklandığında hangi fonksiyonun çalışacağını belirliyoruz
benimLabel586.Click = OnClick;
...
//Buda malum o fonksiyon, parametre olarak gelen "Sender" tıklanan
//Label'ı içeriyor
private void OnClick( Object Sender )
{
Label TiklananLabel = ( Label ) Sender;
}
burada tıklanan Label hangisi ile Sender nesnesi ile beraber gelir ve sen onu "Cast" ile bir label'a atarsın ve onu kullanırsın, c++ için muhtemelen dynamic yada büyük bir ihtimalle reinterpret_cast<> kullanman gerekir.
Kullandığın bileşenlerin tag özelliğine sıradan rakamlar ata.
Sonra hepsini yönlendirdiğin OnClick içerisinde switch içerisinde kontrol et.
Örnek:
switch(((TComponent *)Sender)->Tag) {
case 1 : //yapacağın işler...
break;
acehreli
05/07/2005, 00:07
naesse, verdigin baglantidaki bilgilerin cogunu bilen birisi olarak, yine de OnClick gibi bir kutuphane islevini nasil kullanacagimi anlayamiyorum. Dogru kaynaklar verdiginden emin misin?
atg, derleme zamaninda bildigin tUr donusumleri icin static_cast kullanilir, o da eger gerekiyorsa... reinterpret_cast, C++ tUr donusumu islecleri icinde en tehlikeli olan ve en uzak durulmasi gerekendir.
asoza, 1000 case'li switch... Imdat! :)
Ali
Euclides
05/07/2005, 01:23
Uçuk yöntemler kullanmak yerine 1000 tane labeli dynamic olarak yaratır ve yaratım anında da kaçıncı label olduğu parametre(SetWindowLong) olarak veririz. Sonra Message Queu döndüğünde varolan pencereden kaçıncı olduğunu alırız (GetWindowLong)
Tabii arkadaş kahramanlık yapıp static olarak yaratığından akılcıl bir çözüm bulmak çok zor...
asoza, 1000 case'li switch... Imdat! :)
Ali
valla haklısın. orası gözümden kaçmış :hiohahoha
TLabel * BenimLabel; //1 . burasını header da tanımlamak mantıklı.
BenimLabel = new TLabel(this); //1 seçildiyse burası Form->OnCreate ye
//kullanımı Label->OnClick içerisinde
BenimLabel = dynamic_cast <TLabel *>(Sender);
... //ne halin varsa gör
1000 labeli dinamik yaratmak her makinede mümkün olayabilir mi acaba? Programatik açıdan makul bir alternatifi yok mudur?
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.