Uzun zaman oldu ancak ilgilenebildim.. Şimdi kod şu oldu;
// Bu bir hesap makinası çalışmasıdır.. Henüz program çalışma aşamasındadır.
//
// Şu andaki hataları.
// --------------------
// 4 işlem şu an için eh işte çalışmaktadır. ancak henüz son aşamaya gelmemiştir
// Hesap makinası bu haliye sadece tamsayılarda işlem yapmaktadır.
// Hata kontrol mekanizmalarının bazıları programda varmış gibi gözüksede henüz çalışmamaktadır.
// "," düğmesi henüz çalışmamaktadır.
// "," "-" "/" ve "=" işlemleri henüz çalışmamaktadır.
// Ardarda farklı işlemler tıklandığında henüz çalışmamaktadır.
import gtk.Main;
import gtk.MainWindow;
import gtk.VBox;
import gtk.Grid;
import gtk.Label;
import gtk.Entry;
import gtk.Button;
import std.stdio : writeln;
import std.string : format;
// import std.algorithm : canFind;
import std.conv;
class Pencere : MainWindow {
// const işlemDüğmeleri = [ "+", "-", "*", "/", "=", "Sil", "Geri", "Kapat", "", "," ];
long hafıza;
long hafızaÇarpmaBölme=1;
bool ekranTazele=false;
VBox kutu;
Entry ekran;
Grid kalbur;
Label etiket1;
Button[] düğmeler;
alias Tıklamaİşlevi = void delegate(Button);
this() {
super("İlkel Hesap Makinası..");
// düğmelerin isim ve konumlalarını tutan DüğmeBilgisi adında bir yapı tasarlanıyor..
struct DüğmeBilgisi {
string isim;
uint sıra;
uint üstboşluk;
uint genişlik;
uint yükseklik;
Tıklamaİşlevi işlev;
}
// bu yapıdan düğmeBilgileri adında nesnemizi oluşturuyoruz.
DüğmeBilgisi[] düğmeBilgileri = [
{ "Sil" , 0, 0, 1, 1,&Sil},
{ "Geri" , 1, 0, 1, 1,&Geri},
{ "" , 1, 0, 1, 1,&Boş },
{ "Kapat", 3, 0, 1, 1,&Kapat },
{ "7" , 0, 1, 1, 1,&Rakam },
{ "8" , 1, 1, 1, 1,&Rakam },
{ "9" , 2, 1, 1, 1,&Rakam },
{ "/" , 3, 1, 1, 1,&Bölme },
{ "4" , 0, 2, 1, 1,&Rakam },
{ "5" , 1, 2, 1, 1,&Rakam },
{ "6" , 2, 2, 1, 1,&Rakam },
{ "*" , 3, 2, 1, 1,&Çarpma },
{ "1" , 0, 3, 1, 1,&Rakam },
{ "2" , 1, 3, 1, 1,&Rakam },
{ "3" , 2, 3, 1, 1,&Rakam },
{ "-" , 3, 3, 1, 1,&Çıkarma },
{ "0" , 0, 4, 1, 1,&Rakam },
{ "," , 1, 4, 1, 1,&Virgül },
{ "=" , 2, 4, 1, 1,&Eşittir },
{ "+" , 3, 4, 1, 1,&Toplama },
];
// Görsel bileşenlerin nesnelerini oluşturuyoruz
kutu = new VBox(false, 2);
kalbur = new Grid();
ekran = new Entry();
// Bileşen Ayarları..
setSizeRequest(250, 230);
move(200, 120);
ekran.setAlignment(1);
kalbur.setRowHomogeneous(true);
kalbur.setColumnHomogeneous(true);
kutu.packStart(ekran, false, false, 0);
kutu.packEnd(kalbur, true, true, 0);
// düğmeler nesnelerimizi oluşturup düğme isimlerini bunlara atıyoruz Ayrıca düğmeleri ekrana, daha önceden
// tanımladığımız düğmeBilgileri yapısına göre yerleştiriyoruz..
foreach (d; düğmeBilgileri) {
düğmeler ~= new Button(d.isim);
kalbur.attach(düğmeler[$-1], d.sıra, d.üstboşluk,d.genişlik,d.yükseklik);
düğmeler[$-1].addOnClicked(d.işlev);
}
// görsel bileşenleripenceremize ekleyip tümünün ekranda görünmesini sağlıyoruz
add(kutu);
showAll();
}
void Rakam(Button düğme) {
writeln("Tıklama oldu ",düğme.getLabel()," Tıklandı"); // Kontrol...
if (ekranTazele) {
ekran.setText(to!string(""));
}
ekran.setText(ekran.getText() ~ düğme.getLabel());
ekranTazele=false;
}
void Toplama(Button düğme) {
writeln("Çıkarma Tıklandı ",düğme.getLabel()); // Kontrol...
ekran.setText(to!string((to!long(ekran.getText()))+hafıza));
hafıza=to!long(ekran.getText());
ekranTazele=true;
}
void Çıkarma(Button düğme) {
writeln("Çıkarma Tıklandı ",düğme.getLabel()); // Kontrol...
}
void Çarpma(Button düğme) {
writeln("Çarpma Tıklandı ",düğme.getLabel()); // Kontrol...
ekran.setText(to!string((to!long(ekran.getText()))*hafızaÇarpmaBölme));
hafızaÇarpmaBölme=to!long(ekran.getText());
ekranTazele=true;
}
void Bölme(Button düğme) {
writeln("Bölme Tıklandı ",düğme.getLabel()); // Kontrol...
}
void Eşittir(Button düğme) {
writeln("Eşittir Tıklandı ",düğme.getLabel()); // Kontrol...
}
void Sil(Button düğme) {
writeln("Sil Tıklandı ",düğme.getLabel()); // Kontrol...
ekran.setText("");
}
void Geri(Button düğme) {
writeln("Geri Tıklandı ",düğme.getLabel()); // Kontrol...
if(ekran.getText()=="") {
ekran.setText("");
}
else if(((to!long(ekran.getText()))/10)==0) {
ekran.setText("");
}
else {
ekran.setText(to!string((to!long(ekran.getText()))/10));
}
}
void Boş(Button düğme) {
writeln("Boş Tıklandı.. O da neyse.. ",düğme.getLabel()); // Kontrol...
}
void Virgül(Button düğme) {
writeln("Virgül Tıklandı ",düğme.getLabel()); // Kontrol...
}
void Kapat(Button düğme) {
writeln("Kapat Tıklandı ",düğme.getLabel()); // Kontrol...
Main.quit();
}
}
void main(string[] args)
{
Main.init(args);
Pencere pencere= new Pencere();
Main.run();
}
programın başında nelerin çalışmadığı yorumlama satırlrında yazılı. Açıkçası şimdilik benim için en büyük problem şu gözüküyor; diyelimki 25+78+32+23... yazdınız bunlarda sıkıntı yokken 25+78-32.. yazdığınızda düğme tıklandığı anda işlemi temsil eden işleve gittiğinden o işlevde son tıklanan işleme göre hareket ediyor.. Sanırım anlatmayı pek beceremedim biraz daha açıklayayım;
25 yazıp + ya tıkladığınızda Topla() işlevimize program gidiyor doğal olarak ardından 78 yazıp - ye tıkladığımızda yine doğal olarak - yi temsil eden Çıkarma() işlevine gidiyor bu durumda önceki "+" yani Topla() işlevinde yapılması gereken işlev yapılmamış oluyor :-)
Bu noktada sizden sadece gidişat konusunda yorum beklemekteyim.. Hani açıkçası birkaç saat uğraşmama rağmen bu sorunun belini kıramadım henüz.. Birde bu tür sorular sormam saçma mı oluyor yada bu şekilde değilde başka türlümü bir yöntem uygulasam soru sormak için bu konuda da hiç çekinmeden olumlu / olumsuz eleştirilerinizide beklemekteyim.
Programla ilgili Kendi düşüncemide aktarayım size.. Bence sorunun çözüm özeti şu; tıklama dört işlem buton tıklaması olduğunda ilk seferde bu işlemi bir yere alıp ardından ikinci sefer dört işlem buton tıklamasında önceki işlemi yapan işleve yönlenmesi gerekiyor..
Bunu aslında başarmam çok zor değil ancak her dört işlem tıklamasında program kendi işlem işlevine gittiğinden bunu halledemiyorum (Şimdilik :#: ) Belkide dörtişlem tıklaması olduğunda işlemin kendisini temsil eden işlevlere değilde öncelikle bir ayrı işleve yönlendirme yapsam ve ardından ordan işlem işlevlerine gidebilsem sanırım bu iş olur gibi geliyor bana
(dört işlem buton tıklaması= + ya basıldıysa Topla() işlevi çağrılıyor, * ya basılınca Çarpma() işlevi çağrılıyor )
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]