listview içeriğini qreporta almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

listview içeriğini qreporta almak

Mesaj gönderen mulus »

Kısaca yapmak istediğim şu:

iki adet listview kullanıyorum. İlk listviewdeki iteme tıklayınca ikinci listview'a eklettiriyorum.. Yapmak istediğim ikinci listviewda biriken kayıtların quickreport aracılığı ile printpreview ve sonrasında print etmek..
diğer bir deyişle Tlistview'ın içeriğini qreport ile yazdırmak. ..
Genelde forumlarda qreport ile ilgili açıklamalarda dataset örnekleri verilmiş o yüzden bu konuda bir açıklama bulamadım..
Bu konuda bana yardım edecek yada kaynak gösterecek arkadaşlara şimdiden tşk ederim..
metinkorkmaz
Üye
Mesajlar: 46
Kayıt: 25 May 2005 09:08
Konum: izmir

Mesaj gönderen metinkorkmaz »

Kod: Tümünü seç

  TQRapYazdir = class(TForm)
    ....
    ....
    procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    procedure QRBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
  private
    { Private declarations }
    satirpump : integer;
    repview   : TListview;
  public
    { Public declarations }
  end;

procedure TQRapYazdir.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  satirpump:=0;
end;

procedure TQRapYazdir.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  if satirpump < rapview.Items.Count then
    with rapview do
    begin
        QRLabel1.Caption:=Items[satirpump].Caption;     
        QRLabel2.caption:=Items[satirpump].SubItems[0];
         ....
        QRLabel4.caption:=Items[satirpump].SubItems[3];
        // Listview daki columns adedi kadar QRLabel oluşturabilirsin
    end;
  inc(satirpump);
  MoreData:=rapview.items.count >= satirpump ;
end;
.........

  with TQRapYazdir.Create(Self) do
  try
    rapview:=mylistview2;
    PreviewModal;    
  finally
    Free;
  end;
TQRapyazdir benim kullandıgım quickreport un adıydı. Rapview (Tlistview) ve satirpump (integer) tanımlayacaksın. Yukarıdaki kodu kendine göre yeniden düzenle.
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

Cevap için teşekkür ederim ama qreporta da yabancıyım o yüzden kodun type kısmı ile birlikte gönderirsen çok sevinirim :oops: ...
Birde ben ana forma yazdır diye bir button koydum ve buna basılınca açılan formda göstericem
with TQRapYazdir.Create(Self) do
try
rapview:=mylistview2;
PreviewModal;
finally
Free;
end;
kısmını biraz açarsan çok memnun olurum...
yardımların için tekrar teşekkür ederim..
metinkorkmaz
Üye
Mesajlar: 46
Kayıt: 25 May 2005 09:08
Konum: izmir

Mesaj gönderen metinkorkmaz »

Bir tane quickreport aç, nasıl görünmesini istiyorsan o şekilde tasarla ve bu forma QRapyazdir (başka birşeyde olur, sadece alttaki koda tam uyum olsun diye söyledim.) ismini ver. Quickreportta formun tanımının altına şunları ekle (daha önce private a eklemişim, oraya erişemezsin public e almak gerek)

Kod: Tümünü seç

private
    { Private declarations }
  public
    { Public declarations }
    // eklenen altaki iki satır
    satirpump : integer;
    repview   : TListview;
  end; 
Object inspector da OnBeforePrint eventi ni çift tıkla gelen yere şunu yaz.

Kod: Tümünü seç

procedure TQRapYazdir.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  satirpump:=0;
end; 
Object inspector da OnNeedData yı çift tıkla gelen yere şunu yaz.

Kod: Tümünü seç

procedure TQRapYazdir.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  if satirpump < rapview.Items.Count then
    with rapview do
    begin
        QRLabel1.Caption:=Items[satirpump].Caption;     
        QRLabel2.caption:=Items[satirpump].SubItems[0];
         ....
        QRLabel4.caption:=Items[satirpump].SubItems[3];
        // Listview daki columns adedi kadar QRLabel oluşturabilirsin
    end;
  inc(satirpump);
  MoreData:=rapview.items.count >= satirpump ;
end; 
Ana pencereye geç ve buttonu çift tıkla, kod olarak aşagıdakileri yaz. mylistview2 senin ana formundaki listview bileşeninin ismi oluyor. Bu arada use unit ile quickreport unun oldugu forma anaformun erişebilmesini saglamayı unutma.

Kod: Tümünü seç

  with TQRapYazdir.Create(Self) do
  try
    rapview:=mylistview2;
    PreviewModal;
  finally
    Free;
Previewmodal metodu raporunu ekranda gösterir ve yazdır dügmesini tıklarsan yazdırır.

OnBeforePrint: Yazdırmadan önceki hazırlıklar için, biz burada listview için kullanacagımız sayacı sıfırlıyoruz.

OnNeedData: Quickreport un bilgi gerektiginde çagırdıgı bölüm. Burada listview daki bilgileri tanımladıgımız QRLabellara atıyoruz.

Umarım açıklayıcı olmuştur. Biraz deneme-yanılmayla sanırım halledebilirsin.
mulus
Üye
Mesajlar: 67
Kayıt: 30 May 2005 10:42
Konum: Bursa
İletişim:

Mesaj gönderen mulus »

Çok teşekkür ederim... amacım mantığını anlamaktı ve bu tam açıklayıcı oldu.. ellerine sağlık..
Cevapla