Kendi Preview Ekranımızı Oluşturmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Kendi Preview Ekranımızı Oluşturmak

Mesaj gönderen ssteeltr »

Arkadaşlar ben yazdırma ile ilgili yaşadığım problemi programcılıkta hiç bi hususta yaşamadım.

normal raporlama bileşenleri ve hatta devexpress in rapor bileşenleri bile isteklerime cevap vermedi.

çünkü benim şu anki projemde rapor ekranı ve rapor ekranında hesaplanan kısımlar var çünkü benim raporlarım veritabanındaki bir tablo veya grid deki bilgileri göstermek değil.

iş emri vermek için kullanabileceğim bir raporlama sistemi bulamadım çünkü gelen projeye göre iş emrinin yuapısı sürekli değişiyor.

her birine qreporda rapor hazırlamak olmuyor çünkü sürekli yenileri çıkıyor hesaplanan değerleri tektek qreportlabel lara eşlmek felan gerekiyor o da çook uzun iş.


ben şöyle birşey arıyom

istenen kordinatlara satır ve sütun sayısına göre tablo çizip istediğim kordinatlara yazı yazı yazıp ve gerektiğindede sayfaya sığdır diye bileceğim bir component veya source code pas dosyası varmıdır?

yardım ve önerilere şimdiden teşekürler.

Saygılarımla.
Süleyman Çelik
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Şunu bir incele
şiddetle tavsiye ederim..

http://www.delphiarea.com/products/preview/

Saygılar...
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

Murat hocam teşekkürler download ettim ama delphiye nasıl yükleyecem anlayamadım bi yardım daha hocam şimdiden teşekkürler başlangıç noktasını buldum.

Saygılar.
Süleyman Çelik
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Merhaba;

İndirdiğiniz preview bileşenini,

1. Yol :

C:\Program Files\Borland\Delphi versiyon klasörü\Lib

klasörünün içine atın ve Delphi'de companent menüsünden Install Companent diyerek ekleyin.

2. Yol :

İndirdiğiniz preview klasörünü delphi'deTools menüsünden Environment Options kısmından library bölümüne path'ini gösterek ekleyin ve daha sonra yine companent menüsünden install companent diyerek delphi'ye ekleyin,

ve güle güle kullanın..

Kolay gelsin.
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Aynen @Biltes arkadaşımızın dediği gibi ;)
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

arkadaşlar teşekkürler aynen dediğiniz gibiymiş :)

bununla ilgili olarak preview ekranına bizim direk tablo cizdirmemiz mümkünmüdür buna benzer örnek veya kod varmı ? veya ben başlangıç kordinatını satır ve sütün sayısını vercem otomatik tablo cizidrecek bir kod

bulabileceğim bi yerler varmı sitesinde pek bişey yok


Saygılarımla.
Süleyman Çelik
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

bu bileşen free olarak mı dağıtılıyor.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

sitesinde ücretli olduğuna ilişkin bir bare veya uyarı yok zaten bende kendi sitesinden indirdim.

sanıırm lisans sorunu yok.


ancak bu componentle ilgili örnek kod olan varsa yardımlarını bekliyorum

Saygılarımla.
Süleyman Çelik
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

indirdiğinizde açık örnek uygulamalar olması gerekiyor. zaten kullanımı son derece basit. ilk başlarda mantık olarak zor geliyor ama sonrası kolay.
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

murat hocam sorunu tam 12 den tesbit ettiniz başta zor geliyor bunu bi aşşam gerisini getirecem biliyom ama burda takıldım

dediğin gibi açık örnekler var ama o örnekler dogrudan bir dosyanın yüklendiği örnekler.


yardımı inceledim mesela ordan

function PaintWinControl(X, Y: Integer; WinControl: TWinControl): TPoint
fonksiyonu var denedim yazıcı hatası verdi anlayamadım.

eğer bu fonk çalışıyorsa ben gridi sayfaya yazdırabilirmiyim ?

ayrıca mesela 5 satır 7 kolondan oluşan bir tablo çizecem ama nasıl ?
bunlara dair örnekler yok.

elinizde sizin yaptığınız örnek uygulama varsa vede mümkünse gönderebilirmisiniz.

Saygılarımla.
Süleyman Çelik
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

arkadaşlar yapmayı hayal ettiğim rapora benzer bir rapor resmini gönderiyorum .umarım daha iyi anlaşılabilirim.

Resim
Süleyman Çelik
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

şimdi bu verdiğin örneğe bakacak olursak iki şekilde bu raporu hazırlayabilirsin.

ilki en basiti, bu şablonu JPG, BMP olarak boş şekilde kaydedersin, sonra sayfanın CANVAS'ına atarsın. yazıları ise manuel olarak eklersin. Bu en kolayı gibi..

ikinci olarak ise, aynen eskiden DOS uygulamalarında yaptığımız gibi, şekilleri kendin çizersin.

PrintPreview komponenti, QReport gibi değildir karıştırılmaması gerekir. PrintPreview'de herşeyi kendiniz koymalısınız. Bu komponrnt size sayfalandırma, sayfalara yazma gibi kolaylıklar sağlar, aynı zamanda Preview yaparak (ön izleme) baskı almanıza yardımcı olur.

Şimdi bir fatura yazdırma işi vardı, onun için yaptığım kodları aynen buraya yazıyorum. Umarım bu örnek işinizi görür..

Kod: Tümünü seç

procedure TForm5.SpeedButton2Click(Sender: TObject);
Var Y, I : Integer;
    GT1, GT2 : Real;
    S    : String;
begin
  DBEdit1Change(Sender);
  DeiiklikleriKAYDET1Click(Sender);
  If Not (MessageDlg('Bu faturayı yazdırmak istiyor musunuz?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) Then Exit;
  Y := 4;
  with Printer do
  begin
    BeginDoc;
    
    Printer.Canvas.Font.Name := 'ARIAL';
    Printer.Canvas.Font.Size := 10;

    Printer.Canvas.Font.Style:= [fsBold];
    Printer.Canvas.TextOut(330, 330+Y, ADI.Caption);

    Printer.Canvas.Font.Style:= [];
    Printer.Canvas.TextOut(210, 360+Y, DBMemo1.Lines[0]); // Adres Satırı 1
    Printer.Canvas.TextOut(210, 380+Y, DBMemo1.Lines[1]); // Adres Satırı 2
    Printer.Canvas.TextOut(210, 400+Y, DBMemo1.Lines[2]); // Adres Satırı 3
    Printer.Canvas.TextOut(210, 420+Y, DBMemo1.Lines[3]); // Adres Satırı 4

    Printer.Canvas.TextOut(425, 494+Y, DBText1.Caption); // Vergi Daire Adı
    Printer.Canvas.TextOut(425, 525+Y, DBText2.Caption); // Vergi Daire Numarası

    Printer.Canvas.TextOut(1595, 438+Y, DBEdit1.Text); // Fatura Tarihi
    Printer.Canvas.TextOut(1595, 486+Y, DBEdit3.Text); // İrsaliye No
    Printer.Canvas.TextOut(1595, 533+Y, DBEdit4.Text); // İrsaliye Tarihi

    //Fatura Kalemleri Yazdırılıyor!
    I := 0;
    Y := 10;
    Printer.Canvas.Font.Size := 9;
    DM.tblFatHar2.First;
    
    While Not DM.tblFatHar2.Eof Do
       Begin
          Printer.Canvas.TextOut(210, 645+Y+I, DM.tblFatHar2UrunAdi.Value);      // Malın Cinsi
          Printer.Canvas.TextOut(675, 645+Y+I, DM.tblFatHar2Kesafet.DisplayText);   // Kesafet

          Printer.Canvas.TextOut(835 +
                         (Printer.Canvas.TextWidth('99999') - Printer.Canvas.TextWidth(DM.tblFatHar2Kilo.AsString)),
                         645+Y+I,
                         DM.tblFatHar2Kilo.AsString);   // Kilo

          Printer.Canvas.TextOut(1035 +
                         (Printer.Canvas.TextWidth('99999') - Printer.Canvas.TextWidth(DM.tblFatHar2Litre.AsString)),
                         645+Y+I,
                         DM.tblFatHar2Litre.AsString);   // Litre

          Printer.Canvas.TextOut(1235 +
                         (Printer.Canvas.TextWidth('999,999,999') - Printer.Canvas.TextWidth(DM.tblFatHar2Fiyat.DisplayText)),
                         645+Y+I,
                         DM.tblFatHar2Fiyat.DisplayText);  // Birim Fiyatı

          Printer.Canvas.TextOut(1585 +
                         (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(DM.tblFatHar2Tutar.DisplayText)),
                         645+Y+I,
                         DM.tblFatHar2Tutar.DisplayText);  // Tutarı

          DM.tblFatHar2.Next;
          Inc(I, 20);
       End;

       Y := 645+Y;
       Printer.Canvas.TextOut(1585 +
                            (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
                            Y+I,
                            '==================');  // Kalem bitti çizgisi

       //
       Inc(I, 20);
       Printer.Canvas.TextOut(1160, Y+I, 'TOPLAM');
       Printer.Canvas.TextOut(1585 +
                      (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [Toplam]))),
                      Y+I,
                      Format('%0.2n', [Toplam+ISK]));  // Tutarı

       If DM.tblFatura2Iskonto.Value > 0 Then
          Begin
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'İSKONTO');
             Printer.Canvas.TextOut(1585 +
                            (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [ISK]))),
                            Y+I,
                            Format('%0.2n', [ISK]));  // Tutarı
             Inc(I, 20);

             Printer.Canvas.TextOut(1585 +
                            (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
                            Y+I,
                            '==================');  // Tutarı
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'ARA TOPLAM');
             Printer.Canvas.TextOut(1585 +
                            (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [Toplam]))),
                            Y+I, Format('%0.2n', [Toplam]));  // Tutarı
          End;

      Inc(I, 20);
      Printer.Canvas.TextOut(1160, Y+I, 'KDV %' + DBEdit5.Text);
      Printer.Canvas.TextOut(1585 +
                     (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [KDV]))),
                     Y+I,
                     Format('%0.2n', [KDV]));  // Tutarı



       Inc(I, 20);
       Printer.Canvas.TextOut(1585 +
                      (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
                      Y+I,
                      '==================');
       If SP <= 0 Then
          Begin
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'G.TOPLAM');
             Printer.Canvas.TextOut(1585 +
                                    (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam+SP]))),
                                    Y+I,
                                    Format('%0.2n', [GToplam]));  // Tutarı
          End
       Else
          Begin
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'ARA TOPLAM');
             Printer.Canvas.TextOut(1585 +
                                    (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam+SP]))),
                                    Y+I,
                                    Format('%0.2n', [GToplam+SP]));  // Tutarı
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'Sigorta Primi');
             Printer.Canvas.TextOut(1585 +
                                    (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [SP]))),
                                    Y+I,
                                    Format('%0.2n', [SP]));  // Tutarı

             Inc(I, 20);
             Printer.Canvas.TextOut(1585 +
                                    (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
                                    Y+I,
                                    '==================');
             Inc(I, 20);
             Printer.Canvas.TextOut(1160, Y+I, 'G.TOPLAM');
             Printer.Canvas.TextOut(1585 +
                                    (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
                                    Y+I,
                                    Format('%0.2n', [GToplam]));  // Tutarı
          End;





    Printer.Canvas.Font.Size := 8;
    GT1 := Int(GToplam);
    GT2 := GToplam - GT1;
    S := Yaziyle(GT1) + ' YTL';
    if GT2 > 0 then
       begin
          GT2 := (GT2 * 100);
          S := S + ' ' + Yaziyle(GT2) + ' YKr';
       end;
    Printer.Canvas.TextOut(210, 1120, S); // Yaziyle
    Printer.Canvas.Font.Size := 10;
    Printer.Canvas.Font.Style:= [fsBold];
    Printer.Canvas.TextOut(535, 1280, DM.tblFatura2Vade.DisplayText); // Vade Tarihi

   Printer.Canvas.TextOut(1585 +
                         (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
                          1100,
                          Format('%0.2n', [GToplam]));  // Tutarı
   Printer.Canvas.TextOut(1585 +
                         (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
                          1140, 'DAHiL');  // KDV Dahil

   Printer.Canvas.TextOut(1585 +
                         (Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
                          1190,
                          Format('%0.2n', [GToplam]));  // G.Toplam


    EndDoc;
  end;
end;
Fakat şimdi farkettim, bu bildiğimiz (uses Printers) ile gelen Printer nesnesi ile yapılan bir örnek. Ama sizlere lazım olabilir diye veriyorum. Şimdi PrintPreview ile gelen örneği inceleyelim.

Formun üstüne TPrintPreview nesnesi koyalım. Bu satırlar printpreview ile gelen GENERAL adlı örnekten alındı.

Kod: Tümünü seç

procedure Printle;
begin
   //bu örnekte sadecde ön izleme oluşturuluyor.
   // siz ayrıca print etmek isterseniz.
   // PrintPreview.Print;  komutu verin ENDDOC'tan sonra..
   with PrintPreview1 do
      begin
         BeginDoc;
         CreateImageTextPage;
         NewPage; // ikinci sayfaya başlamak için..
         // ikinci sayfa için bişiler yazabilirsiniz..    
    finally
      EndDoc;
    end;
  end;
end;

procedure TMainForm.CreateImageTextPage;
var
  R: TRect;
  OneCM: TPoint;
  SavedBottom: Integer;
begin
  with PrintPreview do
  begin
    // Don't forget that we have already drawn a frame for the page with 1cm
    // margin. We have to exclude it from the paper size. The content would
    // have 1cm margin relative to the frame.
    // 1cm yi yazıcı için çeviriyor
    OneCM := ConvertXY(100, 100, mmLoMetric, Units);
    R := PageBounds;
    InflateRect(R, -(2 * OneCM.X), -(2 * OneCM.Y));
    // We want to place an image horizontally in center of the paper and
    // under the frame's top. In addition, we want the image height does
    // not exceed 3cm limit.
    SavedBottom := R.Bottom;
    R.Bottom := R.Top + 3 * OneCM.Y;
    //burda Image1 içindeki resmi sayfaya yazıyoruz.
    PaintGraphicEx(R, Image1.Picture.Graphic, True, True, True);
    // We are going to draw a frame and write some text inside it. The new
    // frame is 1cm under the image boundary.
    R.Top := R.Bottom + OneCM.Y;
    R.Bottom := SavedBottom;
    // Here, we draw the frame.
    Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
    // To write the frame's dimensions under the frame
    Canvas.Font.Size := 8;
    
    //basitçe bir text'i sayfaya yazıyoruz.
    Canvas.TextOut(R.Left, R.Bottom, Format('%d (%s) x %d (%s)',
      [R.Right - R.Left, UnitComboBox.Items[UnitComboBox.ItemIndex],
       R.Bottom - R.Top, UnitComboBox.Items[UnitComboBox.ItemIndex]]));
    // For the first line of the sample text, we set the font size to 12.
    Canvas.Font.Size := 12;
    // While we have not reached to the frame's bottom...
    InflateRect(R, -OneCM.X div 5, -OneCM.Y div 5);
    while R.Top - Canvas.Font.Height <= R.Bottom do
    begin
      // Randomly we select a font color
      Canvas.Font.Color := RGB(Random(256), Random(256), Random(256));
      // draw the text,
      Canvas.TextRect(R, R.Left, R.Top, 'Powered by Borland Delphi.');
      // move the frame's top to the next line,
      Inc(R.Top, -Canvas.Font.Height);
      // and we increase the font size by 1
      Canvas.Font.Size := Canvas.Font.Size + 1;
    end;
  end;
end;

Valla karma karışık oldu :D umarım işin içinden çıkarsın. Şimdi hatırladım, ben ön izleme aracı olarak PrintPreview'i kullanıyordum birde sayfalama mantığı kolay diye. Ancak Fatura ya da tek sayfalık baskılar için Printers unitindeki sabit Printer nesnesinden faydalanıyordum.

Eğer uygulamanda Veri tabanından bağlantılı birşeyler yapacaksan QReport'a da bakmanı öneririm. Ama ben eski kafalıyım (aynı benim gibi) diyorsan PrintPreview yada Printers nesneleriylede çok iyi sonuçlar elde edebilirsin..

Saygılar..
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

aynen hocam bende eski kafatım.....:)

zaten benim rapor ekranım sabit olsa ben qreportu hemen kullanıurım ancak bende satır ve sütunlar sürekli her üründe değişior o yüzden qreport ta her ürüne bi sayfa hazırlamak ölüm...

kodlar için teşekkürler burdan anladımki tek tek kordinatlara biz yazacagız tablolarıda line comutu ile biz cizeceyiz

Saygılarımla.
Süleyman Çelik
Cevapla