Yazdırınca Preview ekranını kapatmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Yazdırınca Preview ekranını kapatmak

Mesaj gönderen Salih »

Merhaba,

Hem Zreport'ta hem de Qreport'ta şu işlemi yapmak istiyorum :

Zreport1.preview; ile preview ekranına girdim, burada print'e bastıktan sonra ana forma dönmek için Exit'e basmak gerekiyor. Benim istediğim, print'e basınca print ettikten sonra exit'e basılmış gibi ana forma dönmek.
(Zreport1.print; kullanmak istemiyorum)

Şimdiden teşekkürler....
Sevgi, Saygı.....
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bunu ancak ilgili componentlerin source kodlarını değiştirerek yapabilirsiniz. Eğer preview'in görünmesi sizin için önemli değilse, direk Print metodu ile yazdırın.

Kolay gelsin.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

Preview yapmak bizim için önemli.

Kod: Tümünü seç

procedure TZReport.Preview;
begin
  if PreparePrinter(Self) then
    try
      Printer.Preview;
      Generate(False);
      if Assigned(Printer) then Printer.Finished;
      repeat
        Application.ProcessMessages;
      until not Assigned(Printer) or not Printer.InPreview or Application.Terminated;
    finally
      Printer.Free;
      SetPrinter(nil);
    end;
end;

procedure TZReport.Print;
begin
  if PreparePrinter(Self) then begin
    try
      if ShowProgress then Printer.ProgressForm.Show;
      Generate(False);
      if Assigned(Printer) then begin
        Printer.Finished;
        if not Printer.Cancelled then Printer.Print;
      end;
    finally
      Printer.Free;
      SetPrinter(nil);
    end;
  end;
end;


Zreport procedure ları bunlar. Sanırım burada bir numara yapmak lazım, ama ne ? İşi karıştırırım korkusuyla bulaşamadım.

Bir de, doğru değişikliği yaptık farzedelim, daha sonra Zreport için tekrar derleme gibi bir işlem yapmak gerekir mi ?
Sevgi, Saygı.....
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad c++ builder de dedigin olayi yaptim.(QuickRep için) Fakat delphi bilmedigim için delhiye nasıl cevrilir bilmiyorum.

Artik hem Delphi hem c++ builder bilen üstadlar belki delphiye cevirir.

Projede iki form var. Form1 ve Form2. Form1 de bir buton, Form2 de quickrep var.

Form1 için:

.h dosyası
.....

Kod: Tümünü seç

public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
         void __fastcall BenimClick(TObject *Sender);
.....

.cpp dosyası

....

Kod: Tümünü seç

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BenimClick(TObject *Sender)
{
 ShowMessage("Yazıp Cikacam");
 Form2->QuickRep1->Print();
 Form2->QuickRep1->QRPrinter->Client->Parent->Hide();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Timer1->Enabled=true;
 Form2->QuickRep1->Preview();
 Timer1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  TForm       *pPreviewForm=NULL;
  TToolBar    *pToolBar=NULL;
  TToolButton *pToolBtn=NULL;

  if( Form2->QuickRep1->QRPrinter==NULL ||
      Form2->QuickRep1->QRPrinter->Client==NULL ||
      Form2->QuickRep1->QRPrinter->Client->Parent==NULL)
     return;

  pPreviewForm = dynamic_cast<TForm *>(Form2->QuickRep1->QRPrinter->Client->Parent);

  if( pPreviewForm==NULL)
   return;

  for(int i=0;i<pPreviewForm->ControlCount;i++)
  {
    pToolBar=dynamic_cast< TToolBar *>(pPreviewForm->Controls[i]);
    if(pToolBar!=NULL)
    {
      for(int j=0;j<pToolBar->ControlCount;j++)
      {
        pToolBtn=dynamic_cast<TToolButton *>(pToolBar->Controls[j]);
        if(pToolBtn!=NULL && pToolBtn->Name=="Print")
        {
          pToolBtn->OnClick = BenimClick;
          Timer1->Enabled=false;
          break;
        }
      }
      break;
    }
  }
}
....
unalk68
Üye
Mesajlar: 2
Kayıt: 23 Eki 2003 01:58

Mesaj gönderen unalk68 »

if dm1.tanimtablepre.value then formadi.rep.preview
else formadi.rep.print;
unalk68
Üye
Mesajlar: 2
Kayıt: 23 Eki 2003 01:58

Mesaj gönderen unalk68 »

ha unutmadan print butonunun yanına checkbox koy ozaman çalışır eger tanımyaptıgın bir table varsa oraya cek tanımı yap
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

Merhaba,

Cevaplar için teşekkürler, ama tam benim istediğim değil sanırım.

Şimdi benim istediğim şu, yazdır butonuna basınca preview ekranına girelim ama, preview a baktıktan sonra 'print' e basarsak preview ekranı da kapansın, ana forma döneyim.
Sevgi, Saygı.....
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad zaten program dedigini yapiyor.

Şimdi Formda senin YAZDIR butonun var. bu butona basınca quickrep in preview ekranı geliyor.

QuickRep1->Preview(); calisiyor yani.


sona QuickRep deyken kullanıcı quickrep in yazdır butonuna basti.
program yazdirma işlemini yapip quickrep in CLOSE butonuna basmaya gerek kalmadan preview penceresi kapaniyor. Ve programa geri dönüyor.

yukarıdaki kodu delphiye cevirmeye calistim fakat delphi bilmedigim icin yapamadım.

Kod: Tümünü seç

  pToolBar=dynamic_cast< TToolBar *>(pPreviewForm->Controls[i]); 
bu delphide nasıl yazilir bilemiyorum mesela...

Kodu fikir verir diye yazdım.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

Merhaba,

'Tam benim istediğim değil' derken 'unalk68' arkadaşımız için söylemiştim. Sizin yazdıklarınız işe yarıyordur belki ama ben c ++ bilmediğim için, Delphi de de o kadar usta olmadığım için henüz bir şey yapamadım. Her ikisini de bilen bir arkadaş bu çevrimi yapar umarım.
Sevgi, Saygı.....
Misafir

Mesaj gönderen Misafir »

merhaba.
her ne kadar incelesem de projelerde zreportu kullanmadım.ancak qreportta kendi ön izleme ekranınızı oluşturarak istediğinizi yapmak daha mantıklı geliyor bana.
kolay gelsin.
Cevapla