Çok faydalı oldu Erdem hocam bu yazdıklarınız.. Ali Hocam ve sizin tecrübeerinizin haklı olduklarını hobi olarak yaptığım her kodlama da dahada iyi anlıyorum.. Buton ve parametre olayını da tam olarak anladım bu arada..
şimdilik kod şu şekilde oldu.
import gtk.Main;
import gtk.MainWindow;
import gtk.Layout;
import gtk.Label;
import gtk.Entry;
import gtk.Button;
import std.stdio : writeln;
import std.string : format;
import std.conv;
class Pencere : MainWindow {
int rakam1,rakam2,işlem;
Layout düzen;
Entry giriş1,giriş2,giriş3;
Label etiket1;
Button[] düğmeler;
this() {
super("İlkel Hesap Makinası..");
struct DüğmeBilgisi {
string isim;
int x;
int y;
}
DüğmeBilgisi[] düğmeBilgileri = [
{ "0", 10, 210 },
{ "1", 10, 165 },
{ "2", 70, 165 },
{ "3", 130, 165 },
{ "4", 10, 120 },
{ "5", 70, 120 },
{ "6", 130, 120 },
{ "7", 10, 75 },
{ "8", 70, 75 },
{ "9", 130, 75 },
{ "+", 190, 75 },
{ "-", 190, 120 },
{ "*", 190, 165 },
{ "/", 190, 210 },
{ ".", 70, 210 },
{ "=", 130, 210 },
];
düzen = new Layout(null, null);
etiket1 = new Label("İLKEL HESAPLAMA YAPIYORUZ..");
giriş1 = new Entry();
foreach (d; düğmeBilgileri) {
düğmeler ~= new Button(d.isim);
düzen.put(düğmeler[$-1], d.x, d.y);
düğmeler[$-1].addOnClicked(&işle);
}
// Bileşen Ayarları..
setSizeRequest(250, 275);
move(300, 200);
giriş1.setAlignment(1);
düzen.setSizeRequest(50, 50);
düzen.put(etiket1, 5, 5);
düzen.put(giriş1, 10, 25);
add(düzen);
showAll();
düğmeler[1].addOnClicked(&işle);
}
void işle(Button düğme) { // Bu işlevde girilen değerler sayımı değilmi ve giriş kutusuna gelen değerler yan yana eklenerek yazılıyor..
if(düğme.getLabel()=="+"||düğme.getLabel()=="-"||düğme.getLabel()=="*"||düğme.getLabel()=="/"||düğme.getLabel()=="=") {
işlemYap(düğme);
}
else {
writeln("Tıklama oldu",düğme.getLabel()); // fonksiyonun çalışıp çalışmadığının konrolünü sağlamak için vardır. Program bitimikaldırılacak!
auto ekran = giriş1.getText();
giriş1.setText(ekran ~ düğme.getLabel());
try {
int ilk = to!int(giriş1.getText());
giriş1.setText(to!string(ilk));
} catch (ConvException hata) {
// Hatayı bildiriyoruz
etiket1.setLabel("HATA: İki tamsayı girmelisiniz");
writeln("Uyarı!! Hata fırlatıldı!!");
} catch (Exception hata) {
// Başka çeşit bir hata oluştu
etiket1.setText(format("HATA: %s", hata.msg));
}
}
}
void işlemYap(Button düğme) { // Bu işlevde 4 işlem ve "=" işlemleri komtrol edilecek böylece 4 işlem yapılabilecek
if (rakam1!=0) {
rakam2=to!int(giriş1.getText());
if (işlem==1) rakam1+=rakam2;
if (işlem==2) rakam1-=rakam2;
if (işlem==3) rakam1*=rakam2;
if (işlem==4) rakam1/=rakam2;
writeln("şimdi yeni hafıza",rakam1);
giriş1.setText(to!string(rakam1));
işlem=0;
}
else {
rakam1=to!int(giriş1.getText());
giriş1.setText(to!string(""));
switch (düğme.getLabel()) {
case "+":
writeln("+ Tıklandı");
işlem=1;
break;
case "-":
writeln("- Tıklandı");
işlem=2;
break;
case "*":
writeln("* Tıklandı");
işlem=3;
break;
case "/":
writeln("/ Tıklandı");
işlem=4;
break;
case "=":
writeln("= Tıklandı");
işlem=5;
break;
default:
break;
}
}
writeln("işlemYap Tıklandı işlem yapıyorum... ilk rakam=",rakam1); // fonksiyonun çalışıp çalışmadığının konrolünü sağlamak için vardır. Program bitimikaldırılacak!
}
}
void main(string[] args)
{
Main.init(args);
Pencere pencere= new Pencere();
Main.run();
}
bi noktaya geldi ama henüz tam olarak çalışmıyor.. hafta sonunu bekleyemeden birşeyler yaptım.. şimdi ilk rakkam deilde ikinci rakamdan sonra herhangi bir 4 işlem tıklandığında önceki tıklanan ile karışan switch() işlevini düzenleyeceğim.. şu haliyle doğru çalışmıyor ama kafaya taktım bu programı öyle yada böyle bitireceğim :-p Bu arada çok iyileştirme olacak onun farkındayım ancak bi kabasını alayım sonra ince işlerine bakacağım
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]