FastReport ta Bantların olaylarında Delphideki Fonksiyonu...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

FastReport ta Bantların olaylarında Delphideki Fonksiyonu...

Mesaj gönderen vkamadan »

MErhaba ,
FastReport ta Bantların olaylarında Delphideki Fonksiyonu nasıl çağırabilirim.
kolaygelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Böyle birşey denemedim ama Fast Report 3'te pascal script olayı var. Hemen her tür kodu yazabiliyorsun.

Kolay gelsin.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Mustafa hocam , orası öylede benim arka planda bir çok VT ile etkileşimli sorgul sonuçları döndüren fonctionlarım var bunları her groupband başlangıcında yazmam gerekiyor mesela gibi bir takım işlemler.
Bu olaylar için gerekiyor.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Mesajımı yazarken kafamdan bir çözüm geçiyordu bir baktım çözüm ta kendisii şöyleki ,
Tetiklenmesini istediğim olayın proceduresini yazıyorum

Kod: Tümünü seç

procedure MyGroupBandOnBefarePrint(Sender:TfrxComponent);
begin
//olaylar işlemler vb..
end;

Sonra Delphi ortamında ilgili groupbandı bulup olayına atama yapıyorum;

Kod: Tümünü seç

TfrxGroupHeader(frxReport1.FindObject('GroupHeader1')).OnBeforePrint:=MyGroupBandBefarePrint;
belki lazım olan olur. iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,

FastReport 3'te tanımlama şöyle yapılıyor:

Kod: Tümünü seç

  frxReport.AddFunction('function SAYIOKUYAZ(Sayi:Variant):String;','User','User');
Daha sonra da frxReport bileşenin OnUserFunction olayına uygun kodları yazıyorsunuz.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
yukarıda yazdığım çözüm denemediğim olabileceğini düşündüğüm bir çözümdü TFrxNotifyEvent ları String bir ifade alıyor ve atamalarda hafıza adresi değil , FastReport içerisinde Script olarak tanımladığım bir procedurenini String olarak adını parametre alabiliyor. bu çok korkunç bir sorun :shock: ,
şöyle bir örnek vereyim, Grup olarak oluşturduğum bir hesap ekstrem var diyelim her bir groupheader da benim kişiye ait DEviri buldurmam lazım , bunuda sadece ve sadece Delphideki bir procedureyi çağırarak yapmam mümkün. Benim delphi tarafında o an hangi olayın tetiklendiğini tespit etmem gerekiyor. bunu nasıl yapabilirim kara kara düşünüyorum

@t-hex ,
OnUserFunction kullanımını birz daha açabilirmisin, yani delphide ki bir fonksiyonu FastReport içierisiniden parametre gönderip nasıl dönüş değerini alabiliirm?
Volkan KAMADAN
www.polisoft.com.tr
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

bir örnek vererek açıklamaya çalışayım :

Kod: Tümünü seç

function tanimla(Deger:Variant):String;
begin
  Result:='Sıfır';
  if Deger >0 then Result:='Pozitif';
  if Deger <0 then Result:='Negatif';
end;
tanimla adlı fonksiyon gelen değerin negatif veya pozitif olmasına göre bir string döndürüyor.

Kod: Tümünü seç

procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
begin
  frxReport1.AddFunction('function Tanimla(Deger:Variant):String;');
end;
function TForm1.frxReport1UserFunction(const MethodName: String;
  var Params: Variant): Variant;
begin
 if MethodName = 'TANIMLA' then begin
   Result := tanimla(Params[0]);
 end;
end;
frxReport1 nesnesine ilgili olaylara bu kodları yazıyoruz.

Rapor tasarımında da frxMemo yerleştirip, içine

Kod: Tümünü seç

[TANIMLA(1)] [TANIMLA[-1)]
şeklinde kullanıyoruz. Dizayn anında hata verir, runtimeda çalışır.

Kolay gelsin.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@t-hex ,
ilgin için teşekkürler. Çok mükemmel bir şekilde işime yaradı.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba;
Şimdi biraz saçma bir durumla karşı karşıyayım ;
@t-hex user defined fonksiyonu frxMemo içinden kullanabilirken sorunsızca, Fast Script bölümünde kullanmak isteidğimde TAnımsız Nitelik hatası alıyorum. bu user defined fonksiyonları script içinden kullnamıyormuyuz ben şöyle çağırıyorum

frxMemo içinde, (Sorunyok)

Kod: Tümünü seç

[NAKLIYEKUNBUL('A',<kebir."hk">)]

Fast Script içinden de (Tanımsız Nitelik hatası alıyorum)

Kod: Tümünü seç

procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
var
Borc,Alacak,Bakiye:Double;
begin
  Borc:=NAKLIYEKUNBUL('B',<kebir."hk">);
  Alacak:=NAKLIYEKUNBUL('A',<kebir."hk">);
  Bakiye:=Borc-Alacak;
  Memo25.value:=Borc;
  Memo26.value:=Alacak;
  Memo27.value:=Bakiye;
end;
Volkan KAMADAN
www.polisoft.com.tr
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

@vkamadan,

AddFuction metodunu oNBeforePrint olayından başka bir yere taşıyın, yani rapor hazırlanırken çalışabilecek bir yere, ben ilk örnekte onbeforeprint olayına yazdım o yüzden, prepare anında tanımıyor fonksiyonu.

Mesela frxReport form üstündeyse , formun oncreate olayına yazın. Ben birkaç denem yaptım, script içinde de kullanabiliyorsunuz. Sadece addfuction metodunun yeri yanlış
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

EVet,
çok teşekkürler. şu an sorun yok.
iyi çalışamalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla