Delphi FastReport 4 işlem çıktıları almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen Firarist »

Merhaba üstatlar,

Raporlama işlemi için FastReport kullanıyorum. Yapmak istediğim şey ilkokul öğrencileri için hızlıca 4 işlem alıştırmaları ile ilgili çıktılar almak. Çarpma ve toplama için işimi halledebilecek şekilde aşağıdaki kodları kullanıyorum.

Maalesef çıkarma ve bölme işlemleri için sonuç döndürecek kodları beceremedim. Sutun1'e yazılan rakamların Sutun2'den daha büyük olması olayında takıldım. Bir de kalansız bölme işlemleri yapabilmek için hangi yolu tercih etmeliyim? Örnek projeler de araştırdım fakat sonuca ulaşamadım. Yardımlarınızı bekliyorum.

İyi çalışmalar dilerim.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  frxUserDataSet1.RangeEnd := reCount;
  frxUserDataSet1.RangeEndCount := 15;
end;

Kod: Tümünü seç

procedure TForm1.frxUserDataSet1GetValue(const VarName: string;
  var Value: Variant);
var
  a, b: Integer;
begin
  if VarName = 'Sutun1' then
  begin
    a := Random(100);
    Value := a;
  end
  else if VarName = 'Sutun2' then
  begin
    b := Random(100);
    Value := b;
  end
  else if VarName = 'Sutun3' then
    Value := '';
end;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  frxReport1.ShowReport;
end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen freeman35 »

işlemleri neden fastreport a yıkıyorsun? Hesapla vs işleri delphi de yapyırt. Mesela memtable kullan, field lar üzerinde istediğin işlemi yapmam daha kolay. Fastreport a yaptırtmak gereksiz ve mantıksız. Fazladan kod yazmaya ve fazla işlem yükü demek. Fastreport u sadece yazıya aktarma işlemi için kullanın, koşula gere renklendirmek vs gibi basit işlemler için script yazmak daha mantıklı.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen Firarist »

Fikir için teşekkürler sayın hocam.

Memtable hiç kullanmadım araştıracağım, umarım işin üstesinden gelebilirim.

Benzer bir örnek kod olsa harika olurdu nette araştırdım lakin bir sonuca ulaşmadım.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen freeman35 »

google da "delphi tfdmemtable example" aratabilirsin

https://docwiki.embarcadero.com/CodeExa ... ain_Sample
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen Firarist »

Teşekkürler hocam.
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen Firarist »

Merhaba üstatlar...

İlk sorduğum sorudaki düzeni değiştirerek aşağıdaki şekilde random sayılarla toplama ve çıkarma işlemler yapmak istiyorum.

Form üzerinde soldan sağla ve alta doğru üç sütun halinde 15 tane label var. ilk 2 sütundaki label bileşenlerindeki rakamların toplamı (veya farkı) 3. sütundaki label bileşenleri içinde gösteriliyor.

Label1 + Label2 = Label3
Label4 + Label5 = Label5...

Rastgele sayılarla Toplama ve Çıkarma işlemleri yapıyorum. Alttaki kodlarla 100 içinde toplama ve çıkarma işlemleri yapılıyor ancak istediğim şu:

Form üzerindeki CheckBox1 seçi ise eldeli, değilse eldesiz toplama işlemleri üretmek istiyorum.
Aynı şekilde çıkarma işlemleri için seçili ise onluk bozarak, değilse onluk bozmadan çıkarma işlemler yapmak istiyorum.

Çok uğraştım ancak konunun üstesinden gelemedim. Yardımlarınız için şimdiden teşekkürler.

Kod: Tümünü seç

procedure TForm1.Button5Click(Sender: TObject);
var
  i, j{bölme} , sayi1, sayi2, sonuc: Integer;
  tamBolenler: array of Integer;
begin
  case RadioGroup1.ItemIndex of
    0:
      begin
        Randomize; 
        for i := 1 to 15 do 
        begin
          sayi1 := Random(100);
          sayi2 := Random(100);

          while sayi1 + sayi2 > 100 do 
          begin
            sayi1 := Random(100);
            sayi2 := Random(100);
          end;
          TLabel(FindComponent('Label' + IntToStr(3 * i - 2))).Caption :=
            IntToStr(sayi1); 
          TLabel(FindComponent('Label' + IntToStr(3 * i - 1))).Caption :=
            IntToStr(sayi2);			

          if TryStrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 2)))
            .Caption, sayi1) and
            TryStrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 1)))
            .Caption, sayi2) then
          begin
            sonuc := StrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 2)
              )).Caption) +
              StrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 1))
              ).Caption);
            TLabel(FindComponent('Label' + IntToStr(3 * i))).Caption :=
              IntToStr(sonuc);
          end;
        end;
      end;

    1:
      begin
        Randomize; 
        for i := 1 to 15 do 
        begin
          sayi1 := Random(100); 
          sayi2 := Random(100); 
          
          if sayi1 < sayi2 then // Eğer eksilen sayı çıkan sayıdan küçükse
          begin
            sonuc := sayi1;
            sayi1 := sayi2;
            sayi2 := sonuc;
          end;

          TLabel(FindComponent('Label' + IntToStr(3 * i - 2))).Caption :=
            IntToStr(sayi1);
 
          TLabel(FindComponent('Label' + IntToStr(3 * i - 1))).Caption :=
            IntToStr(sayi2);

          if TryStrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 2)))
            .Caption, sayi1) and
            TryStrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 1)))
            .Caption, sayi2) then
          begin
            sonuc := StrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 2)
              )).Caption) -
              StrToInt(TLabel(FindComponent('Label' + IntToStr(3 * i - 1))
              ).Caption);
            TLabel(FindComponent('Label' + IntToStr(3 * i))).Caption :=
              IntToStr(sonuc);
          end;
        end;
      end;
  end;
end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen freeman35 »

Tavsiyelerim:
- Çok kod yazmak iyi ve doğru kod yazmak değildir. Akla gelenin yazmak kod yazmak değildir, sade ve basit yazmak işlemleri ve hata ayıklamayı kolaylaştırır.

Kod: Tümünü seç

  case RadioGroup1.ItemIndex of
    0: begin
    // Her iki olasılıkta da aynı kod varsa neden "case RadioGroup1.ItemIndex of" burda ?
        Randomize; 
        for i := 1 to 15 do begin
          sayi1 := Random(100);
          sayi2 := Random(100);
...
bu kodlarda aynı ise neden tekrarlanıyor?

Kod: Tümünü seç

TLabel(FindComponent('Label' + IntToStr(3 * i - 2))).Caption := IntToStr(sayi1);
- Bu kadar lable la uğraşmak yerine string grid neden kullanmıyorsun?
- İlk mesajımda yazdığım gibi memtable kullanıp, bunu dbgrid lede yapabilirsin.
- lable lara erişmek için bul çevir ata yerine TListe aktarıp, zaten var olan döngünü kullanabilirsin. (Index için 1 to 15 yerine 0to 15 ile daha anlaşılır olur)

- Sence bu kod mantıklı mı? dikkat et, soru doğru yazılmış mı? değil.

Kod: Tümünü seç

while sayi1 + sayi2 > 100 do begin
   sayi1 := Random(100);
   sayi2 := Random(100);
end;
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen ertank »

freeman35 yazdı: 10 Eyl 2023 07:15 - Sence bu kod mantıklı mı? dikkat et, soru doğru yazılmış mı? değil.

Kod: Tümünü seç

while sayi1 + sayi2 > 100 do begin
   sayi1 := Random(100);
   sayi2 := Random(100);
end;
Kod 100 ve altında toplam üretmek için tasarlanmış gibi duruyor. Optimize mi konusu tartışılır. Ancak hatalı olup olmadığı konusu yapılacak işe göre değişir.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen ertank »

Firarist yazdı: 10 Eyl 2023 12:05 Form üzerindeki CheckBox1 seçi ise eldeli, değilse eldesiz toplama işlemleri üretmek istiyorum.
İfadenizi bölüm sonucu ondalıklı/ondalıksız diye anlıyorum. Fikir vermesi için aşağıdaki gibi bir kontrol kullanabilirsiniz. Pascal programlama dilinde "div" ifadesi tamsayı bölme yapar.

Kod: Tümünü seç

uses
  System.Math;
  
var
  Sonuc1: Double;
  Sonuc2: Double;
begin
  Sonuc1 := 10 / 3;
  Sonuc2 := 10 div 3;
  if SameValue(Sonuc1, Sonuc2) then
    ShowMessage('Tamsayı bölme')
  else
    ShowMessage('Ondalıklı bölme');
end;
Kod parçasını ezberden yazdım. Delphi ile test etmedim.
Firarist yazdı: 10 Eyl 2023 12:05 Aynı şekilde çıkarma işlemleri için seçili ise onluk bozarak, değilse onluk bozmadan çıkarma işlemler yapmak istiyorum.
Bu yazdığınızı hiç anlayamadım. Rakamlar ile her iki durum için örnek verebilir misiniz?
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen Firarist »

freeman35 yazdı: 10 Eyl 2023 07:15- Çok kod yazmak iyi ve doğru kod yazmak değildir. Akla gelenin yazmak kod yazmak değildir, sade ve basit yazmak işlemleri ve hata ayıklamayı kolaylaştırır.
Hocam ben de isterdim hatasız kodlaya yazabilmeyi, ama bilgi düzeyimi fark etmişsinizdir. O zaman kod yazma diyebilirsiniz tabi ki ama ben uğraşmak ve bazı konularda ihtiyacım olduğu kadarı ile kodlar yazabilmeye uğraşıyorum.
freeman35 yazdı: 10 Eyl 2023 07:15- Bu kadar lable la uğraşmak yerine string grid neden kullanmıyorsun?
- İlk mesajımda yazdığım gibi memtable kullanıp, bunu dbgrid lede yapabilirsin.
Bunun için çaba gösterdim ama cevaben yazmıştım hiç tecrübem yok MemTable konusunda.
ertank yazdı: 10 Eyl 2023 01:22Kod 100 ve altında toplam üretmek için tasarlanmış gibi duruyor.
Evet hocam toplamları 100'ü geçmeyen sayılarla toplama işlemi yapıyorum. Eldeli ve eldesiz toplama olayını halledemedim.
ertank yazdı: 10 Eyl 2023 01:22Bu yazdığınızı hiç anlayamadım. Rakamlar ile her iki durum için örnek verebilir misiniz?
Aynı CheckBox seçili iken Case of yapısı ile bazen toplama bazen de çıkarma işlemi yapmak istiyorum. Çıkarma işlemi yaparken CheckBox seçili ise Onluk bozarak çıkarma, değilse onluk bozmadan çıkarma işlemi yapılacak şekilde uğraştım.

Anladım ki bu olay beni aşıyor. İlginiz için teşekkürler. İyi çalışmalar dilerim üstatlar...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen freeman35 »

Firarist yazdı: 10 Eyl 2023 06:11
freeman35 yazdı: 10 Eyl 2023 07:15- Çok kod yazmak iyi ve doğru kod yazmak değildir. Akla gelenin yazmak kod yazmak değildir, sade ve basit yazmak işlemleri ve hata ayıklamayı kolaylaştırır.
Hocam ben de isterdim hatasız kodlaya yazabilmeyi, ama bilgi düzeyimi fark etmişsinizdir. O zaman kod yazma diyebilirsiniz tabi ki ama ben uğraşmak ve bazı konularda ihtiyacım olduğu kadarı ile kodlar yazabilmeye uğraşıyorum.
Her zaman dediğim gibi yazıda mimik jest olmadığından, kişi okuduğunu kendince anlar.
Öncelik ben kod hatalı demedim, mantıklı mı dedim. şu yüzden: link i eklemek istedim şu an docwiki pert :) şansına. Delphi help ten ve gugıl dan "delphi RandomRange" i araştır.

Yakın zamanda foruma atılmış bir mesaj var, " cevap yok mu? "sınava bir saat kaldı da." " buna dahi kod yazma vs demişken.
Asla kod yazma demem, aksine çabanı taktir ettiğim için sana ip uçları "kendimce" vermeye çalıştım. Program yazma becerisi, birinin öğretmesi ile bir yere kadar, gerisi kişinin beceri, çaba ve kabiliyetine göredir. Verdiğim konuları araştırırsan, yani o kodları örnekleri incelersen ve "Nasıl çalışıyor?" sorusuna cevap ararsan, öğrenirsin, öğrendikçe de kendini geliştirirsin. Her öğrendiğin komut, kod parçası aklında kalır, ve bir kod yazarken bunları hatırlarsın, işte bu gelişmedir. Ben 1984 beri program yazıyorum, hep opensource componentları indirir ve inceler değişiklikler yapmaya çalışırdım. Aramızdaki fark bu, Yani daha tecrübeliyim, evet, ama hayır, daha üstün değilim. bilmediğim çok şey var. Bilgisiz bile olsa her bakış açısı dinlemek gerekir, yeni bir şey üretebilir, görülmeyeni görmeye vesile olabilir.

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Delphi FastReport 4 işlem çıktıları almak

Mesaj gönderen freeman35 »

ertank yazdı: 10 Eyl 2023 01:22
freeman35 yazdı: 10 Eyl 2023 07:15 - Sence bu kod mantıklı mı? dikkat et, soru doğru yazılmış mı? değil.

Kod: Tümünü seç

while sayi1 + sayi2 > 100 do begin
   sayi1 := Random(100);
   sayi2 := Random(100);
end;
Kod 100 ve altında toplam üretmek için tasarlanmış gibi duruyor. Optimize mi konusu tartışılır. Ancak hatalı olup olmadığı konusu yapılacak işe göre değişir.
Mubarek, amaç hata bulup, nadir elementten nadir şevkleri istekleri kırmak için otur sıfır demek değil :) Kendini sorgulasın, öğrensin. Mesela, RandomizeRange diye bir Function varmış. Bunu bu arkadaşın mesajı sayesinde öğrendim
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla