proje ödevi: kendi excel versiyonumuzu oluşturmak..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
proje ödevi: kendi excel versiyonumuzu oluşturmak..
ödev buna yakın arkadaşlar.. microsoft excelden yardım almadan ona bağlantı yapmadan..5 10 işlemden oluşan bir ödev..
ben ilk önce her hangi iki hücre arasında 4 işlem yamayı yapacağım sonra da hücre adresleme..4 işlem ahkkında bir dökuman var ama kurcaladım anlayamadım..yardım edebilirmisiniz bana ?
kod..
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='1.Sayi';
StringGrid1.Cells[1,0]:='2.Sayi';
StringGrid1.Cells[2,0]:='Toplam';
StringGrid1.Cells[3,0]:='Fark';
StringGrid1.Cells[4,0]:='Çarpım';
StringGrid1.Cells[5,0]:='Bolum';
end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
var
sayi1,sayi2:integer;
sayi11,sayi22:real;
begin
sayi1:=StrToIntDef(StringGrid1.Cells[0,ARow],0);
sayi2:=StrToIntDef(StringGrid1.Cells[1 ,ARow],0);
sayi11:=StrToFloatDef(StringGrid1.Cells[0 ,ARow],0);
sayi22:=StrToFloatDef(StringGrid1.Cells[1 ,ARow],0);
StringGrid1.Cells[2,ARow]:=inttostr((sayi1) + (sayi2));
StringGrid1.Cells[3,ARow]:=inttostr((sayi1) - (sayi2));
StringGrid1.Cells[4,ARow]:=inttostr((sayi1) * (sayi2));
StringGrid1.Cells[5,ARow]:=FloatToStr((sayi11) / (sayi22));
end;
end.
bu kodu buldum arkadaşlar ama çalışmadı..
benim yapacağı aynı excelde oldugu gibi herhangi iki hucreye ornegin c1 e 5 a3 de 8 yazdık başka bır hucreye de c1+a3 dedik..o hucrenın ıcıne veya edite(bu farketmez benım için.) sonucu yazdırmam lasım.. kod uzun ise bir tanesini yazın gerisini ben getirmeye çalışayım yanı bır fıkrım yok arkadaslar yarrdım edın..
Hücre adresleme de de aynı sekılde ...Aklımdakı su ..ben bu hucrenın secme ozellıgını bılmıyorum... eger komutu ıle eger (bu hucre secılırse )kı ben komutu bılmıyorum ...labela hucrenın adresını yaz dıyecegım..benım aklıma gelen bu..daha kolay bır yontemı varsa benı uzun uznu yazmaktan kurtarmıs olursunuz..
Yardımlarınız ve emeğiniz için şimdiden teşekkürler Abiler...
ben ilk önce her hangi iki hücre arasında 4 işlem yamayı yapacağım sonra da hücre adresleme..4 işlem ahkkında bir dökuman var ama kurcaladım anlayamadım..yardım edebilirmisiniz bana ?
kod..
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='1.Sayi';
StringGrid1.Cells[1,0]:='2.Sayi';
StringGrid1.Cells[2,0]:='Toplam';
StringGrid1.Cells[3,0]:='Fark';
StringGrid1.Cells[4,0]:='Çarpım';
StringGrid1.Cells[5,0]:='Bolum';
end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
var
sayi1,sayi2:integer;
sayi11,sayi22:real;
begin
sayi1:=StrToIntDef(StringGrid1.Cells[0,ARow],0);
sayi2:=StrToIntDef(StringGrid1.Cells[1 ,ARow],0);
sayi11:=StrToFloatDef(StringGrid1.Cells[0 ,ARow],0);
sayi22:=StrToFloatDef(StringGrid1.Cells[1 ,ARow],0);
StringGrid1.Cells[2,ARow]:=inttostr((sayi1) + (sayi2));
StringGrid1.Cells[3,ARow]:=inttostr((sayi1) - (sayi2));
StringGrid1.Cells[4,ARow]:=inttostr((sayi1) * (sayi2));
StringGrid1.Cells[5,ARow]:=FloatToStr((sayi11) / (sayi22));
end;
end.
bu kodu buldum arkadaşlar ama çalışmadı..
benim yapacağı aynı excelde oldugu gibi herhangi iki hucreye ornegin c1 e 5 a3 de 8 yazdık başka bır hucreye de c1+a3 dedik..o hucrenın ıcıne veya edite(bu farketmez benım için.) sonucu yazdırmam lasım.. kod uzun ise bir tanesini yazın gerisini ben getirmeye çalışayım yanı bır fıkrım yok arkadaslar yarrdım edın..
Hücre adresleme de de aynı sekılde ...Aklımdakı su ..ben bu hucrenın secme ozellıgını bılmıyorum... eger komutu ıle eger (bu hucre secılırse )kı ben komutu bılmıyorum ...labela hucrenın adresını yaz dıyecegım..benım aklıma gelen bu..daha kolay bır yontemı varsa benı uzun uznu yazmaktan kurtarmıs olursunuz..
Yardımlarınız ve emeğiniz için şimdiden teşekkürler Abiler...
Bulduğunuz kodla uğraşmayın. Kendiniz yazmayı deneyin. Stringgrid'in özelliklerini kullanınç eğer bir hücrenin içeriği = ile başlıyorsa orada analiz işlemini başlatın. ilk başlarda parantez analizi yapmayın. dediğiniz gibi önce dört işlem üzerine yoğunlaşın. hücre içeriğini karakter karakter okuyun ve hangi hücreye referas ettiği bulun.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
baslangic yeri olarak acik kaynak kodlu bu tur uygulamalari inceleyebilirsin.
formula engine bunlardan birisi.
http://sourceforge.net/projects/formulaengine/
http://www.codeproject.com/vb/net/FormulaEngine.asp
delphi ile yazilmamis ama mantik kurma yonunden yardimci olabilir.
formula engine bunlardan birisi.
http://sourceforge.net/projects/formulaengine/
http://www.codeproject.com/vb/net/FormulaEngine.asp
delphi ile yazilmamis ama mantik kurma yonunden yardimci olabilir.
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
hocam yapamadim yaa yardım edın
var
s1,sonuc:integer;
s2:integer;
begin
s1:=strtoint(form1.StringGrid1.Cells[1,1]);
s2:=strtoint(form1.StringGrid1.Cells[1,2]);
sonuc:=s1+s2;
edit1.Text:=inttostr(sonuc);
end;
burda amacım grıdın ıcıne yazdıgım herhangı ıkı sayıyı toplatmak
buttona bastıgım da edıte yazdırayım dedım ama hata mesajı verdı
burdan yola cıkmak ıstedım
bunun genısını dusunursek herhangı ıkı kutucuga yazdıgım sayıları topla buttonuna bastıgımda edıte sonucu yazdıracagım..yapamadım abıler yardım ya
var
s1,sonuc:integer;
s2:integer;
begin
s1:=strtoint(form1.StringGrid1.Cells[1,1]);
s2:=strtoint(form1.StringGrid1.Cells[1,2]);
sonuc:=s1+s2;
edit1.Text:=inttostr(sonuc);
end;
burda amacım grıdın ıcıne yazdıgım herhangı ıkı sayıyı toplatmak
buttona bastıgım da edıte yazdırayım dedım ama hata mesajı verdı

burdan yola cıkmak ıstedım
bunun genısını dusunursek herhangı ıkı kutucuga yazdıgım sayıları topla buttonuna bastıgımda edıte sonucu yazdıracagım..yapamadım abıler yardım ya
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya

boyle bir hata verdi abiler..ıkı sayıyı toplayıp edite yazdıracak..tabı ben baslangıc olarak bunu sectım
sonrasında hucrelerın adreslerını yazıp..uc edit kullanıp ikiisine mesela a1+b1 yazıp butona bastıgımda 3. edıte sonucu yazmasını ısteyecegım...zamanım az oldugu ıcın adreslemeyı de sormak ıstıyorum
orda nasıl yapacagız...
mesela ıf X hucresını secerse then
yaz x hucresını labela;
ama bunu nasıl yapacagımı bılmıyorum abiler
bak AktiveX tabında TF1book clasını süsleyip verebilirsin ama bunu illa stringgridde yapacam dersen alt yapısını iii hazırlaman lazım çünkü formül işini grid col ve row satırı sayısında bir matrixde saklaman ve ilk okutacağın kısmı dinamik matrix dizi de okuman lazım griddede görülen kısımda hesaplamayı hücredeki edit modunda ise matrix dizide bulunan forul varsa formulu yoksa editte bulunan gerçek diziyi getirmen lazım.
Kolay Gelsin...
Kolay Gelsin...
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
hocam teşekkur ederim fakat f1book ilk başta yaptım verdimm..zaten onu koysam 4 işlem baştan bitiyor.geriye adresleme kalıyor..f1 book u kabul etmedi hocamız..sizin dediğiniz matrix olayını pek anlamadım ama anladıgım kadarı ıle hucre ıcı toplama da yapılabılecek..ben o kadarını yapamam şu usttekı basıttı benım ıcın olsaydı ugrasır tum hucrelerın ısmını yazardım gerıye 4 ıslem kalıyordu.
yani stringgrid benim istediğim birsey değil yapmak zorunda oldugum bırsey hocam.
yani stringgrid benim istediğim birsey değil yapmak zorunda oldugum bırsey hocam.

stringridte[x,y]------------>x:satır , y:sütun demektir.
bu şekilde yaparsan çalışır.
Kod: Tümünü seç
s2:=strtoint(form1.StringGrid1.Cells[2,1]);
stringgridi baştan sona tarayıp dolu olan hücrelerdeki sayısal değerleri toplayıp Edit1' e atalım:
Stringgridin ilk satırını başlık için kullandığından i:=1 den başlıyor. aynı şekilde ilk sütununu sıra için kullndığından j:=1'den başlıyor.
umarım işini görür.
Kod: Tümünü seç
procedure TForm1.FormShow(Sender: TObject);
begin
stringgrid1.Cells[1,0]:='A';
stringgrid1.Cells[2,0]:='B';
stringgrid1.Cells[3,0]:='C';
stringgrid1.Cells[4,0]:='D';
stringgrid1.Cells[0,1]:='1';
stringgrid1.Cells[0,2]:='2';
stringgrid1.Cells[0,3]:='3';
stringgrid1.Cells[0,4]:='4';
end;
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
toplam:integer;
begin
toplam:=0;
for i:=1 to stringgrid1.RowCount-1 do begin
for j:=1 to stringgrid1.ColCount-1 do begin
if stringgrid1.Cells[i,j]<>'' then begin
toplam:=toplam+strtoint(stringgrid1.Cells[i,j]);
end;
end;
end;
Edit1.Text:=inttostr(toplam);
end;
Stringgridin ilk satırını başlık için kullandığından i:=1 den başlıyor. aynı şekilde ilk sütununu sıra için kullndığından j:=1'den başlıyor.
umarım işini görür.
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya
- raikkonen21
- Üye
- Mesajlar: 49
- Kayıt: 02 Nis 2007 10:02
- Konum: Konya