Gtkd ile anahtar örneği yapmaya çalışıyordum. Hatta size de göstereyim.
<http://erdem.tk/resim/resim/Anahtar örneği.png>
Basitçe anahtar açıldığı zaman
Anahtar açıldı
Anahtar kapatıldı
yazacak. Ama sorun şu ki tek anahtar varken normal çalışıyor. Ama 2 anahtar varken sağdaki doğru çalışıyor. Soldaki anahtar açıldığı zaman hep sağdaki anahtarın durumunu yazıyor. Örneğin sağdaki anahtar açıksa
Anahtar açıldı
Anahtar açıldı
şeklinde yazıyor. Normalde kendi durumunu göstermesini istiyoruz.
import gtk.Main;
import gtk.MainWindow;
import gtk.Box;
import gtk.Switch;
import gobject.ObjectG;
import gobject.ParamSpec;
import std.stdio;
class Pencere: MainWindow
{
Box anaKutu;
Switch anahtar;
this()
{
super("Anahtar örneği");
setBorderWidth(10);
anaKutu = new Box(Orientation.HORIZONTAL, 6);
add(anaKutu);
anahtar = new Switch();
// önceden anahtar.addOnNotify(&anahtarAçık) şeklinde çağırıyordum
anahtar.addOnNotify(delegate void(ParamSpec, ObjectG)
{anahtarAçık(ParamSpec, ObjectG, &anahtar);}, "active");
anahtar.setActive(false);
anaKutu.packStart(anahtar, true, true, 0);
anahtar = new Switch();
anahtar.addOnNotify(delegate void(ParamSpec, ObjectG)
{anahtarAçık(ParamSpec, ObjectG, &anahtar);}, "active");
anahtar.setActive(true);
anaKutu.packStart(anahtar, true, true, 0);
showAll();
}
// "notify::active" olayı
void anahtarAçık(ParamSpec parametre, ObjectG nesne, Switch * geçerliAnahtar)
{
if (parametre.getName() == "active")
{
string durum;
if (geçerliAnahtar.getActive())
durum = "açıldı";
else
durum = "kapatıldı";
writeln ("Anahtar " ~ durum);
}
}
// "notify::active" olayı
void anahtarAçık(ParamSpec parametre, ObjectG nesne)
{
if (parametre.getName() == "active")
{
string durum;
if (anahtar.getActive())
durum = "açıldı";
else
durum = "kapatıldı";
writeln ("Anahtar " ~ durum);
}
}
}
void main(string[] args)
{
Main.init(args);
new Pencere();
Main.run();
}
delegate kullanarak nesnenin adresini göndermeye çalıştım ama gene aynı hata devam ediyor.
Bir de bu şekilde takma isim kullanarak delegate'ı nasıl kullanabiliriz acaba.
alias anahtarAçıldı = delegate void(ParamSpec, ObjectG) {anahtarAçık(ParamSpec, ObjectG, &anahtar);};
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply